利用STM32的LR寄存器调试HardFault错误

news2024/9/26 3:22:10

R14 or LR(Link Register)

R14
在这里插入图片描述

HardFault调试的思路

  1. 先在出错误的地方打断点,让程序的状态固定下来;
  2. 由于HardFault属于异常,所以出现HardFault后,LR的值一定是0xFFFFFFFx,这样就可以根据其值,判断程序进入这个异常之前的状态了;
  3. 根据LRReturnStack值,可以知道在进入异常前,程序使用的是PSP还是MSP
  4. 在确定了进入异常之前使用的SP后,就可以根据这个SP的值找到现在的栈顶;
  5. 为什么要找到栈顶呢?因为在进入异常或中断前,MCU会将LR中的返回地址入栈,所以找到栈顶,就能找到这个返回地址了;
  6. MDK中,通过在View -> Memory Windows -> Memory 1中搜索相应SP的值就可以查看栈顶的数据了;
  7. 然后再栈顶地址附近找到一个0x08xxxxxx的值,这个值就是进入异常前代码的地址;
  8. MDK中,可以通过View -> Disassembly Window,然后右击,选择Show Disassembly at address...,然后输入上面找到的地址回车就可以跳转到相应的代码处了。

注意

  1. 只有在程序进入中断或者异常后,LR的值才会变成0xFFFFFFFx,否则保存的还是返回地址;
  2. 如果没有进入中断或者异常,可以直接根据LR的值在Show Disassembly at address...窗口搜索,定位到调用这个函数的代码;

参考

STM32硬件错误调试
How to read the link register (LR) for an ARM Cortex M series device
Cortex-M3 & M4 权威指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++学习记录——십일 string类模拟实现

这篇对于string类的实现会一步步来,从错误到正确,尽量展现可能会忽略掉的细节. 文章目录1、初始化列表2、拷贝构造函数和赋值函数3、循环输出,迭代器4、插入删除等5、流插入流提取6、其它接口1、初始化列表 先写下来这些代码 String.h #pra…

KDJB-802微机继电保护测试仪

一、产品概述 KDJB-802微机继电保护测试仪是在参照电力部颁发的《微机型继电保护试验装置技术条件(讨论稿)》的基础上,广泛听取用户意见,总结目前国内同类产品优缺点,充分使用现代新的的微电子技术和器件实现的一种新型小型化微机继电保护测…

Delphi RSA加解密

感谢、感谢、感谢大佬的分享,https://github.com/ZYHPRO/RSAEncryptAndDecode 目录 1. 前言 2. 准备工作 3. Demo注意事项说明 3.1 公钥、私钥文本格式 3.2 回车键的影响 3.3 中文加解密说明 4. 结语 1. 前言 最近工作上安排了一个项目,与工商银行之…

whistle+SwitchyOmega配置代理解决白名单跨越

文章目录whistleSwitchyOmega配置代理什么是whistle什么是SwitchyOmega示例:作用为什么不直接使用SwitchyOmega代理whistleSwitchyOmega配置代理 什么是whistle whistle主要用于查看、修改HTTP、HTTPS、Websocket的请求、响应,也可以作为HTTP代理服务器…

数据结构-考研难点代码突破(树型查找 - 红黑树(RBT)插入流程图,删除)

文章目录1. 红黑树的定义和性质红黑树的插入操作流程红黑树的删除(了解)1. 红黑树的定义和性质 红黑树查找与删除的效率和AVL树相同。 但是因为AVL树在插入或删除节点可能破坏AVL树结构,而重新调整树的开销大。所以引出了红黑树。 红黑树的…

内网渗透(五十二)之域控安全和跨域攻击-搭建和查看域信任关系

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

为什么你的客户不喜欢用你的知识库呢?

现在很多企业的知识库处于一个完全荒废的状态,极少顾客愿意去查询使用,有的客户甚至完全停止使用企业知识库,这到底是为什么呢?看过许多公司的知识库后,总结了几个知识库失败的原因,并且提出了几个解决方法…

flink sql 执行慢问题排查(flink jdbc where 条件没有下推数据库)

最近在使用 flink sql (jdbc)执行一个简单表同步,可是执行了半天都没有执行完,后面通过 jstack 找到了问题原因:where条件没有下推到数据库执行。 任务如下: create table mysql_a ( id1 string, id2 at…

vue路由跳转取消上个页面的请求

场景描述: ​ 项目中,有一个Steps 步骤条,包含三步审核, 当页面跳转时,不管当前处于第几步,都需要停止上个页面正在执行或还未执行的逻辑。 需求:当vue路由跳转时,取消执行上个页面…

和中国信通院美图公司技术专家见面,聊聊FinOps从概念到落地

成本优化成为企业上云的核心关切。目前,许多以“上云”为数字化转型路径的企业正面临着严重的云上超支问题。 数据库软件上市公司 Couchbase 曾发布一则报告称:一个典型的企业每年在云服务的支出超过3300万美元,这个数字比企业必要的支出还多…

【类与对象】封装对象的初始化及清理

C面向对象的三大特性:封装、继承、多态。具有相同性质的对象,抽象为类。 文章目录1 封装1.1 封装的意义(一)1.2 封装的意义(二)1.3 struct 和 class区别1.4 成员属性设置为私有练习案例:1 设计…

go gin学习记录5

有了前面几节的学习,如果做个简单的web服务端已经可以完成了。 这节来做一下优化。 我们实验了3种SQL写入的方法,但是发现每一种都需要在方法中去做数据库链接的操作,有些重复了。 所以,我们把这部分提取出来,数据库链…

【C/C++】中【typedef】用法大全

总结一下typedef用法,一共七种,分别是:为基本数据类型起别名、为结构体起别名、为指针类型起别名、为数组类型起别名、为枚举类型起别名、为模版函数起别名。 目录 一、为基本数据类型起别名 二、为结构体起别名 三、为指针类型起别名 四…

Windows应用之——设置定时关机

一 概述 本文介绍window设置自动关机的两种方式: cmd指令设置自动关机任务计划程序设置自动关机第三方定时关机软件 二 cmd指令设置自动关机—不推荐 2.1 自动关机-开启(管理员模式下) 依次点击‘“开始”,在“搜索程序和文件”中输入cmd&#xff0c…

Python GDAL读取栅格数据并基于质量评估波段QA对指定数据加以筛选掩膜

本文介绍基于Python语言中gdal模块,对遥感影像数据进行栅格读取与计算,同时基于QA波段对像元加以筛选、掩膜的操作。本文所要实现的需求具体为:现有自行计算的全球叶面积指数(LAI).tif格式栅格产品(下称“自…

关于Transformer的一些问题总结

一些与Transformer模型相关的问题总结,有不对的欢迎指出。 💡 残差网络为何可以解决梯度消失 对比1和2可以发现,对于普通网络,当有几个偏导很小的时候,梯度会迅速趋近于0;而对于残差网络,要趋近…

基于appium的app自动化测试框架

App自动化测试主要难点在于环境的搭建,appium完全是基于selenium进行的扩展,所以app测试框架也是基于web测试框架开发的 一、设备连接 (即构建基础的测试环境,保证可以驱动设备进行操作) 0.准备测试环境 1&#xff0…

第09章_MySQL子查询

第09章_子查询 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了…

Spring MVC 源码 - HandlerAdapter 组件(一)之 HandlerAdapter

HandlerAdapter 组件HandlerAdapter 组件,处理器的适配器。因为处理器 handler 的类型是 Object 类型,需要有一个调用者来实现 handler 是怎么被执行。Spring 中的处理器的实现多变,比如用户的处理器可以实现 Controller 接口或者 HttpReques…