Я много беру от интернета. Вот и я решил поделиться с сообществом. Возможно, эта моя крохотная утилита окажется кому то полезной.
Идея: написать консольное приложение для работы с прошивками, чтобы автоматически вставлять в неё номер сборки, дату, время, контрольную сумму и делать
другие изменения. Также часто просто приходится делать 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