在做一个Can的收发程序,其中用到了指针来存储CAN帧数据,HardFault故障就是因为指针没有初始化产生的。供大家参考
1.问题
运行程序产生硬件故障,程序进入HardFault_Handler中断子程序,
HardFault_Handler()是一个无限循环程序。
2.分析排查
IAR平台采用单步stepinto调试,进入sCanTxCopy()函数进行指针赋值操作的时候
就产生了HardFault中断。经分析排查是由于sCanTxCopy(&g_stCan2TxData, s_pCanTxIn)
中的指针没有初始化造成的。
void sCanTxCopy(CanTxFrame *pSource,CanTxFrame *pDestination)
{
pDestination->ExtId =pSource->ExtId;
pDestination->Data[0] =pSource->Data[0];
pDestination->Data[1] =pSource->Data[1];
pDestination->Data[2] =pSource->Data[2];
pDestination->Data[3] =pSource->Data[3];
pDestination->Data[4] =pSource->Data[4];
pDestination->Data[5] =pSource->Data[5];
pDestination->Data