https://wiki.segger.com/Cortex-M_Fault#Illegal_Function_Execution
下面记录下本人遇到的hardfault以及最后发现的原因:
一.BusFault-IBUSERR
总线分I-BUS和D-BUS,此类错误基本上与指针有关,要么是栈被破坏,要么就是指针指向的对象没有被分配空间,要么就是指针的非对齐访问。
我遇到的情况是指针指向的对象,没有分配空间,以为是对象下面的函数有问题,但最终发现是没有对象。这种错误不能保证不犯,最应该做的是加入对象为NULL的校验,从而快速定位问题。
dm9162_Object_t *DM9162 = 0;
if(DM9162 == 0) DM9162 = pvPortMalloc(sizeof(dm9162_Object_t));//一开始缺少这句
DM9162_Init(DM9162);