stm32+ucosii|stm32+ucosii hardhandle调试经历
企图在ucosii中加入了一个新任务 uctaskview来监视各任务堆栈出现的问题,却发现程序陷入了HardFault_Handler.
断点跟踪,发现如果单步执行就没问题,一旦用(F5)运行来调试就跳入这个异常了。
百思不得其解,开始调试:
首先打开寄存器窗口查找SP地址:0x2000e5d0
文章图片
然后打开内存窗口,查找0x2000e5d0,查看堆栈:
文章图片
根据arm入栈顺序找到LR地址:0x08007229 注意小端模式
根据LR地址找到出错的函数:
文章图片
原来此函数是在中断服务中调用,所以就解释了上述为什么单步执行没问题,用F5运行时就会跳出异常了。
下面继续查找出错原因:
跟踪发现在此中断服务中调用了一个未初始化的fifo。如果操作这个fifo时未对fifo的指针进行赋值,则会访问默认地址(0x00000)的情况,而stm32的内存地址开始为0x20000..
所以就会出现 HardFault_Handler 异常了。
至此,问题根本原因找到,解决问题的方案自然也就很多了。
总结一下:出现这种 HardFault_Handler 问题一般有两种,一是堆栈溢出,而是程序设计欠佳,导致对异常地址的访问。遇到这种问题时,根据sp的LR地址,找到出错语句,一步一步调试,最终肯定可以解决问题。
感谢:http://blog.csdn.net/zyboy2000/article/details/7668331 提供的帮助
【stm32+ucosii|stm32+ucosii hardhandle调试经历】
推荐阅读
- 移动端h5调试方法
- 那些年bug总结出来的调试代码技巧
- 汇编实验(格雷码转二进制(ASCII码)的实现和调试)
- TODO(小程序手机预览调试)
- 【Camera专题】Qcom-高通OTP编程调试指南-上
- Flutter应用如何调试--DevTools介绍(下)
- linux采用core的调试方法
- Injection|Injection For Xcode11 macOS 10.15 Catalina 亲测可用iOS模拟器UI界面调试实时刷新工具
- 驱动调试小结
- xcode|xcode 真机调试无法识别手机解决方法