UCOSII 调试掉进HardFault_Handler,解决与定位方法
故障可能会有以下几种:
1、ucos分配的堆栈太小了,优先级次序
2、数组溢出
3、非法的指针 ,比如空指针 ,编译对的
4、OS_ENTER_CRITICAL()没有配套使用
5.在UCOSII系统中必须中断中配套使用OSINTENTER(),与OSINTExit();
定位办法为:
1、首先在HardFault_Handler的while(1)处打上断点。
2、等待代码运行到此,这时查看寄存器LR,在左边一个是工程,一个是寄存器。
下面面的LR是我正常时copy的,一般在进入hardfault时,会变成下图的值,这时就可以知道该看那个寄存器的值,当时我那里是0xFFFFFFFD,所以是看PSP的地址。
3、找到该看的地址后然后如下图打开内存,输入上面找到的寄存器的地址,在右键选择以long型查看地址,如下图。
然后查看这个地址,向下面数6个lo