lib6303c 2023-05-19 17:55 采纳率: 0%
浏览 66
已结题

为什么从BootLoader跳转到APP后,在执行f_mount()函数时disk.drv[0] 的指针会跳转到BootLoad 的区域呢

为什么从BootLoader跳转到APP后,在执行f_mount()函数时disk.drv[0] 的指针会跳转到BootLoad 的区域呢?如下图
在BootLoader程序也执行了相同的操作,没出现上述问题。

img

这是正确的地址

img

这是执行到绿色高亮处后,地址发生了跳变。

  • 写回答

10条回答 默认 最新

  • lib6303c 2023-05-22 11:36
    关注

    @小胡同志和小张老师的故事 您好!谢谢您的解答。
    这是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.
        }
    }
    
    

    ```

    谢谢各位给出的建议,目前问题还未解决。由于项目紧急,选择了其他方案,日后解决我再分享解决办法。
    再次感谢各位!!!

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月29日
  • 赞助了问题酬金100元 5月22日
  • 创建了问题 5月19日

悬赏问题

  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上