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

 
 
> Подсчет контрольной суммы программы
LeshaL
сообщение Nov 28 2006, 08:32
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 14-01-06
Пользователь №: 13 160



Как сделать, чтобы в среде IAR контрольная сумма считалась не до конца флеш или сегмента CODE, а только непосредственно до конца программы (до последнего байта программы)?
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
IgorKossak
сообщение Nov 28 2006, 11:55
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 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 при пересборке нужно сначала восстановить максимальное значение, а потом снова вписать реальное.
Go to the top of the page
 
+Quote Post
vesago
сообщение Jun 18 2008, 07:04
Сообщение #3


Тутэйшы
****

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



Каким образом можно решить проблему подсчета контрольной суммы прошивки, если код написан в кейле? Там такой фишки как в яре к сожалению нет. Каким сторонним инструментом можно воспользоваться, чтобы узнать CRC фирмвари?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 18 2008, 07:19
Сообщение #4


Гуру
******

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



ИМХО, если действительно нужно иметь CRC прошивки, то проще написать свой инструмент и запускать его из bat-файла в post-linker.

Ну, или записывать вручную только для релизов.
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Jun 18 2008, 08:38
Сообщение #5


Знающий
****

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



недавно приперло и написал утилиту для подсчета всевозможных CRC и КС для бинарных файлов.
Толком не тестировал в полном объеме. Если кому пригодится, выкладываю.
Ежели что, пишите о замеченных несоответствиях, лучше в аську.
За корявый английский в хелпе тоже прошу прощения.

Прикрепленный файл  checksum.rar ( 31.52 килобайт ) Кол-во скачиваний: 337


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
vesago
сообщение Jun 18 2008, 12:07
Сообщение #6


Тутэйшы
****

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



Спасибо, большое! Попробую воспользоваться.
Go to the top of the page
 
+Quote Post
AVR
сообщение Jun 18 2008, 12:18
Сообщение #7


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Andy Mozzhevilov @ Jun 18 2008, 12:38) *
недавно приперло и написал утилиту для подсчета всевозможных CRC и КС для бинарных файлов.Прикрепленный файл  checksum.rar ( 31.52 килобайт ) Кол-во скачиваний: 337
Планируется ли портирование под Linux? smile.gif ЗЫ Ну пожааалуйста... crying.gif


--------------------
Go to the top of the page
 
+Quote Post
Alex03
сообщение Jun 19 2008, 07:03
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



А для каких целей то нужна эта контрольная сумма?
А то тот же md5 вполне многие пользуют.
man md5sum
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Jun 19 2008, 10:12
Сообщение #9


Знающий
****

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



Цитата(AVR @ Jun 18 2008, 18:18) *
Планируется ли портирование под Linux? smile.gif ЗЫ Ну пожааалуйста... crying.gif

Да я под виндой то пишу только когда припрёт.
Мне уж проще спортировать на микроконтроллер какой biggrin.gif
Могу просто выложить исходник, портируйте сами.


Цитата(Alex03 @ Jun 19 2008, 13:03) *
А для каких целей то нужна эта контрольная сумма?
А то тот же md5 вполне многие пользуют.
man md5sum

Так это для MD5, а надо бывает всевозможные CRC и просто варианты арифметических сумм.
Ту же утилиту, что я привел, можно использовать, к примеру, для подсчета КС векторов прерывания для LPC-шных АРМов, можно из мейкфайла запустить последовательно дважды, в первый раз подсчитать и сохранить КС векторов, а второй раз - CRC всего файла, и сохранить в файле же в нужном адресе.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
vesago
сообщение Jun 20 2008, 10:43
Сообщение #10


Тутэйшы
****

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



Мне нужно для контроля сабжа при старте программы. Программу лью через бутлодер, поэтому нужно как-то убедиться в правильности.
Go to the top of the page
 
+Quote Post
Altemir
сообщение Jun 21 2008, 09:24
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 249
Регистрация: 2-05-06
Из: Россия, Поволжье
Пользователь №: 16 686



Не ново, конечно, но мой вариант был таков:
1. Имелась двухконтроллерная система на LPC. Был мастер и слэйв МК. Моя часть проекта - слэйв.
2. Для предоставления мастеру (и другому программисту) я генерил в IAR bin-файл с заполнением до конца прошивки 0xFF (контроллер всего 32К был)
3. В xcl-файле прописал адрес, в который IAR должен был помещать CRC16.
4. В итоге я мог из своего кода всегда прочитать по этому адресу CRC и мастер так же мог убедиться в том, что слэйв требует обновления ПО (плюс по соседним адресам располагалась версия ПО).

vesago
Для бутлоадеров использовал свою отдельную прогу, которая "подписывала" контрольной суммой полученную от IAR прошивку.

Сообщение отредактировал Altemir - Jun 21 2008, 09:30
Go to the top of the page
 
+Quote Post
AndreyKar
сообщение Nov 24 2011, 10:43
Сообщение #12


Участник
*

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



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

Сообщение отредактировал AndreyKar - Nov 24 2011, 10:44
Go to the top of the page
 
+Quote Post
Rius
сообщение Nov 25 2011, 06:37
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 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 бита. В результате отказался от этого модуля и применил программный расчёт с википедии.
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 25 2011, 06:52
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 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. Обычно программный калькулятор достатотчно быстрый и компактный.
Go to the top of the page
 
+Quote Post
365
сообщение Nov 25 2011, 14:28
Сообщение #15





Группа: Новичок
Сообщений: 5
Регистрация: 26-07-11
Пользователь №: 66 421



Цитата(scifi @ Nov 25 2011, 10:52) *
Но вообще с трудом представляю, где может понадобиться аппаратный калькулятор CRC. Обычно программный калькулятор достатотчно быстрый и компактный.

Ну, мы пользуем аппаратный CRC32: зарядил DMA по буферу, а ядро спать отправил - экономия батареек, однако laughing.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:33
Рейтинг@Mail.ru


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