编写一个bootloader实现iap的功能,在不启动rtt的时候,裸机环境下,是能正常从bootloader跳转到app,但是当rt-thread启动起来后,在执行跳转到应用程序的代码就会出现hardfault的问题,跳转失败,我发现只要在 rt_system_scheduler_start之前调用跳转函数都是能够正常跳转到app部分的,但是当rt_system_scheduler_start启动起来之后,就不能进行正常的调转的,我将全局中断关闭了,问题依然存,只要操作系统启动起来,就不能正常执行跳转函数,我想询问一下,rtthread启动起来之后会对跳转到应用程序的那部分代码产生什么影响呢,每次要进行跳转的时候就会出现hardfault的问题?
[list=a][li]关/清所有中断(只关总中断不够)。[/li][/list]
[list=a][li]重设MSP(如果是cortex-M系列)。[/li][/list]
[list=a][li]重设中断向量地址(确保中断向量地址正确,以及是否有其它地方有错误的设置)。[/li][/list]
[list=a][li]如果有必要,确保CPU运行在特权模式。[/li][/list]
我现在就只是关总中断,并没有一个一个的去关清所有中断,请问这两者有什么区别呢,关
总中断,不就已经能达到中断服务不会被响应的这一要求了嘛?aozima、jeffwei能解释一下两者的区别吗?
我现在就在干这种傻事~~
很久不写代码了,现在又在做bootloader,由于要考虑用户是完全小白,没用RTT的通用bootloader。调试STM32F407,回头看看自己遇到过的问题,又有人遇到,贴个IAP跳转APP的代码吧。