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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版