【解决】Bootloader使用RTX无法跳转应用
本帖最后由 soga238 于 2019-6-9 22:24 编辑为了方便我在bootloader中使用了rtx系统,但是发现传输完app文件后,无论如何也无法进入app(已经关闭了用到的外设,清了中断)。无奈用裸机实现,一次性通过。RTX内部会修改什么,或者控制中断吗。
关闭滴答定时器systick解决,不知道为啥裸机时没出问题。
update: 跳转之前关闭全局中断,手动关闭PendSV,SVC和Systick中断以及其它开启的中断没有效果。跳转前关闭全局中断,在进入调试APP代码的一开始,会触发 osRtxErrorClibMutex(标准C/C++库互斥初始化失败)异常。原因是关闭全局中断,rtx无法申请互斥锁。在执行RTX代码前,我已经开启了全局中断,不知道为什么仍然触发异常。底层编译有调用?
解决办法1、boot跳转app前,不关闭全局中断 2、在app代码调用SystemInit()前开启全局中断
跳转前关闭全局中断,并且手动关闭PendSV,SVC和Systick中断以及其它你开启的中断,最后就是设置CONTROL寄存器为0 :loveliness::loveliness::loveliness::loveliness: 你的APP用了操作系统吧?理论上在操作系统启动前,不能开滴答定时器的。你看看是不是这个原因 我也遇到楼主同样的问题,rtx5会在进入main函数前创建5个互斥量Mutex(不知道做什么用的?),创建失败就触发osRtxErrorClibMutex错误进入死循环。最后用楼主的解决办法1解决了。谢谢 younew 发表于 2019-8-16 21:53
我也遇到楼主同样的问题,rtx5会在进入main函数前创建5个互斥量Mutex(不知道做什么用的?),创建失败就触 ...
那时因为你未使用微库,使用C标准库的互斥是基于RTX5的互斥信号量实现的。
原来是这样啊。谢谢!
我使用了RTX的文件系统,编译出错,提示不能用微库了 多谢分析~学习了~ eric2013 发表于 2019-5-27 17:30
跳转前关闭全局中断,并且手动关闭PendSV,SVC和Systick中断以及其它你开启的中断,最后就是设置CONTROL寄 ...
你好 如何手动关闭pencvsvc?没找到 zz1179842922 发表于 2020-2-26 13:45
你好 如何手动关闭pencvsvc?没找到
不用管。pendsv和svc每次使用是每次手动使能。 eric2013 发表于 2020-2-26 14:17
不用管。pendsv和svc每次使用是每次手动使能。
好的 谢谢 我用的NXP的LPC4078芯片,按照以上方法没解决。 zenghouyun 发表于 2020-11-30 15:46
我用的NXP的LPC4078芯片,按照以上方法没解决。
分享个基于STM32H7的BOOT和APP代码都使用RTX5的案例,相互之间任意跳转
http://www.armbbs.cn/forum.php?mod=viewthread&tid=97247&fromuid=58
(出处: 硬汉嵌入式论坛)
页:
[1]