今天调试代码时出现了HardFault错误并跳转到了HardFault_Handle
在调试模式下,打开Registers窗口,Windows->Show View->Registers
我看网上说,如果LR = 0xFFFFFFE9,继续查看MSP(主堆栈指针)的值,如果LR = 0xFFFFFFFD,继续查看PSP(进程栈指针)的值。但是我发现我的PSP的值很明显违法了,我就继续查看了MSP的值,然后通过Windows->Show View->Memory,查看MSP的值,可是把地址值使用Hex Integer方式来显示,如果是不是Hex Integer,可以先X掉,然后就会出现选择数据显示的方式了
从我们的这个地址向后数第六个就是出现跑飞的地方的程序的执行地址,把地址复制下来,然后打开汇编窗口,Windows->Show View->Disassembly,填入地址,需要加上0x开头。定位到出错的地方
我出错的地方为prvPortStartFirstTask();这个函数,选中右键,Move To Line
然后根据实际情况解决,通常如果是在prvPortStartFirstTask()处跑飞,基本是因为任务栈设置小了,我的项目因为是跑在103RCT6上的,项目内容较多,所以都抠的比较小
找到原因后,加大任务栈,解决。