今天闲来无事,想起之前关于HardFault的定位,一直没时间摸明白,所以今天趁有兴趣,搞了一下,结合ST官方的HardFault的诊断.pdf 发现里面的说明
还是有点不清楚,一般情况下,都是缓冲溢出问题,现记如下
1.设置断点如下

2.运行程序,当进入断点后,点开寄存器表

根据说明

按寄存器表单,应该是 = 0 ,SP = 0X2000240C(PSP)

LR = 0x8048f55-4 = 0x8048f51
在asm中,输入如下

按 go to
如下

三角的位置,就是出问题的函数,
测试代码如下
void App_ReadMeterProcessControl_Internal(void)
{
INT8U addPointNumber = 0 ;
INT8U *pData ;
*pData = 0x68 ;
if(*pData)
{
pData++ ;
}
}
跟预期的一样,这样就可以简单定位的出问题的地方.