调试STM32+ucosII的程序,程序老是进入HardFault_Handler。定位问题方法如下:
进入调试界面,在HardFault_Handler中断处理的while(1)处打断点,等待程序出错。
然后打开register窗口
注意红框中的数值,将MSP中的数值在Memory窗口中搜索。在栈中找到程序在进入HardFault_Handler中断处理函数前的入栈地址。
红框内就是出错程序出的地址,由于程序在进入中断处理函数前要依次将R0、R1、R2、R3、R12和SP寄存器中的值入栈,所以找到栈的地址后依次数到SP处复制里面的值 到计算器中转化为16进制。
将计算其中的16进制数复制,然后打开Disassembly窗口,鼠标右键–》
点击Go To按键就定位到出错代码的位置了
OSStartHighRdy();导致既然HardFault_Handler错误,我的问题是因为我有两个任务的堆栈定义的太小导致栈溢出。修改堆栈大小就解决了。这个问题的解决我参考了https://blog.csdn.net/NicholasWuT/article/details/80336850
STM32 进入HardFault_Handler调试定位问题方法 + 定位到ucos的 OSStartHighRdy()的处理方法
最新推荐文章于 2024-09-17 23:26:56 发布