在stm32复位无效死机中用freertos,程序进入硬件错误(hardfault),这个怎么解决呀

      之前调程序发现一会就跑死,剛开始我创建三个任务其中一个程序运行指示灯,一个任务处理通信一个上传板卡报警值,一切正常但我添加了几个功能后,之后程序异常仿真发现程序停在configASSERT( ( portNVIC_INT_CTRL_REG & 由于是刚学FreeRTOS,经验不足对堆栈、内存等不很了解,不知道问题出在哪边找解决方案边修改,最终发现是HardFault_Handler問题由于水平不高,在参考网上解决方案时觉得是内存溢出,改了半天没反应后来一想会不会是堆栈溢出,于是把任务堆栈改大幾乎没效果,最后尝试把数组改大发现程序多运行了一会,还是跑飞继续改大,没效果于是判定是数组越界,至此有了解决方向查找数组相关程序,问题解决

  下面附上解决方案,说一下出现HardFault_Handler我觉得应该首先查看堆栈大小和数组越界,十有八九就是这两个问题

茬用Keil对stm32复位无效死机的程序进行仿真时程序有时会跑飞,停止仿真程序会停在HardFault_Handler函数里的死循环while(1)中这说明stm32复位无效死机出现了硬件错误。

atAdress”的地址框中输入地址0x08003CB9进行搜索然后就会找到相对应的代码。这里的代码就是进入循环中断之前的情况仔细查看附近区域的相关代码來排查错误具体原因。

}
分类专栏: 文章标签:

一种是:堆栈溢出程序指针指飞

    所以这里需要查找的内存地址是MSP的值:0x
  • 在memory里面查找MSP的值:0x,然后在对应的行里媔找到地址地址一般格式都是:0x0800BA68这样的。
??2020 CSDN 皮肤主题: 程序猿惹谁了 设计师: 上身试试
}

我要回帖

更多关于 stm32复位无效死机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信