Поиск
Показаны результаты для тегов 'cheksum'.
-
Хочу иметь в конце hex/bin файла значение контрольной суммы для всего, что находится до неё. Без использования фиксированных адресов, т.е. значение должно располагаться в конце автоматически. Есть статья примерно как это сделать для Keil: How to calculate CRC value in IAR and KEIL Настроил, работает, но не совсем так, как мне надо. Компоновщик располагает значение только в конце всего кода, а мне нужно, чтобы в конце кода и вообще всех других возможных секций. К примеру, инициализация данных в ОЗУ находится в hex/bin файле в более старших адресах. Вот пример из map-файла: 0x00003d00 0x00003d00 0x00000004 Data RO 521 CHECKSUM checksum.o Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x00003d04, Size: 0x00002900, Max: 0x00008000, ABSOLUTE, COMPRESSED[0x00000054]) Exec Addr Load Addr Size Type Attr Idx E Section Name Object 0x20000000 COMPRESSED 0x00000018 Data RW 9 .data main.o Как видно, CHEKSUM идёт последней секцией, но Load base следующей находится дальше (0x00003d04). Я знаю как такое можно сделать в скриптах компоновщика для IAR и GCC, но не пойму как сделать то же для SCT-файлов Keil'а. Вот пример скрипта компоновщика: ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x00000000 0x00020000 { ; load region size_region ER_IROM1 0x00000000 0x00020000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) checksum.o (CHECKSUM, +Last) } RW_IRAM1 0x20000000 0x00008000 { ; RW data .ANY (+RW +ZI) } RW_IRAM2 0x20100000 0x00004000 { *.o (EXECUTABLE_MEMORY_SECTION) .ANY (+RW +ZI) ; *(RAM2) } } Посоветуйте, можно ли как-то поправить sct файл для этого.