Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 18.09.2006, 03:09  
deCoder
Прописка
 
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
deCoder на пути к лучшему
По умолчанию Автоматическое внесение изменений в прошивку.

Я много беру от интернета. Вот и я решил поделиться с сообществом. Возможно, эта моя крохотная утилита окажется кому то полезной.

Идея: написать консольное приложение для работы с прошивками, чтобы автоматически вставлять в неё номер сборки, дату, время, контрольную сумму и делать
другие изменения. Также часто просто приходится делать Hex2Bin и Bin2Hex для разной разрядности.
Довольно удобно. В моих устройствах, например, всегда можно посмотреть номер сборки. Например, вывести на экран или посмотреть при запросе через RS232. При старте контроллера также происходит проверка целостности программы. При несоответствии контрольной суммы прибор начинает «ругаться».
То есть достаточно один раз написать бат-файл. При возможности прикрутить его прямо в меню компилятора и назначить горячую клавишу. То есть, как обычно компилируем проект и потом запускаем бат-файл.
Ситуации осложняется тем что некоторые компиляторы знают только один выходной формат или программатор умеет работать только с одним форматом данных. Также для hex-файла следует учитывать разрядность данных. Наиболее простым мне показалось делать изменения в «сыром» bin-файле и в случае необходимости делать bin2hex и/или hex2bin на входе или на выходе.
В сети валяются консольные утилиты bin2hex, hex2bin кажется от ИАРа. Возможно просто у меня не получилось, но bin2hex умеет делать только файлы для 32 байт в строке. А некоторые тупые программаторы или компиляторы его не понимают. Им необходимо точно указывать разрядность хранимых данных. Например, для x51 это 8, AVR – 16 а ARM – 16 или 32 в зависимости от используемого режима.
За основу был взят найденный в сети исходник HEX2BIN от (c) V.Grazdankin, 1999
К сожалению, он не работает с файлами более 64k.
Так же было замечено, что иногда, в силу невыясненных причин виндовс не может получить доступ к какому либо файлу на запись, либо этот файл отсутстствует либо случайно открыт другой программой. Важно отслеживать успешность выполнения команды. Для этого я сделал звуковую индикацию ошибки.

Возможности (режимы) AutoPath v1.0:
1. hex2bin. Размер файлов не ограничен (и для остальных режимов). Производится проверка контрольных сумм. Возможно это актуально для скаченных прошивок из интернета.
2. build&data. По нужному адресу вставляется 7 двоичнодесятичных байт вида:
‹номер сборки (2)› ‹год (1)› ‹месяц (1)› ‹день (1)› ‹час (1)› ‹мин (1)›
номер билда берётся из файла build.dat. При его отсутствии он создаётся и записывается 1 билд. Естественно в программе нужно зарезервировать место в памяти программ на эти 7 байт и реализовать механизм чтения данных.
3. СS8. В парамете – адрес куда вставляется контрольная сумма. Например если параметр = 0xFFFF. То производится сложение всех байт с 0 адреса по 0xFFFE и младший байт записывается по адресу 0xFFFF.
4. Path. Cчитывается файл с именем path.dat и в соответствии с ним производится «пропатчивание» прошивки. Естественно можно изменять не только прошивки микроконтроллера, но и не в чём не повинные виндовые программы
path.dat – текстовый файл, например такого вида:

0x0100 1, 0xAA, 2, 3,0x65
30 0x0D, 0x77, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88
0x10FFF0 0x99
…..
первый байт в строке – адрес, а остальные (через запятую) данные для записи.

5. Cutter. Обрезка прошивки по нужному адресу.
6. Bin2hex. В параметре – разрядность хранимых данных. Контроль параметра не делал нарочно. Можно посмотреть как выглядит hex-файл для 64 битного процессора )) Например, бат-файл может быть такой (i.hex – входной файл, o.hex- выходной):

rem получим bin файл:
ap.exe –m 1 –i i.hex –o 1.bin
rem допишем в хвост файла какой нить мусор (copy – это функция командной строки):
copy /b 1.bin+trash.bin 2.bin

rem обрежем по нужному нам адресу:
ap.exe –m 5 –i 2.bin –p 0xDFFF

rem допишем какой нибудь нужный кусок. (это может быть, например, wav файл или бутлоадер):
copy /b 2.bin+beep.bin 1.bin

