目的:

        提供一种能够解决Fault问题的方法

硬件环境:

            STM32F103

软件环境:

            无操作系统

问题复现:

        在代码处执行*((u32*)0x3)  = 9;

问题现象:

        代码挂死在下面的位置处。

ARM_CortexM3内核HardFault问题记录

解决方法:

        1:查看当前通用寄存器的值见下图

              ARM_CortexM3内核HardFault问题记录       

            2:关注LR的值为0xFFFFFFF9,根据下图解析其含义

        ARM_CortexM3内核HardFault问题记录

            说明问题,发生在主线程中,并且使用的栈寄存器为MSP

            3:从MSP中读出SP的值为0x200008D8,并从该地址处往上读至少32字节数据,并解析

            ARM_CortexM3内核HardFault问题记录

            4:所以可以得到出错前,PC的值为0x0800022E,由于流水线的作用,PC-4的值才是真正出错的地址为0x0800022A

    5:  打开汇编文件,定位位置0x0800022A见下图,刚好和重现复现代码吻合              ARM_CortexM3内核HardFault问题记录

注:

1:本例根本原因是由于bus faults导致的,详见Cortex-M3参考手册

ARM_CortexM3内核HardFault问题记录


相关文章:

  • 2022-01-07
  • 2021-07-28
  • 2021-11-12
猜你喜欢
  • 2022-12-23
  • 2022-01-06
  • 2021-08-19
  • 2021-08-13
  • 2022-12-23
  • 2021-06-13
  • 2022-02-23
相关资源
相似解决方案