Цитата(Сергей Борщ @ Aug 28 2013, 12:18)

В целом - да. Фактически в нулевом секторе вам надо расположить два первых элемента таблицы (указатель стека и адрес вектора сброса). А в основной программе все равно надо будет иметь полную таблицу векторов и в процессе запуска программы записать ее адрес в регистр VTOR. Но ради чего все это городить? Почему не выделить под EEPROM последние сектора? Тогда вам достаточно будет в скрипте линкера уменьшить доступный программе объем флеша.
Два последних сектора по 128к. А это половина памяти МК. Не выгодно. Первые четыре сектора по 16к.
Цитата(toweroff @ Aug 28 2013, 12:26)

вариантов месколько. Можно линковщику сказать, что флеш располагается тут и тут, а еепром-сектора обойти
также при эмуляции eeprom можно на получившийся адрес накладывать маску, которая позволит не "выпрыгнуть" за диапазон отведенных секторов
и loadregion разбивать не придется. Честно говоря, даже и не пробовал никогда собирать с "дырками"
хотя... эту область также можно в loadregion включить и получится без разрывов, только код в ней не размещать
Я сейчас линковщику указал что доступная память начиная с 0x0800C000 это Sector 3.
Код
define symbol __ICFEDIT_region_ROM_start__ = 0x0800C000
Вектора по умолчанию в начало флеша. В настройках эмулятора EEPROM
Код
#define EEPROM_START_ADDRESS ((uint32_t)0x08004000)
это Sector 1.
В памяти основной код лёг с 0x0800C000. Основная таблица прерываний легла с 0x08000000.
По адресу 4 указатель на вектор прерывания, который расположен выше 0x0800C000. А там дальше SystemInit и стар основной программы.
Пока всё завелось и работает. Тестирую….
Но как-то не выгодно с этими секторами – получается, что первый сектор в 16к «гуляет почти свободным». Там сейчас всего не более 512 байт записано. Не рационально))))
Как указать линковщику, что бы он ничего не располагал с адреса 0x08004000 по 0x0800BFFF ? Тогда память будет выгоднее использоваться.