|
Кейл. Вставить crc бинарник. |
|
|
|
Oct 25 2016, 02:49
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 9-04-14
Из: Черногорск Хакасия
Пользователь №: 81 299

|
Здравствуйте Все! Пытаюсь сделать следующее: хочу после компиляции и сборки чтобы кейл вычислял crc и записывал эту сумму в сам файл bin. Нашел инструкцию в которой написано что нужно добавить options for target->user->Run user programs after Build/Rebuild сначала команду Run#1 $K\ARM\BIN\ElfDwT.exe output\test.axf BASEADDRESS(0x08000000) которая вычислит crc кода и запишет в место в стартапе по адресу 0x0800 000+0x1c(для BASEADDRESS=0x08000000 ). Далее Run#2 $K\ARM\ARMCC\BIN\fromelf.exe --bin -o test.bin !L делаем из axf бинарник уже со встроенной crc.
Все получается открываю бинарник там вместо вектора в стартапе (где обычно зарезервировано 0 со смещением 0x1С) находится crc 0xBFFC824A. Все вроде хорошо но только эта сумма не совпадает и не понятно как кейл ее считает. Проверяю так: Просто делаю бинарник в кейл с помошью такой же вкладки но только использую одну fromelf без предварительно вставленной crc. Затем открываю в редакторе hex (Hex Editor ) и смотрю crc не совпадает. Пробовал онлайн калькулятор crc для файлов результат аналогичный. Причем hex редактор совпадает с онлайн суммой а вот кейлом нет. Разъясните кто знает! Хотел прикрепить бинарник пишет мне нельзя загружать такой тип файлов.
|
|
|
|
|
Oct 25 2016, 05:03
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 9-04-14
Из: Черногорск Хакасия
Пользователь №: 81 299

|
Файл test.bin открыт в редакторе hex. Видно что crc записана в нужное место но только эта crc (0xbffc824a) не совпадает если например в этом редакторе выделить весь бинарник целиком и отобразить контрольную сумму. Пробовал вместо CRC вписывать 0x00000000 типа как бы бинарник в котором по умолчанию по этому адресу нули. Все равно crc не та. Просто мне затем надо писать функцию на мк(stm32) которая бы считывала эту crc из файла и сравнивала его с crc самого бинарника. Но не могу понять как этот crc вычисляется в самой IDE (keil.)
Эскизы прикрепленных изображений
|
|
|
|
|
Oct 25 2016, 05:25
|

Гуру
     
Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606

|
Цитата Хотел прикрепить бинарник пишет мне нельзя загружать такой тип файлов. Надо поменять расширение на txt, jpg, pdf... Я раньше не был знаком с ElfDwT.exe Тут прочитал http://www.keil.com/support/man/docs/uv4/uv4_ut_elfdwt.htm что он считает необходимую контрольную сумму для процов NXP. Помнится мне в NXP ARM7 эта контрольная сумма считалась только для векторов прерываний а не для всего файла. Хотя может я что-то путаю.
|
|
|
|
|
Oct 25 2016, 06:37
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 9-04-14
Из: Черногорск Хакасия
Пользователь №: 81 299

|
Цитата Это не CRC, а контрольная сумма, и не всего бинарника, а только векторов. Специфичная для LPC вещь, описание можно найти в документации на процессор. Да действительно пример был для NXP. Похоже что это вовсе не то чего я хотел(не правильно перевел да и слово checksum похоже вовсе не CRC). Отрицательный результат тоже результат. Думал автоматизировать процесс. А вообще так можно делать считать CRC бинарника и вручную вписывать это значение по адресам со смещением 0x1C. Я понял что эти 4 байта (адрес) для cortex-m зарезервированы? Так можно делать?
|
|
|
|
|
Oct 25 2016, 06:53
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 8-02-05
Пользователь №: 2 486

|
написать свою программу на ПК, чтоб она считала нужную вам сумму и вписывала в нужно вам место, и запускать её после fromelf'a. я обычно так и делаю, вызываю в User Run#1 командный файл make_bin.cmd, а в нем все что мне нужно и подсчет crc и создание хидеров и шифрование и т.д.
|
|
|
|
|
Oct 25 2016, 09:21
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(scifi @ Oct 25 2016, 11:25)  Эта программа уже написана. Называется srec_cat. См. тут. А вариант применения можно найти в этом makefile.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Oct 25 2016, 15:16
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 9-04-14
Из: Черногорск Хакасия
Пользователь №: 81 299

|
Run #1 $K\ARM\ARMCC\BIN\fromelf.exe --bin -o output\test.bin !L делаю бинарник
Run #2 D:\Keil\ARM\BIN\srec_cat test.bin -BIN --crc32-l-e 0x34В90 -o test_1.bin -BIN считается crc32 для test.bin и записывается в файл test1.bin по адресу 0x34D90. Этот адрес посмотрел вручную редактором. Подскажите пожалуйста как писать crc в конец файла данной утилитой когда не известно предварительно размер файла test.bin. или как можно записать crc по адресу со смещением 0x1C как писал выше.
|
|
|
|
|
Oct 25 2016, 16:55
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 9-04-14
Из: Черногорск Хакасия
Пользователь №: 81 299

|
Точно!!!  Спасибо Вам большое долго парился c "-max". Даже нашел альтернативу сдвинуть все на 4 и записать crc в первые 4 байта. Код srec_cat test.bin -BIN -offset 0x4 -crc32-l-e 0x0 -o test.bin -BIN Только в конце строчки Код srec_cat input.bin -bin --crc32-l-e -max-addr input.bin -bin -o output.bin -output надо -bin а не -output Код srec_cat input.bin -bin --crc32-l-e -max-addr input.bin -bin -o output.bin -bin Эта строчка Код srec_cat input.bin -bin -crop 0 0x1c -c-n-l-e 0x1C 4 4 input.bin -bin -exclude 0 0x20 -o output.bin -bin делает ровно то с чего я начал топик(файл ElfDWT) со смещением 0x1C вставляет 0xBFFC824A. Мне кажется удобнее когда или в начала crc или в конце. Мнение мое поменялось. Буду пользоваться первыми двумя. Спасибо Всем!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|