16+
Пятница
24 ноября
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

ARM-контроллеры

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
pav256  (26.10.2017 17:42, файл(ы), просмотров: 1045)
Не пишется CRC16 в hex файл. 
Задача периодически проверять программу на целостность. Дано: Iar 8.11, проц. stm32F407. Подсчет CRC16 реализован посредством размещения меток, в соответствии с IAR "Technical Note 62709" следующим образом: 1. Определены секции меток, добавлена запись в "stm32f4xx_flash.icf"
define block ROM_CONTENT with fixed order
{
    readonly section checksum_start_mark,
    readonly,
    readonly section checksum_end_mark,
    readonly section checksum
};
place in ROM_region { block ROM_CONTENT };
2.Заполнение пустых мест и определение меток - вкладка "Build Actions/Post build command line" добавлено:
ielftool --fill 0xFF;
checksum_start-checksum_end+3 --checksum ielftool_checksum:2,crc16,0x0;checksum_start-checksum_end+3 --verbose "$TARGET_PATH$"
"$TARGET_PATH$"
3.Подсчет CRC16 и занесение в память - вкладка "Linker/Extra Options" добавлено:
--place_holder ielftool_checksum,2,checksum,4
--keep=ielftool_checksum
4.В основной программе доступ к меткам осуществляется следующим образом:
extern const uint16_t ielftool_checksum;
__root const uint8_t  checksum_start    @ "checksum_start_mark" = 0;
__root const uint8_t  checksum_end[4]   @ "checksum_end_mark" = {0,0,0,0xEE}; // The last byte is the actual "checksum area end
mark"

void test_flash(unsigned char Start)	{
 uint16_t	Crc16;
	Crc16 = crc16(0x0000, (uint8_t *)&checksum_start, (unsigned long) (&checksum_end[3] - &checksum_start + 1));
    if (Crc16 != ielftool_checksum)	ErrFlashProgram = 1;
	else				ErrFlashProgram = 0;
 return;
}
Самое интересное, что CRC16 считается и сравнивается с исходной правильно, проверял в симуляторе (см. скриншот). Проблема в том, что в hex файле её НЕТ (см. скриншот)! В памяти сумма располагается ( --keep=ielftool_checksum ). Создается впечатление, что hex файл создается до подсчета CRC16, да и место под неё выделено, а затем вычисляется CRC16. Кто знает в чем проблема или куда двигаться прошу поделиться информацией.
Прикреплённые файлы:
crc16_hex.jpg:440 K

 [x][x][x][x][x][x] [x][x][x][x][x][x][x][x]

Тема выделяется по переводу строки или автоматом

 

Имя


Регистрация позволит вам редактировать и перемещать ваши сообщения и прикреплять к ним файлы.
 
Символы: á é ó ú ý « »
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7526 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVII