今又一次遇到hardfault_handler。本来用的好好地程序在ina220里添加了一个电流传感器后突然出现这个问题。一开始打算按照网上的方法通过堆栈之类的东西来定位出错的代码,结果发现在进入中断时,我的LR寄存器内容与网络上显示的进入中断时情况不同,反而类似正常运行时的值。于是有抓到了大佬过来解惑。
一开始请教大佬问进入中断后定位错误代码的方法,大佬平常使用的就是网络上最通用的方法,直接通过Call Stack Window 弹出“Call Stack + Locals”对话框。然后在对话框中右键选择“Show Caller Code”就能跳转到错误代码。但是这次的情况并不适用,因为对话框Call Stack + Locals对话框内容为空,一般情况下会有函数的调用情况,所以分析说在主函数时就进入了中断。
于是在调试时直接在主函数里单步调试,最后发现是开始线程的时候出现了问题。(vTaskStartScheduler())这个函数表示开始运行FreeRTOS线程。所以说明是线程上的问题,再加上我现阶段唯一的更改是添加了一个电流传感器,所以去改大了这个线程的空间,问题解决。
记一次解决HardFault_Handler
最新推荐文章于 2024-08-01 09:56:54 发布