ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
23 декабря
768150 Топик полностью
Связанные сообщения
C-Startup
Открыл для себя недавно появившийся сайт по изучению C++. Читаю, узнал много интересного (изменения стандарта с C++11). Ненапряж...2024-03-25
Стартап делает гораздо больше вещей. Вообще отчасти это задача операционной системы: как-то разместить в памяти аргументы програ...2020-09-11
Обработку прерывания от FSMC и таймаут на то что PLL (не)заведётся сделал? Я делал... Иногда срабатывало. Плохая пайка, плохой к...2020-09-10
Я для ARM7 писал на асме, и обработчик прерываний тоже. А он там, в отличии от жалких кортексов, достаточно замороченный.2016-05-03
Вначале пишешь (вообще по LR, дальше исключительно для одептов оссемблира):2012-01-26
fk0легенда (12.07.2017 00:22, просмотров: 841) ответил Ljutik1 на Расскажите, как правильно делать контроль целостности прошивки.
Из функции _start (в C-стартапе, до main) пересчитывается CRC32 прошивки, например, и сравнивается с значениями записанными по специальным адресам (которые при чтении всегда принимаются нулевыми, например). Или контрольная сумма (тут можно подобрать, чтоб с самими байтами контрольной суммы вышел ноль). Или сумма Флетчера, или Адлера. Если контрольный код не верный -- отказ от работы, мигание диодом, азбукой морзе, матерного слова. Код осуществляющий проверку должен быть как можно проще, чтоб не был затронут отказом флеши. Как добавить CRC в программу, да просто: const long flash_checksum = 0 в отдельном файлике. Потом делаешь elf файл, из него достаешь с помощью objcopy сегменты .rodata, .text (все, что во флеш), считаешь crc внешней программой (на входе hex или bin), потом линкуешь проект еще раз, но с другим содержимым отдельного файлика, где реальное значение crc вписано. Вместо файлика можно линкерскрипт специальный написать, но мороки больше, проще с файликом. Повторяю, при расчете в прошивке уже, 4 байта по адресу flash_checksum не считывать и принимать равными нулю.
[ZX]