今天闲来无事,想起之前关于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++ ;
}
}
跟预期的一样,这样就可以简单定位的出问题的地方.