
[英]How to jump to kernel from bootloader correctly (reboot infinite trouble)
[英]How to jump to my application address in bootloader
我有自己的引导加载程序代码,并且必须编写一个跳转到用户应用程序的函数,并且有两种方法可以实现,一种在汇编中,另一种在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开始。使用第一个和第二个的概念是什么? 必须使用哪个,哪个更好?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.