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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南波儿万

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值