Перечитал все что нашел, по этой теме - так и не дошло в чем проблема.
Итак. Написан загрузчик - все пишется, все обновляется, но не получается передать управление на основную программу. Ремаплю-передаю вот так:
Код
MEMMAP = 2; //Map vector table from RAM
// Copy vectors table
src = (unsigned long *)START_ADDR;
dst = (unsigned long *)0x00000000;
size = 0x40 / sizeof(*dst);
do { *dst++ = *src++; } while (--size);
//Reset controller
((void(*)(void))(0x00000000))();
Смотрю в симуляторе, все ремапится, но после перехода на 0 получаю вот это:
*** error 65: access violation at 0x00000000 : no 'execute/read' permission
Загрузчик линкуется вот так:
Код
; *************************************************************
; *** 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)
}
RW_IRAM1 0x40000040 0x0000FFC0 { ; RW data
.ANY (+RW +ZI)
}
}
Основной модуль вот так:
Код
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0x00006000 0x0001A000 { ; load region size_region
ER_IROM1 0x00006000 0x0001A000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x40000000 0x00010000 { ; RW data
.ANY (+RW +ZI)
}
}
В связи с этим вопросы:
1. Что не так делаю?
2. Как надо компилить-линковать основной модуль и загрузчик по расположению в памяти?