加上boot程序,FreeRTOS就跑不起来了

文章讨论了bootloader在跳转到APP时,因中断异常导致硬件错误和APP死机的问题。解决方法是关闭APP使用的中断,如SysTick和滴答定时器,并强调了深入理解APP内部机制的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题描述

        bootloader跳转到APP时,app执行完初始化程序后死机

二、分析问题

        第一步,执行app时死机死到哪里?通过DEBUG调试发现死到hardfault_handler()函数中,硬件错误,导致硬件错误的原因一般都是中断异常引起的。

        第二步,找到问题,然后分析什么原因导致硬件错误?一般bootloader跳转到APP时要关闭app中用到的中断,那么查看系统中用到的中断:串口中断、滴答定时器中断,所以,跳转之前要关闭这两个中断:_disable_irq()和systick。

三、解决问题

1.办法1

        关闭中断之后,跳转执行app正常。

void iap_load_app(u32 appxaddr)//

    SysTick->CTRL = 0X00;//禁止SysTick
    SysTick->LOAD = 0;
    SysTick->VAL = 0;
    __disable_irq();
    jump2app=(iapfun)*(vu32*)(appxaddr+4);        //用户代码区第二个字为程序开始地址(复位地址)        
    MSR_MSP(*(vu32*)appxaddr);                    //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
    jump2app();                                    //跳转到APP.
}

2.办法2

如下图,要打勾,不然就无法运行


四,结论

       1.bootloader跳转到app之前要关闭app中用到的中断,不然就会出现硬件错误导致死机;

       2.对app的内部机制要比较了解,比如:用到哪些中断、外设,这样遇到问题才能更好分析,不要停留在会用层面,一定要了解透彻,这样无论遇到什么问题,都能有一个正确的分析思路。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值