你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

HardFault_Handler的问题

[复制链接]
黄昏菩提 提问时间:2014-12-29 15:55 /
请问程序跳到HardFault_Handler里

如何知道是哪里出错跳进去的呢?

IAR 环境
收藏 评论9 发布时间:2014-12-29 15:55

举报

9个回答
奔跑小蜗牛 回答时间:2014-12-29 17:33:54
STM32出现HardFault_Handler故障的原因主要有两个方面:

1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。
2、堆栈溢出。增加堆栈的大小。

出现问题时排查的方法:

发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。

注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威)
黄昏菩提 回答时间:2014-12-29 18:08:47
其中LR即为发生异常前PC将要执行的下一条指令地址。
这样可以知道是哪个函数或者那条语句导致的错误吗?
[size=0em]​

wambob 回答时间:2014-12-29 18:29:13
在进入HardFault_Handler之后,根据堆栈指针查看堆栈,找到堆栈中最新的函数返回地址,到这个地址上去加断点,一步步根据汇编执行代码。很快就能找到出错原因,大多数是数组溢出,或者是指针初始化的问题。

试试这个能解决不
小贾-370388 回答时间:2014-12-29 22:37:39

本帖最后由 小贾-370388 于 2014-11-18 10:16 编辑


STM32出现HardFault_Handler故障的原因主要有两个方面:

1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。

2、堆栈溢出。增加堆栈的大小。



出现问题时排查的方法:

发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、LR、PC、XPRS 寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。

注意:寄存器均是32位,且STM32是小端模式。(参考Cortex-M3权威)
楼主可以尝试这个方法将HardFault_Handler函数添加BX LR语句直接返回的形式。然后在这条语句打个断点,一旦在断点中停下来,说明出错了,然后再返回,就可以返回到出错的位置的下一条语句那儿
__asm void wait()
{
      BX lr
}

void HardFault_Handler(void)
{
    /* Go to infinite loop when Hard Fault exception occurs */
       wait();
}
晓枫VS枯叶 回答时间:2014-12-30 09:56:21
楼上的那个函数只适用于ARM自家编译器吧,楼主你的IAR编译器应该这样写:
  1. /关闭所有中断(但是不包括fault和NMI中断)
  2. void INTX_DISABLE(void)
  3. {
  4.         asm("CPSID   I");
  5.         asm("BX      LR");          
  6. }
复制代码
IAR的汇编内联和MDK的有一点不一样!
沐紫 回答时间:2014-12-30 10:31:43
谢谢楼上各位,楼主问题解决了吗
bldc小菜鸟 回答时间:2014-12-30 13:32:11
奔跑小蜗牛 发表于 2014-12-29 17:33
STM32出现HardFault_Handler故障的原因主要有两个方面:

1、内存溢出或者访问越界。这个需要自己写程序的 ...

讲得不错。
Dylan疾风闪电 回答时间:2015-1-4 13:36:52
mark,6#的答案在MDK中使用需要修改么?怎么改?asm?
770781327 回答时间:2015-1-4 20:59:04
我这问题常有,基本上这些原因不管的,查程序,肯定有个地方有一个简单错误,可以仿真下,看看哪步不对

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版