最近调试的时候发现板子在某时刻总是进入HardFault_Handler中,记录一下排查方法:
板子MCU是GD32F450,使用freertos实时系统。
进入HardFault_Handler后,查询LR寄存器,发现LR寄存器的值为0xFFFFFFF1,如下表所示,表明有中断被另一中断打断,出现了中断嵌套,将此任务关闭后,debug模式下不再进入HardFault_Handler。
debug调试发现,其中某一任务数据处理的一段程序在运行后总是无法实现功能,经过分析发现该段程序未执行。进一步排查发现,此功能的代码对内存进行操作的memcpy并未存在数据溢出的问题,因此怀疑是任务在初始化分配栈空间时,分配的栈空间过小,任务栈溢出后,数据被修改,中断被打断,导致系统进入HardFault_Handler。
查询发现确实是栈空间不足,增大栈空间问题解决。另外HardFault_Handler中是死循环,应当在这里增加重启指令,防止程序死在里面。
stm32的HardFault_Handler
最新推荐文章于 2024-04-23 17:03:37 发布