rem запишем по адресу 0x100 номер билда и время:
ap.exe –m 2 –i 2.bin –p 0x100
rem пропатчим path.dat
ap.exe –m 3 –i 2.bin
rem вставим контрольную сумму по адресу 0xFFFF
ap.exe –m 4 –i 2.bin –p 0xFFFF
rem обрежем файл по адрес 0xFFFF
ap.exe –m 5 –i 2.bin –p 0xFFFF
rem получим hex файл
ap.exe –m 6 –i 2.bin –o o.hex –p 16
rem удалим временные файлы
del 1.bin
del 2.bin

Всё писалось для себя. Отсутствуют некоторые проверки «от дурака». Также возможны явные ошибки с моей стороны. Настоятельно рекомендую тщательно всё проверять. Для сравнения «до» и «после» удобно использовать возможности Тотал Коммандера. В моей программе имеется справка. До этого некоторые функции
использовались в отдельных программах. Эта программа толком не тестировалась. Выкладываю исходник на Си. Желающие могут дописывать свои функции и сообщать о багах.

Прикрепленный файл: 6664462.rar
Реклама:
deCoder вне форума  
Непрочитано 18.09.2006, 08:02  
Andrewg
Прописка
 
Регистрация: 08.06.2006
Сообщений: 215
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
Andrewg на пути к лучшему
По умолчанию

Это достаточно важно и удобно когда дело идёт на производстве. Спасибо!
Andrewg вне форума  
Непрочитано 18.09.2006, 12:27  
avr123-nm-ru
Почётный гражданин KAZUS.RU
 
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
avr123-nm-ru на пути к лучшему
По умолчанию

Спасибо.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
avr123-nm-ru вне форума  
Непрочитано 20.09.2006, 19:20  
deCoder
Прописка
 
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
deCoder на пути к лучшему
По умолчанию

Дико извиняюсь...
в модуле hex2bin есть ошибка при обработке больших файлов.
deCoder вне форума  
Непрочитано 21.09.2006, 07:41  
Andrewg
Прописка
 
Регистрация: 08.06.2006
Сообщений: 215
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
Andrewg на пути к лучшему
По умолчанию

Обычно так и выкладывается.
Кто хочет сам разберётся, Важна сама идея, как сделать это уже другой вопрос. Кто не хочет копаться в исходниках значит ему это не надо. Халявы не надо. Спасибо за то что выложил.
Andrewg вне форума  
Непрочитано 16.11.2006, 01:19  
SL2
Частый гость
 
Регистрация: 20.01.2005
Сообщений: 30
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
SL2 на пути к лучшему
По умолчанию

Сообщение от deCoder
Идея: написать консольное приложение для работы с прошивками, чтобы автоматически вставлять в неё номер сборки, дату, время, контрольную сумму и делать
другие изменения.
Чтото похожее в AVR Studio 4.12 я делаю так

;================== Title =========================
.cseg
Title:
.db "'М Автоматик' Набережные Челны: Стенд.",'\n'
.db "Откомпилировано - " __DATE__,0

Позже по указателю Title можно передать всё куда надо.
SL2 вне форума  
Непрочитано 28.11.2006, 21:19  
deCoder
Прописка
 
Регистрация: 27.05.2005
Сообщений: 127
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 2 сообщении(ях)
deCoder на пути к лучшему
По умолчанию

Цитата:
.db "Откомпилировано - " __DATE__,0
Вообщем то будет работать. Этот макрос есть и в моей программе, но:
1. Если файлов в программе несколько десятков? То придётся делать каждый раз полную перекомпиляцию. Иначе дата останется от прошлой сборки. В некоторых средах можно пометить файл как обязательный для перекомпиляции. Но эта возможно не во всех средах. А если __DATE__ есть во многих файлах проекта? Всё это ведёт к увеличению времени компиляции.
2. __DATE__ - по моему "сишная" фишка не уверен что это поддерживается во всех компиляторах.
3. На мой взгляд лучше иметь дату в виде строки. Передаёшь функциям flash указатель и всё.
4. Проблема с номером сборки также никак не решается. Она мне, в частности, нужна.
deCoder вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли удалённо обновить прошивку в ARM7? Developer_ Микроконтроллеры, АЦП, память и т.д 1 17.07.2009 15:04
Автоматическое зарядное устройство на PIC12F629 488 Источники питания и свет 8 09.07.2007 16:15
Как оформлять в КД прошивку к микросхемам byeloruss Делимся опытом 1 27.06.2007 11:42
Как уменьшить прошивку кода написанного на С? graham Микроконтроллеры, АЦП, память и т.д 30 14.01.2006 21:03
Автоматическое распознавание контроллера French Микроконтроллеры, АЦП, память и т.д 0 27.09.2004 17:42


Часовой пояс GMT +4, время: 20:17.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot