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

Кейл. Вставить crc бинарник.

Здравствуйте Все! Пытаюсь сделать следующее: хочу после компиляции и сборки чтобы кейл вычислял 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 редактор совпадает с онлайн суммой а вот кейлом нет. Разъясните кто знает!

Хотел прикрепить бинарник пишет мне нельзя загружать такой тип файлов.

 

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


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

Хотел прикрепить бинарник пишет мне нельзя загружать такой тип файлов.

Прикрепите картинку, или просто тесктом напишите "правильное" и "неправильное" содержимое векторов.

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


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

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

 

test.jpg

post-81299-1477371595_thumb.jpg

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


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

Это не CRC, а контрольная сумма, и не всего бинарника, а только векторов. Специфичная для LPC вещь, описание можно найти в документации на процессор.

 

0 - 0x10001600 - 0x800028d - 0x800cbb9 - 0x8009d21 - 0x800cbb5 - 0x8001015 - 0x8012085 = 0xbffc824a

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


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

Когда Кейл вычислил CRC, ее нельзя записывать в то место, которое потом будет участвовать в расчете CRC. Можно куда-нибудь дальше. Или не включать в расчет область векторов (где ее в данном случае хочется разместить). Ведь любой отличающийся бит влияет на результат.

И еще, а полином расчета точно одинаковый для Кейл и Hex редактора?

 

Ага, значит, Кейл ограничился при расчете адресами с первого указанного по последний указанный.

Я вычисляю CRC своей программой.

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


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

Хотел прикрепить бинарник пишет мне нельзя загружать такой тип файлов.
Надо поменять расширение на txt, jpg, pdf...

Я раньше не был знаком с ElfDwT.exe

Тут прочитал http://www.keil.com/support/man/docs/uv4/uv4_ut_elfdwt.htm что он считает необходимую контрольную сумму для процов NXP.

Помнится мне в NXP ARM7 эта контрольная сумма считалась только для векторов прерываний а не для всего файла. Хотя может я что-то путаю.

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


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

Это не CRC, а контрольная сумма, и не всего бинарника, а только векторов. Специфичная для LPC вещь, описание можно найти в документации на процессор.

Да действительно пример был для NXP. Похоже что это вовсе не то чего я хотел(не правильно перевел да и слово checksum похоже вовсе не CRC). Отрицательный результат тоже результат. Думал автоматизировать процесс. А вообще так можно делать считать CRC бинарника и вручную вписывать это значение по адресам со смещением 0x1C. Я понял что эти 4 байта (адрес) для cortex-m зарезервированы? Так можно делать?

 

 

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


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

написать свою программу на ПК, чтоб она считала нужную вам сумму и вписывала в нужно вам место, и запускать её после fromelf'a.

я обычно так и делаю, вызываю в User Run#1 командный файл make_bin.cmd, а в нем все что мне нужно и подсчет crc и создание хидеров и шифрование и т.д.

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


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

написать свою программу на ПК, чтоб она считала нужную вам сумму и вписывала в нужно вам место

Эта программа уже написана. Называется srec_cat. См. тут.

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


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

Эта программа уже написана. Называется srec_cat. См. тут.

А вариант применения можно найти в этом makefile.

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


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

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 как писал выше.

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


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

Подскажите пожалуйста как писать crc в конец файла данной утилитой когда не известно предварительно размер файла test.bin. или как можно записать crc по адресу со смещением 0x1C как писал выше.

Возможно, так:

srec_cat input.bin -bin --crc32-l-e -max-addr input.bin -bin -o output.bin -output
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

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


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

Точно!!! :08: Спасибо Вам большое долго парился 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 или в конце. Мнение мое поменялось. Буду пользоваться первыми двумя. Спасибо Всем!

 

 

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


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

Хорошо, что всё хорошо.

Вообще-то srec_cat многое умеет. Документация не для слабонервных, конечно. Но, когда вникнешь, логика очевидна. Было бы полезно наваять текст для страждущих - сколько пользы было бы...

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


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

Вообще-то srec_cat многое умеет. Документация не для слабонервных, конечно. Но, когда вникнешь, логика очевидна. Было бы полезно наваять текст для страждущих - сколько пользы было бы...

А мне вот srecord как-то не приглянулся совсем. Проще на "C" набросать нужную утилиту по месту.

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


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

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

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

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

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

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

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

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

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

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