реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Кейл. Вставить crc бинарник.
pvo125
сообщение Oct 25 2016, 02:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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 редактор совпадает с онлайн суммой а вот кейлом нет. Разъясните кто знает!
Хотел прикрепить бинарник пишет мне нельзя загружать такой тип файлов.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 25 2016, 04:42
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(pvo125 @ Oct 25 2016, 05:49) *
Хотел прикрепить бинарник пишет мне нельзя загружать такой тип файлов.

Прикрепите картинку, или просто тесктом напишите "правильное" и "неправильное" содержимое векторов.
Go to the top of the page
 
+Quote Post
pvo125
сообщение Oct 25 2016, 05:03
Сообщение #3


Участник
*

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



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



Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 25 2016, 05:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

0 - 0x10001600 - 0x800028d - 0x800cbb9 - 0x8009d21 - 0x800cbb5 - 0x8001015 - 0x8012085 = 0xbffc824a
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 25 2016, 05:24
Сообщение #5


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



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

Ага, значит, Кейл ограничился при расчете адресами с первого указанного по последний указанный.
Я вычисляю CRC своей программой.
Go to the top of the page
 
+Quote Post
uriy
сообщение Oct 25 2016, 05:25
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 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 эта контрольная сумма считалась только для векторов прерываний а не для всего файла. Хотя может я что-то путаю.
Go to the top of the page
 
+Quote Post
pvo125
сообщение Oct 25 2016, 06:37
Сообщение #7


Участник
*

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



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

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

Go to the top of the page
 
+Quote Post
nvn
сообщение Oct 25 2016, 06:53
Сообщение #8


Участник
*

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



написать свою программу на ПК, чтоб она считала нужную вам сумму и вписывала в нужно вам место, и запускать её после fromelf'a.
я обычно так и делаю, вызываю в User Run#1 командный файл make_bin.cmd, а в нем все что мне нужно и подсчет crc и создание хидеров и шифрование и т.д.
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 25 2016, 07:25
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(nvn @ Oct 25 2016, 09:53) *
написать свою программу на ПК, чтоб она считала нужную вам сумму и вписывала в нужно вам место

Эта программа уже написана. Называется srec_cat. См. тут.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Oct 25 2016, 09:21
Сообщение #10


Начинающий профессионал
*****

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



Цитата(scifi @ Oct 25 2016, 11:25) *
Эта программа уже написана. Называется srec_cat. См. тут.

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


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
pvo125
сообщение Oct 25 2016, 15:16
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 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 как писал выше.
Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 25 2016, 15:51
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(pvo125 @ Oct 25 2016, 18:16) *
Подскажите пожалуйста как писать 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
Go to the top of the page
 
+Quote Post
pvo125
сообщение Oct 25 2016, 16:55
Сообщение #13


Участник
*

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



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

Go to the top of the page
 
+Quote Post
scifi
сообщение Oct 25 2016, 19:16
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Хорошо, что всё хорошо.
Вообще-то srec_cat многое умеет. Документация не для слабонервных, конечно. Но, когда вникнешь, логика очевидна. Было бы полезно наваять текст для страждущих - сколько пользы было бы...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 25 2016, 20:06
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(scifi @ Oct 25 2016, 22:16) *
Вообще-то srec_cat многое умеет. Документация не для слабонервных, конечно. Но, когда вникнешь, логика очевидна. Было бы полезно наваять текст для страждущих - сколько пользы было бы...

А мне вот srecord как-то не приглянулся совсем. Проще на "C" набросать нужную утилиту по месту.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 17:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01485 секунд с 7
ELECTRONIX ©2004-2016