Artem 0 29 мая, 2011 Опубликовано 29 мая, 2011 · Жалоба Доброго времени суток. Необходимо разместить секцию во флеш после кода. А адрес этой секции поместить тоже во флеш по фиксированному адресу. Т.е. по фиксированному адресу будет лежать адрес конца прошивки. Делаю вот так: (IAR 6.10, STM32F103RET6) .icf файл: define symbol __ICFEDIT_size_vesionaddr__ = 0x04; define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; // Создаём регион по фиксированному адресу define region VERADDR_region = mem:[from __ICFEDIT_region_ROM_start__+0x400 _size __ICFEDIT_size_vesionaddr__]; define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; initialize by copy { readwrite }; do not initialize { section .noinit }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; place in ROM_region { readonly, section .versionsection}; place in VERADDR_region { section .versionaddr }; place in RAM_region { readwrite, block CSTACK, block HEAP }; в файле main.c // Глобальные переменные #pragma section = ".versionsection" const char version_full [] @ ".versionsection" = "VERSION 30.05.2011 05:38:40"; #pragma section = ".versionaddr" const char * version_addr @ ".versionaddr" = __section_begin(".versionsection"); IAR ругается вот такими словами: Error[Pe028]: expression must have a constant value на вот эту строку: const char * version_addr @ ".versionaddr" = __section_begin(".versionsection"); Вот не пойму, вроде компилятор должен положить адрес versionsection в секцию versionaddr. А линкер засунет её в созданный для неё регион... Почему такого не происходит? Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться