Цитата(ar__systems @ Sep 30 2013, 21:17)

Этот метод не работает, точнее работает неправильно. При заходе в main() стэк оказывается сдвинут на 0x680 по сравнению с запуском приложения без бутлоадера. Ассемблерный вариант работает правильно.
Интересно почему это происходит? И что за магическое число 0x680
Я вижу у себя ту же картину. То есть, переход происходит совсем не туда куда я хочу (0x2000) Мой код:
Код
__asm void boot_jump( uint32_t address ){
LDR SP, [R0] ;Load new stack pointer address
LDR PC, [R0, #4];Load new program counter address
}
void execute_user_code(void)
{
uint8_t tmp;
NVIC->ICER[0] = 0xFFFFFFFF; //Disable all interrupts
NVIC->ICER[1] = 0x00000001;
NVIC->ICPR[0] = 0xFFFFFFFF; //Clear all pending interrupts
NVIC->ICPR[1] = 0x00000001;
for(tmp = 0; tmp < 32; tmp++) // Clear all interrupt priority
{
NVIC->IP[tmp] = 0x00;
}
LPC_SC->CCLKSEL = 0x01; // set sysclk (12MHz) as clock source
LPC_SC->PLL0CON = 0; // disable PLL
LPC_SC->PLL0FEED = 0xAA;
LPC_SC->PLL0FEED = 0x55;
SCB->VTOR = (0x2000) & 0x1FFFFF80;
boot_jump(0x2000);
}