pvo125 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Здравствуйте Все! Пытаюсь сделать следующее: хочу после компиляции и сборки чтобы кейл вычислял 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 редактор совпадает с онлайн суммой а вот кейлом нет. Разъясните кто знает! Хотел прикрепить бинарник пишет мне нельзя загружать такой тип файлов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Хотел прикрепить бинарник пишет мне нельзя загружать такой тип файлов. Прикрепите картинку, или просто тесктом напишите "правильное" и "неправильное" содержимое векторов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pvo125 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Файл test.bin открыт в редакторе hex. Видно что crc записана в нужное место но только эта crc (0xbffc824a) не совпадает если например в этом редакторе выделить весь бинарник целиком и отобразить контрольную сумму. Пробовал вместо CRC вписывать 0x00000000 типа как бы бинарник в котором по умолчанию по этому адресу нули. Все равно crc не та. Просто мне затем надо писать функцию на мк(stm32) которая бы считывала эту crc из файла и сравнивала его с crc самого бинарника. Но не могу понять как этот crc вычисляется в самой IDE (keil.) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Это не CRC, а контрольная сумма, и не всего бинарника, а только векторов. Специфичная для LPC вещь, описание можно найти в документации на процессор. 0 - 0x10001600 - 0x800028d - 0x800cbb9 - 0x8009d21 - 0x800cbb5 - 0x8001015 - 0x8012085 = 0xbffc824a Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Когда Кейл вычислил CRC, ее нельзя записывать в то место, которое потом будет участвовать в расчете CRC. Можно куда-нибудь дальше. Или не включать в расчет область векторов (где ее в данном случае хочется разместить). Ведь любой отличающийся бит влияет на результат. И еще, а полином расчета точно одинаковый для Кейл и Hex редактора? Ага, значит, Кейл ограничился при расчете адресами с первого указанного по последний указанный. Я вычисляю CRC своей программой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 5 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Хотел прикрепить бинарник пишет мне нельзя загружать такой тип файлов.Надо поменять расширение на txt, jpg, pdf... Я раньше не был знаком с ElfDwT.exe Тут прочитал http://www.keil.com/support/man/docs/uv4/uv4_ut_elfdwt.htm что он считает необходимую контрольную сумму для процов NXP. Помнится мне в NXP ARM7 эта контрольная сумма считалась только для векторов прерываний а не для всего файла. Хотя может я что-то путаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pvo125 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Это не CRC, а контрольная сумма, и не всего бинарника, а только векторов. Специфичная для LPC вещь, описание можно найти в документации на процессор. Да действительно пример был для NXP. Похоже что это вовсе не то чего я хотел(не правильно перевел да и слово checksum похоже вовсе не CRC). Отрицательный результат тоже результат. Думал автоматизировать процесс. А вообще так можно делать считать CRC бинарника и вручную вписывать это значение по адресам со смещением 0x1C. Я понял что эти 4 байта (адрес) для cortex-m зарезервированы? Так можно делать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nvn 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба написать свою программу на ПК, чтоб она считала нужную вам сумму и вписывала в нужно вам место, и запускать её после fromelf'a. я обычно так и делаю, вызываю в User Run#1 командный файл make_bin.cmd, а в нем все что мне нужно и подсчет crc и создание хидеров и шифрование и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба написать свою программу на ПК, чтоб она считала нужную вам сумму и вписывала в нужно вам место Эта программа уже написана. Называется srec_cat. См. тут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Эта программа уже написана. Называется srec_cat. См. тут. А вариант применения можно найти в этом makefile. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pvo125 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба 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 как писал выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Подскажите пожалуйста как писать 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pvo125 0 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Точно!!! :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 или в конце. Мнение мое поменялось. Буду пользоваться первыми двумя. Спасибо Всем! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Хорошо, что всё хорошо. Вообще-то srec_cat многое умеет. Документация не для слабонервных, конечно. Но, когда вникнешь, логика очевидна. Было бы полезно наваять текст для страждущих - сколько пользы было бы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 25 октября, 2016 Опубликовано 25 октября, 2016 · Жалоба Вообще-то srec_cat многое умеет. Документация не для слабонервных, конечно. Но, когда вникнешь, логика очевидна. Было бы полезно наваять текст для страждущих - сколько пользы было бы... А мне вот srecord как-то не приглянулся совсем. Проще на "C" набросать нужную утилиту по месту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться