Перейти к содержанию
    

Нужна помощь по утилите srec_cat.exe

Прошерстил форум и Интернет на предмет использования утилиты 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 указывать в качестве параметров, например, реальную длину файла, а не забивать магические константы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 минуты назад, _Desh_ сказал:

Но как быть, если размер прошивки заранее неизвестен?

Писать CRC не в конец, а внутрь прошивки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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. Что означает ошибка примерно понял. Он мне хочет сказать, что я хочу какое-то ненулевое значение перезаписать новым значением (нулевым). Ну и что? Мне это и надо.

Изменено пользователем _Desh_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Методом проб и ошибок выяснил, что перезаписать данные по некоторому адресу можно, сначала исключив этот адрес:

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 в нужный адрес?

Изменено пользователем _Desh_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потратить десяток минут на написание своей утилиты, нежели несколько дней плясать вокруг чужой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, _Desh_ сказал:

Теперь по адресу 0x1C корректно записывается длина файла.

Ну так используйте ее для вычисления адреса, по которому сразу за концом прошивки (не забыв про необходимое выравнивание) будет лежать CRC. Я делаю именно так, правда, не использую для этого srecord.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...