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

相关文章:

  • 2022-12-23
  • 2021-10-19
  • 2021-09-07
  • 2021-08-18
  • 2021-09-09
猜你喜欢
  • 2022-12-23
  • 2021-11-27
  • 2021-09-07
  • 2021-09-02
  • 2021-11-27
  • 2021-06-20
  • 2021-06-19
相关资源
相似解决方案