Цитата(aaarrr @ Feb 25 2013, 20:55)

Выходит, все. Только я бы выделил вектора в отдельную секцию и размещал бы её на нулевом адресе штатными средствами (т.е. линкером). Подобные копирования только путаницу вносят.
Embedded Flash по умолчанию маппируется из 0x20000000 на 0x00000000
Программа у меня собирается по физическому адресу. Фактически, хоть программа и "бегает" по реальным адресам, вектора лежат в маппированной области
Сейчас нужно разобраться, как вернуть отображение TCM памяти на свое реальное место и не очень понятно, как заставить линкер "положить" вектора в область нулевую
Точнее, КАК - это да, указать регион, но вот в каком месте это сделает ОН? скорее всего, в __main? Потому что копировать в отображаемую Flash не получится без отката ремапа
Да, вот еще вопрос какой. Как в кейле, в ASM файле указать регион, прописанный в скаттере?
Как-то так?
Код
AREA MyVectors, DATA, NOINIT, ALIGN=4
и в скаттере:
Код
LR_IROM1 0x20000000 0x00080000 { ; load region size_region
ER_IROM1 0x20000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x80000000 0x0000E000 { ; RW data
*.o (RAMFUNC)
.ANY (+RW +ZI)
}
RW_IRAM2 0x00000000 0x00008000 {; 16 KB TCM memory
*.o (MyVectors)
}
}