Для заливки в ОЗУ надо использовать ини-файл, управляющий этим делом. Вот, например, использовавшийся мною (правда, для STM32F103, но суть от этого не меняется):
Код
FUNC void Setup (void) {
SP = _RDWORD(0x20000000); // Setup Stack Pointer
PC = _RDWORD(0x20000004); // Setup Program Counter
_WDWORD(0xE000ED08, 0x20000000); // Setup Vector Table Offset Register
}
LOAD %L INCREMENTAL // load the application
Setup(); // Setup for Running
Он является мелкой переделкой собственно кейловского из примеров, идущих со средой. Смысл таков: LOAD %L INCREMENTAL загружает axf-файл, собранный компоновщиком (при необходимости вместо %L можно подставить точное имя файла), а затем вызывается процедурка Setup, которая выставляет начальные значения SP и PC (читает их из начальной области ОЗУ, где располагается таблица векторов), а также устанавливает нужным образом регистр VTOR. Выполнение не начинается (можно поставить последней строчкой, после вызова Сетупа, g, но зачем это надо? пустить и в отладчике можно).
Чтобы использовать сей гениальный файл, надо:
1) правильным образом собрать axf-файл (я всегда использую sct-файлы, поскольку меня не устраивает стандартно-примитивная схема размещения секций в памяти, но можно обойтись и без этого, просто указав правильные базовые адреса на вкладке Target);
2) на вкладке Debug указать подготовленный ини-файл;
3) на той же вкладке сбросить галку Load Application at Startup, поскольку загрузку кода в память обеспечивает ини-файл;
4) после трансляции и сборки программы (F7) войти в режим отладки (Ctrl-F5).
Если всё сделано правильно, отладчик остановится на самой первой команде программы.