У меня есть код загрузчика, и мне нужно написать функцию для перехода к пользовательскому приложению, и у меня есть два способа сделать это, один в сборке, а другой в C, как показано ниже:
void JumpToUserApplication( unsigned int userSP, unsigned int userStartup)
{
volatile unsigned int avoid_optimization;
avoid_optimization = userSP; //In order to avoid optimization issue when -Os
avoid_optimization = userStartup; //In order to avoid optimization issue when -Os
// set up stack pointer
__asm("msr msp, r0");
__asm("msr psp, r0");
// Jump to PC (r1)
__asm("mov pc, r1");
}
и
void jumpToApplication(void)
{
void (*fptr)(void);
fptr = (void (*)(void))0x00002000;
fptr();
//__asm__("JUMP #0x00000800H");
}
и мое пользовательское приложение запустится по адресу 20000. Каковы концепции использования первого и второго? Какой из них нужно использовать, а какой лучше? Заранее спасибо.