2.理解__set_MSP语句 上面讲述的内容是想引申出来:鼠标放在__set_MSP的位置,按F1,就可以直接进入帮助文档。 下面是详细内容截图: 大概意思是:调用MSR指令设置主状态指针(MSP)的值。 物理上存在两个不同的堆栈指针(SP): 1.主堆栈指针(MSP),复位后的默认堆栈指针。在运行异常处理程序时也使用它。 2.进程堆栈...
jump2app=(iapfun)*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址 MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针 jump2app(); //跳转到APP } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. APP APP程序为最终执行的用户程序。 程序存储地址 IROM1 Start: 代码起始地...
3.1 堆栈指针寄存器(MSP和PSP) R13是堆栈指针寄存器,且Cortex-M3 内核中共有两个堆栈指针,分别是主堆栈指针(MSP)和进程堆栈指针(PSP)。主堆栈指针(MSP)是缺省的堆栈指针,它由 OS 内核、异常服务例程以及所有需要特权访问的应用程序代码来使用。进程堆栈指针(PSP),用于常规的应用程序代码(不处于异常服用例程中时)。...
地址//addr:栈顶地址__asm voidMSR_MSP(u32 addr) {MSRMSP, r0 //set Main Stack value BX r14} csz99812019-04-11 15:18:45 MDK530编译出现ARM版本不符 将ARM6修改为ARM5:与此同时,在sys.c里面__asm voidMSR_MSP(u32 addr)这个函数的报错也会迎刃而解。... ...
void sys_msr_msp(uint32_t addr){ __set_MSP(addr); /* 设置栈顶地址 */ } /** *@bri...
¨ò?ò???oˉêyààDíμ?2?êy.iapfun jump2app;__asmvoidMSR_MSP(u32 addr){MSRMSP,r0//set Main Stack valueBXr14}/*** * Function name £o iap_load_app * Function describe £o ì?×aμ?app3ìDò?£ * Input £o appxaddr£o...
跟踪__MSR_MSP(一般这个函数都在库文件里有,跟踪不到就用搜索找)找到汇编函数为 __MSR_MSP MSR MSP, r0 ; set Main Stack value BX r14 ②//跳转到应用程序段 //appxaddr:用户代码起始地址. void iap_load_app(u32 appxaddr) { if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)//检查栈顶地址...
* MSR_MSP 是一个函数,原型如下: * __asm void MSR_MSP(u32 addr) //__asm的作用是将告诉编译器,函数体内部的代码是汇编指令 * { * // 由 ATPCS 规则,汇编跟C语言传参使用的是R0-R3寄存器(参数小于等于4个的情况下),所以r0的值就是addr ...
3.1 堆栈指针寄存器(MSP和PSP)R13是堆栈指针寄存器,且Cortex-M3 内核中共有两个堆栈指针,分别是主...
18 MSR_MSP( * ( __IO uint32_t * ) App_Addr ); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址) 19 JumpToApp(); //跳转到APP. 20 } 21} 在需要跳转的地方执行这个函数就可以了IAP_ExecuteApp(Application_1_Addr); 其他的代码请参考BootLoader源代码 ...