定位HardFault

news2025/1/8 5:17:39

一、HardFault定义

STM32出现HardFault_Handler硬件错误的原因主要有两个方面:

1、内存溢出或者访问越界。(包括使用野指针)

2、堆栈溢出。

二、定位HardFault步骤

1. 判断所使用堆栈:

发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP

LR 寄存器的工作原理。当 Cortex-M4 处理器接受了一个异常后,寄存器组中的一些寄存器值会被自动压入当前栈空间里,这其中就包括链接寄存器(LR )。这时的 LR 会被更新为异常返回时需要使用的特殊值(EXC_RETURN)

EXC_RETURN 的定义如下,其为 32 位数值,高 28 位置 1,第 0 位到第三位则提供了异常返回机制所需的信息,如下表所示。可见其中第 2 位标示着进入异常前使用的栈是 MSP还是PSP。在异常处理过程结束时,MCU 需要根据该值来分配 SP 的值,0主栈,1进程栈。

a763802baca046dab0d9ebf5e5c54673.png

在Cortex_M3权威指南中可以看到如下图所示:

33f6e8c2ac11434c96fd54cee055a556.png

发送在MSP

  • 打开调试,全速运行,然后停止程序会在hardfault位置停止

44512f51458c490986c4d33705dd2a4b.png

1f4b30148b40421e85db4ee472a9b4e4.png

2.找到相对应的堆栈指针

eb83746e17ef4dac84a0e0ee74f95e99.png

2. 在内存中查看相对应堆栈的内容,并找到PC指针

发生hardfault异常,内核将会将8个通用寄存器压入当前栈中R0~R3,R12,LR,PC(Return address),xPSR寄存器依次入栈,其中堆栈后第25个字节到28字节PC(Return address)即为发生异常前PC将要执行的下一条指令地址

090428e7eb1a4a3b8d348ccc07b3c075.png

  • 对应内存中存储

684cbdf002ac4855a0a8286b39b0ef81.png

cb560076658b400e81039b582974c2ab.png

3. 在反汇编窗口中输入PC寄存器里面存放的的地址,

a8fc577256bb48ee902fc693cbea0dda.png

  • 实现了跳转

b0a2de57f1e34e2ca4d223f4f08740c9.png

发生在PSP

4cc6973401f9410b8005f9578d7558d4.png

 同样实现了跳转

d4d0662a511b4bd5b13f7f26cd6bbd96.png

小技巧:

memory窗口这里可以右键设置为32位查看,这样看得比较方便:

5f90a3142cf9486f8d2ed7b7b67c9652.png

设置后如下图:

170edcf9811f4fc2bbea7835685e3df7.png

 

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

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

相关文章

十五,Spring Boot 整合连接数据库(详细配置)

十五,Spring Boot 整合连接数据库(详细配置) 文章目录 十五,Spring Boot 整合连接数据库(详细配置)最后: JDBC HikariDataSource(Spring Boot内置的数据库) HikariDataSource: 目前市面上非常优秀的数据源,是 Spring Boot2默认数…

gcc/g++的使用:

目录 (1). 程序的翻译过程 预处理: gcc -E 源文件 编译: gcc -S 源文件 汇编:gcc -c 源文件 连接: (2) 语言的自举(也叫 编译器的自举): (3). 查看可执行程序在连接时依赖的库: ldd 可执行程序的名字 。 (4). …

C语言 | Leetcode C语言题解之第414题第三大的数

题目&#xff1a; 题解&#xff1a; int cmp(const void *a, const void *b) {return *(int*)a < *(int*)b; }int thirdMax(int* nums, int numsSize){qsort(nums, numsSize, sizeof(nums[0]), cmp);int diff 0;for (int i 1; i < numsSize; i) {if (nums[i] ! nums[i…

体感魂斗罗-开篇

文章目录 前言新的目标Flag 前言 黑神话悟空大火&#xff0c;9月14&#xff0c;周鸿祎在抖音平台分享了360团队用两天的业余时间将《黑神话&#xff1a;悟空》爆改为体感游戏的过程&#xff0c;通过身体动作来控制游戏中的角色&#xff0c;实现更加自然和直观的操作方式。 把…

【秋招笔试-支持在线评测】8.28华为秋招(已改编)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 华为专栏传送🚪 -> 🧷华为春秋招笔试 目前今年秋招的笔…

Golang | Leetcode Golang题解之第414题第三大的数

题目&#xff1a; 题解&#xff1a; func thirdMax(nums []int) int {var a, b, c *intfor _, num : range nums {num : numif a nil || num > *a {a, b, c &num, a, b} else if *a > num && (b nil || num > *b) {b, c &num, b} else if b ! ni…

直播标准权威发布,阿里云RTS获首批卓越级评估认证

近期举办的2024“可信云大会”上&#xff0c;中国信通院正式发布了2024年上半年音视频领域最新评估结果。阿里云超低延时直播&#xff0c;以首批卓越级&#xff0c;通过中国信通院超低延时直播性能及服务质量分级测试。 标准发布&#xff0c;权威量化直播体验质量 从直播元年发…

