基于rt-thread的app在boot中跳转失败问题

背景:

在开发STM32u575的过程中,需要用到boot进行程序升级

app使用的是tr-thread进行编写,在boot中多次尝试跳转到app所在位置运行,均失败

 

表现是:基于tr-thread的app主程序,在修改程序下载地址及向量表后,编译下载到板子中,板子竟然可以正常运行,但是并不是基于boot进行跳转的,而是从0x8000000地址开始运行的

 

经过排查发现,boot+普通程序(未基于rt-thread的程序),是可以正常跳转的

boot+基于rt-thread的程序,就不可以正常跳转

问题就出在APP端

一般APP程序只需要修改以下两处即可:

19ea93436ad644cda89292b16496bd66.png41183f0c787244b5a48043ae23003809.png

 

但是基于rt-thread的程序只修改这两处是不行的

经过阅读rt-thread官方文档发现,还需要在template.uvprojx工程中修改以下地址即可

33c555a8d34647c4ba76fdfb65978bc9.png

通过以上修改,然后使用scons指令进行同步,编译下载APP工程发现,app程序已经不在0x8000000位置了,已经成功下到0x8010000

下载boot程序进行跳转,此时boot可以正常跳转到app程序所在位置

 

 

再提一嘴:

boot程序的实现

85b649cbf46145c18b734853135e94c0.png

此处需要先关闭无关中断,然后进行栈顶地地址内容检查

为什么要关中断:

  不关闭中断可能会导致Hardfault

为什么要检查地址内容合法:

  首先栈顶指针指向的是MSP的初始值,这个初始值是程序占用RAM的大小

7ed157293d404de6bf8cd9c1cafccb0f.png

就是说RAM地址不能超过20040000,所以需要确保

 if(((*( __IO uint32_t*)addr) & 0x2FFC0000) == 0x20000000)条件满足

 

 

 

 

 

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值