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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Подсчет контрольной суммы программы
LeshaL
сообщение Nov 28 2006, 08:32
Сообщение #1


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

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



Как сделать, чтобы в среде IAR контрольная сумма считалась не до конца флеш или сегмента CODE, а только непосредственно до конца программы (до последнего байта программы)?
Go to the top of the page
 
+Quote Post
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
Danis
сообщение Nov 25 2011, 15:04
Сообщение #16


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



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


Как то задавал вопросы по этой теме, потом сам все сделал сам. Аппаратный расчет CRC32 у контроллера куда быстрее программного (даже табличного), в теме тыс
Сообщение #9 выложены исходники как применить. Пользуюсь по сей день.


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
kan35
сообщение Nov 26 2011, 07:19
Сообщение #17


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



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

В CortexM3 нет аппаратной проверки CRC кода, в отличие от ARM7, или я не прав?
Go to the top of the page
 
+Quote Post
scifi
сообщение Nov 26 2011, 11:52
Сообщение #18


Гуру
******

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



Цитата(kan35 @ Nov 26 2011, 11:19) *
В CortexM3 нет аппаратной проверки CRC кода, в отличие от ARM7, или я не прав?

Этой штуки нет ни в Cortex-M3, ни в ARM7. Зато она присутствует в STM32.
Go to the top of the page
 
+Quote Post
yagorik
сообщение Dec 26 2011, 18:13
Сообщение #19





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



Цитата(Andy Mozzhevilov @ Jun 19 2008, 14:12) *
Да я под виндой то пишу только когда припрёт.
Мне уж проще спортировать на микроконтроллер какой biggrin.gif
Могу просто выложить исходник, портируйте сами.


Очень нужен порт под линукс, если возможно поделитесь исходником
Go to the top of the page
 
+Quote Post
yagorik
сообщение Dec 26 2011, 22:08
Сообщение #20





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



Цитата(yagorik @ Dec 26 2011, 22:13) *
Очень нужен порт под линукс, если возможно поделитесь исходником

и ещё вопрос: она работает с форматом Intel?
Go to the top of the page
 
+Quote Post
AndreyKar
сообщение Dec 27 2011, 06:27
Сообщение #21


Участник
*

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



Если в проекте включить Use MicroLIB, то весь подсчет коту под хвост.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 01:29
Рейтинг@Mail.ru


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