如何通过 4 种方法恢复 Mac 上删除/未保存的 Excel 文件

您花了数小时在 MacBook 上处理 Excel 工作簿&#xff0c;但现在它不见了。或者&#xff0c;当您退出 Excel 文件时&#xff0c;您无意中选择了“不保存”。这是否意味着您的所有努力都白费了&#xff1f;本文系统地解释了如何在 Mac 上恢复丢失的 Excel 文件。使用我们的 4 种…

Unity项目的脚本继承关系

1.Unity项目的脚本继承关系包括四层&#xff1a;自己的脚本、MonoBehaviour、Behaviour、Component、Object。 2.通过F12跳转可以查看各继承类中的方法和属性&#xff0c;如MonoBehaviour类中主要包括协程和相关API。 3.Component类中包含组件的只读属性、消息发送等API&…

实景三维助力工程建设项目智慧选址

随着科技的不断进步&#xff0c;实景三维技术已经成为城市规划和工程建设中不可或缺的一部分。它通过高精度的地理信息数据&#xff0c;为工程建设项目提供了智慧选址的新思路。 1. 实景三维技术简介 实景三维技术&#xff0c;是一种利用遥感、地理信息系统&#xff08;GIS&a…

linux环境编程

linux一切皆文件&#xff08;除了网口&#xff09; 内核链表&#xff1a;通过内核链表进行管理&#xff0c;所有一切皆文件 系统io&#xff08;open&#xff0c;read&#xff0c;close&#xff09; open 查看命令&#xff1a;man 2 open 头文件&#xff1a; #include <s…

【入门】配置 Java 应用程序的完整指南

前言&#xff1a; Java 是一种广泛使用的编程语言&#xff0c;具备跨平台的特性&#xff0c;使得其应用程序可以在多种环境中高效运行。本文将介绍如何将 Java 应用程序从开发环境部署到生产环境&#xff0c;确保其能够稳定、稳定地运行运行。 确定运行环境 Java程序可以运行…

vue 案例使用

el-switch 按键的使用 <el-switchclass"switchStyle" v-model"boolValue" :active-value"1" :inactive-value"0" active-text"ON" inactive-text"OFF" active-color"#13ce66" inactive-color&qu…

基于 PyQt5 和 OpenCV 进行图像处理操作的GUI工具初版

为了实现一个基于 PyQt5 和 OpenCV 的图形用户界面&#xff08;GUI&#xff09;&#xff0c;要求如下&#xff1a; 左边显示加载的图片。 中间提供各种对图片进行处理的操作方法&#xff08;如灰度化、模糊处理等&#xff09;。 右边显示处理后的效果图。 接下来我将详细讲解如…

数据结构_1、基本概念

1、基本概念 数据&#xff1a;是信息的载体&#xff0c;是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 数据元素&#xff1a;数据元素是数据的基本单位&#xff0c;通常作为一个整体进行考虑和处理…

Python 3:强大而灵活的编程语言

Python 3&#xff1a;强大而灵活的编程语言 一、Python 3 概述 &#xff08;一&#xff09;发展历程 Python 的作者是荷兰人 Guido von Rossum&#xff0c;1982 年&#xff0c;Guido 从阿姆斯特丹大学获得了数学和计算机硕士学位。1989 年&#xff0c;为了打发圣诞节假期&…

【Hot100】LeetCode—32. 最长有效括号

目录 1- 思路题目识别动态规划 2- 实现⭐32. 最长有效括号——题解思路 3- ACM 实现 原题链接&#xff1a;32. 最长有效括号 1- 思路 题目识别 识别1 &#xff1a;给定一个字符串 s &#xff0c;求解 s 中的最长有效括号 动态规划 动态规划五部曲 递推公式难如果遇到了 s.…

【数一线性代数】007入门

Index 本文稍后补全&#xff0c;推荐阅读&#xff1a;https://blog.csdn.net/weixin_60702024/article/details/140939599分析实现总结 本文稍后补全&#xff0c;推荐阅读&#xff1a;https://blog.csdn.net/weixin_60702024/article/details/140939599 用两个栈来实现一个队列…

回归预测|2024年2月最新优化算法角蜥优化HLOA|基于角蜥优化BP神经网络数据回归Matlab程序HLOA-BP【优化效果好】

回归预测|2024年2月最新优化算法角蜥优化HLOA|基于角蜥优化BP神经网络数据回归Matlab程序HLOA-BP【优化效果好】 文章目录 一、基本原理1. 角蜥优化算法&#xff08;HLOA&#xff09;简介2. BP 神经网络&#xff08;BP Neural Network&#xff09;简介3. HLOA-BP 回归预测流程总…

渗透测试入门学习——php表单form与POST、GET请求练习

最终效果&#xff1a; 必填项为空报错提示&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>php表单练习</title> </head> <body> <?php//php中的…