用CMSIS-RTOS做Bootloarder的一些问题及解决方案

在使用CMSIS-RTOS开发Bootloader时遇到了跳转到APP失败的问题。通过尝试不同跳转函数,最终发现SVC中断未关闭是关键。解决方法包括:将任务改为特权模式,关闭所有中断,特别是SVC中断,并避免启动文件中堆栈地址错误导致的全局变量篡改。确保Bootloader跳转前无中断发生,可保证跳转成功。
摘要由CSDN通过智能技术生成

使用CMSIS-RTOS有段时间了,产品功能已经基本完成,现在做升级功能,需要做Boot,但在做的过程中遇到了一些问题,耽搁了两天才搞定,因此有必要记录一下。

首先第一个问题是跳转函数的写法。

在程序怎么都无法跳转到APP执行的情况下,我重新建立了两个裸跑的工程,BOOT直接执行跳转,APP只执行灯闪烁,结果还是无法跳转。这里我参考一篇帖子做的跳转程序,跳转函数写法如下:

void (*apifun)(void);

apifun = (void (*)(void))(APPSTART + 4);

然后我尝试用正点原子的IAP代码例程里的跳转函数,结果跳转成功,跳转函数写法如下:

typedef void (*appl_func)(void); //定义一个函数类型的参数.
appl_func run_appl;
...
run_appl = (appl_func)*(vu32*)(APPSTART + 4);

解决跳转问题后,修改CMSIS-RTOS的跳转函数后再次测试,发现跳转后会进入HardFault。

尝试过网上说的关所有中断、删除任务(我一个任务都没新建)、重新设置中断向量表等等操作依然无果。

然后我找到一篇文章,写的是如果和RTX做Bootloader,文章链接如下:

ARM: How to Stop CMSIS R

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值