当前位置: 首页 > news >正文

MCU HardFault_Handler调试方法

一.获取内核寄存器的值

1.在MDK的DEBUG模式下,当程序出现跑飞后,确定卡死在HardFault_Handler中断处
在这里插入图片描述
2. 通过Register窗口读取LR寄存器的值来确定当前系统使用堆栈是MSP还是PSP

LR寄存器值堆栈寄存器
0xFFFFFFF9MSP寄存器
0xFFFFFFFDPSP寄存器

如下图所示,当前程序使用的是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调试方法
http://www.lryc.cn/news/215233.html

相关文章:

  • 【深度学习】AUTOMATIC1111 / stable-diffusion-webui docker
  • [Hive] 查询结果保存
  • Es中出现unassigned shards问题解决
  • RT-DERT:在实时目标检测上,DETRs打败了yolo
  • uniapp/H5富文本复制文本功能
  • 通付盾Web3专题 | 智能账户:数字时代基础单元
  • java网上阅读网站系统eclipse定制开发mysql数据库BS模式java编程jdbc
  • 人工智能基础_机器学习007_高斯分布_概率计算_最小二乘法推导_得出损失函数---人工智能工作笔记0047
  • 开源播放器GSYVideoPlayer的简单介绍及播放rtsp流的优化
  • 安卓手机数据恢复工具 DiskDigger Pro 中文版-适用于已获得 root 权限的设备!可以从您的存储卡或内存恢复数据
  • Python 生成Android不同尺寸的图标
  • PHP使用GuzzleHttp进行HTTP请求
  • pytorch笔记:allclose,isclose,eq,equal
  • YoloV8修改检测框为中心点
  • 文言一心中将C语言归类为低级语言,这对么?
  • [补题记录] Codeforces Round 906 (Div. 2)(A~D)
  • Kubernetes yaml文件
  • Linux——切换CUDA版本
  • 利用云计算和微服务架构开发可扩展的同城外卖APP
  • 数据结构详细笔记——二叉树
  • react实现列表增删改查的小demo(class组件版)
  • 运行批处理文件,Windows 10至少提供了三种方法,有的可以设置定时运行
  • C++ detach线程的归属权和控制权交给runtime library的原因
  • Android应用集成RabbitMQ消息处理指南
  • 爆改86㎡户型,中式禅意,自然诗意!福州中宅装饰,福州装修
  • LVGL库入门 02 - 布局
  • 利用Vue2实现印章徽章组件
  • 金麟国际用工-全新蓝领跨境就业服务平台
  • 性能测试知多少---并发用户
  • 自动驾驶算法(三):RRT算法讲解与代码实现(基于采样的路径规划)