|
Подсчет контрольной суммы программы |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Nov 28 2006, 11:55
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
В простейшем случае приходит в голову следующий алгоритм. 1. В командном файле линкера установить сегмент CHECKSUM не в конце адресного пространства CODE, а в конце приложения (= вместо #). Код -Z(CODE)CHECKSUM=0-_..X_FLASH_END 2. Собрать приложение и в map файле посмотреть где заканчивается приложение. Скорректировать стороку в командном файле линкера Код -Z(CODE)CHECKSUM=0-1FEBF , т. е. вместо _..X_FLASH_END указать реальный адрес окончания приложения. PS при пересборке нужно сначала восстановить максимальное значение, а потом снова вписать реальное.
|
|
|
|
|
Jun 18 2008, 08:38
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
недавно приперло и написал утилиту для подсчета всевозможных CRC и КС для бинарных файлов. Толком не тестировал в полном объеме. Если кому пригодится, выкладываю. Ежели что, пишите о замеченных несоответствиях, лучше в аську. За корявый английский в хелпе тоже прошу прощения.
checksum.rar ( 31.52 килобайт )
Кол-во скачиваний: 337
--------------------
Пасу котов...
|
|
|
|
|
Jun 19 2008, 10:12
|

Знающий
   
Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206

|
Цитата(AVR @ Jun 18 2008, 18:18)  Планируется ли портирование под Linux?  ЗЫ Ну пожааалуйста...  Да я под виндой то пишу только когда припрёт. Мне уж проще спортировать на микроконтроллер какой Могу просто выложить исходник, портируйте сами. Цитата(Alex03 @ Jun 19 2008, 13:03)  А для каких целей то нужна эта контрольная сумма? А то тот же md5 вполне многие пользуют. man md5sum Так это для MD5, а надо бывает всевозможные CRC и просто варианты арифметических сумм. Ту же утилиту, что я привел, можно использовать, к примеру, для подсчета КС векторов прерывания для LPC-шных АРМов, можно из мейкфайла запустить последовательно дважды, в первый раз подсчитать и сохранить КС векторов, а второй раз - CRC всего файла, и сохранить в файле же в нужном адресе.
--------------------
Пасу котов...
|
|
|
|
|
Nov 24 2011, 10:43
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 17-01-07
Пользователь №: 24 508

|
Подниму тему). Пролиставая доку STM32 наткнулся на модуль CRC. Раньше, работая с 51контроллерами, всегда проверял контр.сумму флеша в начале программы. Т.к. ИД была Кейл, то приходилось пользоваться конвертерами ХЕКС<->БИН и колькулятором CRC, кот. вставлял её в конечный файл прошивки. Ну и вопрос, собственно,: Кто и как проверяет CRC программы? Как на практике применить модуль CRC, при проверке целостности кода? PS: желательно, относительно работы в Кейле.
Сообщение отредактировал AndreyKar - Nov 24 2011, 10:44
|
|
|
|
|
Nov 25 2011, 06:37
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 19-04-05
Пользователь №: 4 283

|
По причине отличия встроенного алгоритма от известного CRC-32, расчёт ведётся по одному слову, каждое из которых изменяется, как и результат. Потому же не получилось использовать готовую функцию CRC_CalcBlockCRC. описание проблемы и метод решенияКод uint32_t crc32_hardware(uint32_t *pData, uint32_t len) { uint32_t result; // включение модуля на время расчёта RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
// сброс на начальное значение CRC_ResetDR();
// расчёт for (int i = 0; i < len; i++) CRC_CalcCRC(__RBIT(*pData++)); result = __RBIT(CRC_GetCRC()) ^ 0xffffffff;
// отключение модуля RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, DISABLE);
return result; } Ещё и данные этой функции надо скармливать по 32 бита. В результате отказался от этого модуля и применил программный расчёт с википедии.
|
|
|
|
|
Nov 25 2011, 06:52
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(AndreyKar @ Nov 24 2011, 14:43)  Как на практике применить модуль CRC, при проверке целостности кода? PS: желательно, относительно работы в Кейле. Сам я этот аппаратный калькулятор CRC не ковырял, но заявленный полином совпадает с тем, который используется при генерации CRC-32 программой SRecord. Поэтому можно при помощи SRecord добавлять CRC к прошивке и попробовать разные варианты генерации CRC аппаратным калькулятором, пока значения не совпадут. Там можно менять начальное значение CRC, делать инверсию результата, и, возможно, в разном порядке скармливать данные (MSB или LSB first, хотя могу и ошибаться). Короче, придётся повозиться. Но вообще с трудом представляю, где может понадобиться аппаратный калькулятор CRC. Обычно программный калькулятор достатотчно быстрый и компактный.
|
|
|
|
|
Nov 25 2011, 14:28
|
Группа: Новичок
Сообщений: 5
Регистрация: 26-07-11
Пользователь №: 66 421

|
Цитата(scifi @ Nov 25 2011, 10:52)  Но вообще с трудом представляю, где может понадобиться аппаратный калькулятор CRC. Обычно программный калькулятор достатотчно быстрый и компактный. Ну, мы пользуем аппаратный CRC32: зарядил DMA по буферу, а ядро спать отправил - экономия батареек, однако
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|