如何在引导程序中跳转到我的应用程序地址

时间:2018-06-27 09:07:52

标签: c assembly boot

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

0 个答案:

没有答案