ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
790035 Топик полностью
pav256 (27.10.2017 13:34, просмотров: 216) ответил LightElf на линкует линкер, CRC считает ielftool после того, как отработает линкер.
У Вас используются абсолютная адресация, но не в этом суть, сделал аналогично: 1. В исходниках: __root const uint16_t __checksum @ ".checksum"; extern const uint8_t __vector_table; void test_flash(unsigned char Start) { uint16_t Crc16; Crc16 = crc16(0x0000, (uint8_t *)&__vector_table, (unsigned long) ((uint8_t *)&__checksum - &__vector_table)); if (Crc16 != __checksum) ErrFlashProgram = 1; else ErrFlashProgram = 0; return; } 2. В stm32f4xx_flash.icf объявляю и размещаю блок: define block CHECKSUM { ro section .checksum }; place in ROM_region { ro, last block CHECKSUM }; 3. Вкладка "Build Actions/Output/Output filename": $PROJ_FNAME$.out отладочная информация включена 4. Вкладка "Build Actions/Post build command line" добавлено: ielftool.exe --fill 0xff;__vector_table-__checksum --checksum __checksum:2,crc16:i,0x0000;__vector_table-__checksum --verbose $TARGET_PATH$ $TARGET_PATH$ 5. Вкладка "Linker/Extra Options" выключено. Ситуация полностью аналогична предыдущей в памяти crc16 есть (в симуляторе CRC совпадают), а в hex файле crc16=0x0000 (место выделено!). Даже не понимаю куда нужно двигаться, может попробовать сгенерить hex повторно?
image