2022/09/06 16:57
若试图从一个不存在的物理地址取指或取数,就会发生 HardFault 中断。发生这种情况常常是指针没赋值、或由计算结果赋了一个超出地址范围的值,一执行就跳到 HardFault去了。所以重点检测指针取数、或函数指针的调用。比如:
⚫ 数组越界操作;
⚫ 内存、堆栈溢出;
⚫ 使能并产生中断,而没写对应的中断处理函数;
⚫ 程序切换,而没有做中断向量表重映射,一产生中断就会进hardfault;
⚫ M0非对齐访问
可以设几个断点先查出跑去HardFault中的大体位置,再单步执行,看哪一句产生了HardFault中断,就知道位置了。
另外一个方法是在HardFaut里,栈指针加6,就是发生HardFault中断的地址。具体操作可参考https://mp.weixin.qq.com/s/yRIgUamkl7gTSEeP9bGBUA