soga238 发表于 2019-5-27 15:46:47

【解决】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()前开启全局中断

eric2013 发表于 2019-5-27 17:30:03

跳转前关闭全局中断,并且手动关闭PendSV,SVC和Systick中断以及其它你开启的中断,最后就是设置CONTROL寄存器为0

morning_enr6U 发表于 2019-5-27 21:01:40

:loveliness::loveliness::loveliness::loveliness:

sanit 发表于 2019-5-27 22:29:08

你的APP用了操作系统吧?理论上在操作系统启动前,不能开滴答定时器的。你看看是不是这个原因

younew 发表于 2019-8-16 21:53:29

我也遇到楼主同样的问题,rtx5会在进入main函数前创建5个互斥量Mutex(不知道做什么用的?),创建失败就触发osRtxErrorClibMutex错误进入死循环。最后用楼主的解决办法1解决了。谢谢

eric2013 发表于 2019-8-16 23:32:00

younew 发表于 2019-8-16 21:53
我也遇到楼主同样的问题,rtx5会在进入main函数前创建5个互斥量Mutex(不知道做什么用的?),创建失败就触 ...

那时因为你未使用微库,使用C标准库的互斥是基于RTX5的互斥信号量实现的。

eric2013 发表于 2019-8-17 00:19:46


younew 发表于 2019-8-19 13:57:29

原来是这样啊。谢谢!
我使用了RTX的文件系统,编译出错,提示不能用微库了

片羽之神 发表于 2019-11-25 23:42:46

多谢分析~学习了~

zz1179842922 发表于 2020-2-26 13:45:04

eric2013 发表于 2019-5-27 17:30
跳转前关闭全局中断,并且手动关闭PendSV,SVC和Systick中断以及其它你开启的中断,最后就是设置CONTROL寄 ...

你好 如何手动关闭pencvsvc?没找到

eric2013 发表于 2020-2-26 14:17:21

zz1179842922 发表于 2020-2-26 13:45
你好 如何手动关闭pencvsvc?没找到

不用管。pendsv和svc每次使用是每次手动使能。

zz1179842922 发表于 2020-2-26 15:18:32

eric2013 发表于 2020-2-26 14:17
不用管。pendsv和svc每次使用是每次手动使能。

好的                      谢谢

zenghouyun 发表于 2020-11-30 15:46:20

我用的NXP的LPC4078芯片,按照以上方法没解决。

eric2013 发表于 2020-11-30 16:28:33

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]
查看完整版本: 【解决】Bootloader使用RTX无法跳转应用