STM32 进入HardFault_Handler调试定位问题方法 + 定位到ucos的 OSStartHighRdy()的处理方法

调试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

发布了23 篇原创文章 · 获赞 27 · 访问量 1150

猜你喜欢

转载自blog.csdn.net/BLUCEJIE/article/details/103984423