为什么从BootLoader跳转到APP后,在执行f_mount()函数时disk.drv[0] 的指针会跳转到BootLoad 的区域呢?如下图
在BootLoader程序也执行了相同的操作,没出现上述问题。
这是正确的地址
这是执行到绿色高亮处后,地址发生了跳变。
为什么从BootLoader跳转到APP后,在执行f_mount()函数时disk.drv[0] 的指针会跳转到BootLoad 的区域呢?如下图
在BootLoader程序也执行了相同的操作,没出现上述问题。
这是正确的地址
这是执行到绿色高亮处后,地址发生了跳变。
@小胡同志和小张老师的故事 您好!谢谢您的解答。
这是BootLoader 跳转的程序,里面已经做了栈的切换。
```c
void up_load_app(struct _UPDATE *update) //0x08020000
{
if(((*(uint32_t*)update->appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{
jump2app=(iapfun)*(uint32_t*)(update->appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)
__set_PRIMASK(1);
//初始化用户程序的堆栈指针
__set_PSP(*(__IO uint32_t*) update->appxaddr); //重新设置进程PSP堆栈地址
__set_CONTROL(0); //设置为MSP
__set_MSP(*(__IO uint32_t*) update->appxaddr);
// MSR_MSP(*(uint32_t*)update->appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
INTX_DISABLE();
jump2app(); //跳转到APP.
}
}
```
谢谢各位给出的建议,目前问题还未解决。由于项目紧急,选择了其他方案,日后解决我再分享解决办法。
再次感谢各位!!!