MCU HardFault_Handler调试方法

一.获取内核寄存器的值

1.在MDK的DEBUG模式下,当程序出现跑飞后,确定卡死在HardFault_Handler中断处

  1. 通过Register窗口读取LR寄存器的值来确定当前系统使用堆栈是MSP还是PSP
LR寄存器值 堆栈寄存器
0xFFFFFFF9 MSP寄存器
0xFFFFFFFD PSP寄存器

如下图所示,当前程序使用的是PSP堆栈寄存器

二、查看堆栈寄存器保存的值

  1. 通过Register窗口确定MSP或PSP的地址
    如下图所示,当前程序卡死时使用的堆栈寄存器为:PSP寄存器,地址为:0x20010318
  2. MSP、PSP堆栈寄存器介绍
    由于异常发生时,内核将r0、r1、r2、r3、r12、r14(lr)、pc、xprs寄存器依次入栈
    r14(lr):保存的是产生异常中断前内核执行的指令地址
    r15(pc):保存的内核正在执行的指令地址

    3 查看堆栈寄存器的保存值
    将上面PSP寄存器的地址(0x20010318)输入到MDK的Memory窗口中得到的数据如下,第六个数为lr寄存器的保存值

三、定位lr寄存器地址的函数名

  1. 在工程编译后的map文件中,根据lr的地址确定运行函数,如下图所示在产生异常中断前,最后执行的地址为0x0801D727在函 prvAddCurrentTaskToDelayedList中,
  2. 分析产生异常中断的原因

四、获取lr寄存器保持地址的方法

  1. 通过MDK在线调试如上面介绍的流程
  2. 通过jlink工具使用命令行也可以完成上述过程的定位
    JLink Commander调试方法
相关推荐
三佛科技-1873661339714 分钟前
HN8220A是什么芯片?大功率非隔离电源芯片HN8220A深度解析
单片机·嵌入式硬件
张海森-1688201 小时前
cv610_flash 烧录两个rootfs操作,记录
单片机
智闲电子设计1 小时前
STM32 定时器编码器接口实战:正交解码测转速,电机闭环第一步
stm32·单片机·嵌入式硬件
LCMICRO-133108477461 小时前
国产长芯微LD151完全P2P替代ADP151,是一款超低噪声、低压差线性稳压器
单片机·嵌入式硬件·fpga开发·硬件工程·电子工程师·线性稳压器·adp151
芯岭技术郦1 小时前
XL2477 透传 WIFI 模组AT 指令说明
单片机·嵌入式硬件·个人开发·射频工程
@松1 小时前
【无标题】STM32103FC8-DMA—直接存储区访问学习
stm32·嵌入式硬件·学习
深圳市恒锐丰科技杨生1 小时前
SA8317E 2.7‑15V 单通道 H 桥电机驱动芯片|消费类低压直流有刷电机方案
嵌入式硬件·硬件工程
单片机仿真设计1 小时前
【proteus仿真】基于 STM32 单片机六足机器人设计
stm32·单片机·嵌入式硬件·proteus·毕设
louis.D.1 小时前
gpio完整速查卡
单片机·嵌入式硬件
zcmodeltech1 小时前
垃圾发电厂沙盘模型控制系统设计与实现:多设备协同联动方案
java·大数据·数据库·人工智能·stm32·嵌入式硬件·制造