我有我的引导程序代码,我必须编写一个跳转到用户应用程序的函数,并且有两种方法可以实现,一种在汇编中,另一种在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开始。使用第一个和第二个的概念是什么?必须使用哪个,哪个更好?