Такое сообщение будет выведено утилитой ielftool на стадии линковки проекта IAR, если в проекте настроен подсчет контрольной суммы прошивки, но при этом либо не настроен файл опций линкера *.icf, либо не определена (или неправильно определена) переменная __checksum.
Пример такого сообщения:
Linking
ielftool error: The string '__checksum' was not found in the string table
Error while running ielftool "--fill" "0xFF;0x8008000-0x80ffffb" "--checksum"
"__checksum:4,crc32:Li,0xffffffff;0x8008000-0x80ffffb" "--verbose"
"D:\asm\SD-card-boot\EWARM\L496\Exe\
stm32-bootloader.out.tmp" "D:\asm\SD-card-boot\EWARM\L496\Exe\stm32-bootloader.out"
Error while running Linker
Total number of errors: 2
Total number of warnings: 0
Простой способ устранения ошибки:
1. Создайте декларацию внешней переменной __checksum:
extern uint32_t __checksum;
2. Сделайте произвольное обращение этой переменной, чтобы линкер не удалил выделение памяти под эту переменную. Например вот так:
if (__checksum) HAL_Delay(1);
Альтернативный способ - используйте отличное руководство по применению контрольной суммы в проекте IAR, которое можно найти по ссылке [1].
[Ссылки]
1. CRC прошивки средствами IAR и STM32 site:tqfp.org. 2. Checksum calculation with IAR ILINK Linker and IELFTOOL site:iar.com. 3. Calculating CRC32 with IAR ELF Tool the same way as STM32 hardware site:iar.com. 4. IELFTOOL Checksum - The basic actions site:iar.com. 5. Демистификация CRC32. 6. Программная реализация CRC-алгоритма STM32. |