_Desh_ 0 7 января, 2021 Опубликовано 7 января, 2021 · Жалоба Прошерстил форум и Интернет на предмет использования утилиты srec_cat.exe, но остались вопросы и непонятки. Мне надо добавить в конец прошивки ее CRC, с этим я справился: srec_cat.exe test_file_source.bin -binary -crc32-l-e -maximum-address test_file_source.bin -binary -o test_file.bin -binary Также хотелось бы перед формированием конечного файла прошивки увидеть в выводе IDE полученную CRC (или даже записать ее в отдельный файл). Это тоже можно сделать, например, так: srec_cat.exe test_file_source.bin -binary -fill 0xFF 0 0x400 -crop 0 0x400 -crc32-b-e 0x400 -crop 0x400 0x404 -o - -hex-dump Но как быть, если размер прошивки заранее неизвестен? Чтобы встроить вызов утилиты в IDE и полностью автоматизировать процесс, не вводя ручками каждый раз разные адреса. Во втором случае, если использовать, например, -crop -maximum-address test_file_source.bin -binary -maximum-address test_file_source.bin -binary -offset 4 вместо -crop 0x400 0x404 В консоль выводится полный дамп прошивки, а не 4 последние байта, как мне надо. Есть ли способ для утилиты srec_cat.exe указывать в качестве параметров, например, реальную длину файла, а не забивать магические константы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 172 7 января, 2021 Опубликовано 7 января, 2021 · Жалоба 22 минуты назад, _Desh_ сказал: Но как быть, если размер прошивки заранее неизвестен? Писать CRC не в конец, а внутрь прошивки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Desh_ 0 7 января, 2021 Опубликовано 7 января, 2021 (изменено) · Жалоба 6 hours ago, jcxz said: Писать CRC не в конец, а внутрь прошивки. Вопрос немного не об этом, но допустим. При попытке писать длину прошивки и CRC вместо неиспользуемых (несуществующих) векторов по заранее известному фиксированному адресу: srec_cat.exe test_file_source.bin -binary -length-l-e 0x1C -crc32-b-e 0x20 -o test_file.bin -binary srec_cat.exe выводит следующее сообщение об ошибке: srec_cat: test_file_source.bin: 0x0400: multiple 0x0000001C values (previous = 0x0C, this one = 0x00) Что это означает и как это исправить? Из документации ни черта не понятно, там есть почти такой же пример, и видимо он должен работать. P.S. Что означает ошибка примерно понял. Он мне хочет сказать, что я хочу какое-то ненулевое значение перезаписать новым значением (нулевым). Ну и что? Мне это и надо. Изменено 7 января, 2021 пользователем _Desh_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Desh_ 0 7 января, 2021 Опубликовано 7 января, 2021 (изменено) · Жалоба Методом проб и ошибок выяснил, что перезаписать данные по некоторому адресу можно, сначала исключив этот адрес: srec_cat.exe test_file_source.bin -binary -exclude 0x1C 0x20 -length-l-e 0x1C -o test_file.bin -binary Теперь по адресу 0x1C корректно записывается длина файла. Но теперь проблема записать по адресу 0x20 значение CRC. Если исключить диапазон 0x20-0x24, то в расчете CRC он не участвует, выдается предупреждение о том, что в данных есть прореха. В принципе, при сверке CRC программно внутри контроллера можно это учесть, но получается как-то некрасиво. Есть ли более элегантный способ прописать CRC в нужный адрес? Изменено 7 января, 2021 пользователем _Desh_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 129 7 января, 2021 Опубликовано 7 января, 2021 · Жалоба Потратить десяток минут на написание своей утилиты, нежели несколько дней плясать вокруг чужой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 7 января, 2021 Опубликовано 7 января, 2021 · Жалоба 2 часа назад, _Desh_ сказал: Теперь по адресу 0x1C корректно записывается длина файла. Ну так используйте ее для вычисления адреса, по которому сразу за концом прошивки (не забыв про необходимое выравнивание) будет лежать CRC. Я делаю именно так, правда, не использую для этого srecord. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться