stm32触发硬件错误位置定位

1.背景 

1. 项目中,调试过程或者测试中都会出现程序跑飞问题,这个时候问题特别难查找。

2. 触发硬件错误往往是因为内存错误。这种问题特别难查找,尤其是产品到了测试阶段,而这个异常复现又比较难的情况下,简直头疼。

3. 我目前的工作完全是没有调试器的,代码都是写好了,通过bootloader烧写进去的。也就意味着不能在void HardFault_Handler(void)中打断点,然后通过当前lr寄存器中的值查看异常地址。

参考:

STM32进入HardFault_Handler的调试方法-电子工程世界 (eeworld.com.cn)

Keil环境下STM32定位hardfault位置方法和遇到的情况 - 张士玉小黑屋 (zhangshiyu.com)

MCU HardFault_Handler调试方法_根据lr寄存器值判断msp psp-CSDN博客 

RTOS系列文章(7):CM3/4之LR寄存器、EXC_RETURN深入分析-CSDN博客

还参考了很多文章, 有些写的时候都关掉了, 这里就不列出来了. 

2.裸机程序触发硬件错误

裸机触发硬件错误时, R14(LR)寄存器的值为0xFFFFFFF9,此时看的是MSP指针保存的栈顶地址,然后在Memory Window中输入这个值(0x20000738),第6个值就是错误退的地址(也就是我这个空指针的地址),查看.map文件,显然我们的0x080001D1在0x080001cd(my_test在flash的首地址)和0x080001d3(my_test1在flash的首地址)之间。因此我们就可以定位出错误就在my_test()这个函数中。

 也可以查看汇报,看到地址(不过这里看起来有点让人蒙圈)

3.RTOS程序触发硬件错误

 RTOS触发硬件错误时, R14(LR)寄存器的值为0xFFFFFFFD, 此时看的是PSP中的栈顶地址。同上分析,我们最终也能通过.map定位错误发生的位置。

补充知识:为什么裸机的是0xFFFFFFF9(9:1001)而多线程的是0xFFFFFFFD(1101),如下图,bit2是区别的关键,后面打印错误需要用到这一点。

4.在硬件错误中断打印这些值

我们最终的目的,就是在触发硬件中断的时候,要将这些值打印出来,从而准确定位出是哪个函数造成的错误。 

typedef struct
{u32 R0;u32 R1;u32 R2;u32 R3;u32 R12;u32 LR;u32 PC;u32 xPSR;
}STACK_DATA_TYPE;
void NotOSHardFault_Handler(u32 msp_addr)
{STACK_DATA_TYPE *p;             //堆栈中存储的数据printf("\r\n-----------------ERROR -----------------\r\nHardFault_Handler\r\n");p = (STACK_DATA_TYPE *)msp_addr;printf("R0:0x%08X\r\n", p->R0);printf("R1:0x%08X\r\n", p->R1);printf("R2:0x%08X\r\n", p->R2);printf("R3:0x%08X\r\n", p->R3);printf("R12:0x%08X\r\n", p->R12);printf("LR:0x%08X\r\n", p->LR);printf("PC:0x%08X\r\n", p->PC);printf("xPSR:0x%08X\r\n", p->xPSR);printf("系统即将复位 ...\r\n");
}void HardFault_Handler(void)
{/* Go to infinite loop when Hard Fault exception occurs */
int msp, psp;msp = __get_MSP();NotOSHardFault_Handler(msp);psp = __get_PSP();NotOSHardFault_Handler(psp);while (1){}
}

当前还有一个问题需要解决, 我无法获取lr寄存器中保存的值, 也就是说我无法准确的确定是进程堆栈出错还是主堆栈出错.(我测试了发现在rtos中, 如果让错误放在main函数中, 此时MSP堆栈指向的位置是出错位置, 如果让错误放在任务中, 此时PSP堆栈指向的位置是出错位置, 如果在裸机程序中, 通过MSP查找, 当前我用的是keil编译的,我不知道IAR里面是否有__get_MSP(), __get_PSP())

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(css)element-ui表格行图片点击放大且可调整preview-src-list大图预览样式

(css)element-ui表格行图片点击放大且可调整preview-src-list大图预览样式 效果&#xff1a; 常规写法&#xff1a; <el-table-column prop"display" label"展示效果" align"center"><template slot-scope"scope"><e…

IEEE Transactions on Industrial Electronics工业电子TIE修改稿注意事项及提交须知

一、背景 兔年末投了一篇TIE&#xff0c;手稿初次提交的注意事项也整理成了博客IEEE Transactions on Industrial Electronics工业电子TIE论文投稿须知&#xff0c;获得了许多点赞和收藏。最近也收到了审稿结果&#xff0c;给的意见是大修major revision&#xff0c;总之只要不…

国内chatgpt写作软件,chatgpt国内使用

随着人工智能技术的不断发展&#xff0c;国内涌现出了一些基于ChatGPT模型的写作软件&#xff0c;这些软件不仅能够实现智能化的文章写作&#xff0c;还支持批量生成各种类型的文章。本文将深入探讨国内ChatGPT写作软件&#xff0c;以及它们在批量文章创作方面的应用与优势。 C…

C#使用iText7给PDF文档添加书签

上一篇文章将SqlSugar官网文档中每个链接对应的网页生成独立PDF文档再合并为单个PDF文档&#xff0c;但是没有书签&#xff0c;八百多页的内容查找和跳转都不方便&#xff0c;本文学习和使用iText7给PDF文档添加多级书签。   添加多级书签分为两大步骤&#xff1a;1&#xff…

选项 打光 试题总结

试题1 被测物体100100mm&#xff0c;精度要求被测物体 &#xff0c;精度要求0.1mm&#xff0c;相机距被测物体在200&#xff5e;320mm之间&#xff0c;要求选择合适的相机和镜头&#xff1f; 分析如下&#xff1a; 通常我们用的相机靶面是4:3 的所以我们要用短边来计算视场&am…

【element-ui】el-select multiple多选,表单校验问题解决方法

在项目开发过程中发现&#xff0c;el-select设置了multiple支持多选属性之后&#xff0c;el-select赋值之后&#xff0c;表单校验不通过 解决思路及解决方法&#xff1a; 1、首先看看v-model 、prop属性、rules校验是否正确&#xff0c;这里注意el-select的rules校验的trigger…

具身智能计算系统,机器人时代的 Android | 新程序员

【导读】具身智能作为一种新兴的研究视角和方法论&#xff0c;正在刷新我们对智能本质及其发展的理解&#xff1a;传统的 AI 模型往往将智能视为一种独立于实体存在的抽象能力&#xff0c;而具身智能则主张智能是实体与其环境持续互动的结果。 本文深度剖析了具身智能计算系统…

第二篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas金融数据分析

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas 在金融数据分析中的常见用途和功能介绍二、金融数据清洗和准备示例代码三、金融数据索引和选择示例代码四、金融数据时间序列分析示例代码五、金融数据可视化示例代码六、金融数…

Linux设备模型(十) - bus/device/device_driver/class

四&#xff0c;驱动的注册 1&#xff0c;struct device_driver结构体 /** * struct device_driver - The basic device driver structure * name: Name of the device driver. * bus: The bus which the device of this driver belongs to. * owner: The module own…

uniapp开发android原生插件

一、下载原生开发SDK Android 离线SDK - 正式版 | uni小程序SDK (dcloud.net.cn)、 https://nativesupport.dcloud.net.cn/AppDocs/download/android.html 将开发uniappa原生android的插件解压到ben本地目录&#xff0c;目录结构如下&#xff1a; 接下就可以使用 UniPlugin-Hel…

第三百八十回

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 013pickers2.gif 我们在上一章回中介绍了"如何实现Numberpicker"相关的内容&#xff0c;本章回中将介绍wheelChoose组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念…

蓝桥杯练习题——差分

1.空调 思路 1.区间同时加减 1&#xff0c;可以转换成一个差分数组两个端点的操作 2.用 p 减去 t 数组&#xff0c;得到要消除的数组 a&#xff0c;对 a 求差分数组 3.差分数组一正一负为一个操作&#xff0c;因为是把这个原数组区间加上了 1&#xff0c;单独的正负为一个操作…

Python把excel内容保存为图片(非统计图而是纯原表格数据)

一、引入 excel2img 库&#xff0c;没有的话使用 pip install excel2img进行安装 二、采用如下方法进行图片生成 excel文件名为&#xff1a;111.xlsx excel表格里面的sheet名称列表为 [Sheet1, Sheet2] 最终保存为以sheet名称.png的图片 支持跨表格合并项 import excel2i…

《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)

1.简介 按宏哥计划&#xff0c;本文继续介绍WebDriver关于元素定位大法&#xff0c;这篇介绍定位倒数二个方法&#xff1a;By xpath。xpath 的定位方法&#xff0c; 非常强大。 使用这种方法几乎可以定位到页面上的任意元素。 2.什么是xpath&#xff1f; xpath 是XML Path的…

Win11系统实现adb命令向安卓子系统安装APP

Win11系统实现通过adb命令向安卓子系统安装已下载好的apk包。 要实现以上目标&#xff0c;我们需要用到一个Android SDK 的组件Android SDK Platform-Tools &#xff01;这个组件呢其实是被包含在 Android Studio中的&#xff0c;如果你对安卓开发有所了解对此应该不会陌生&…

超全面!Linux学习资料大合集,21套从入门到进阶,看这篇就够了

本文将为那些渴望学习Linux&#xff0c;但又缺乏相应资料和方向的朋友&#xff0c;提供21套Linux优质资料&#xff0c;包含入门到进阶&#xff0c;希望能对大家有所帮助。 此合集内容及其丰富&#xff0c;涉及方面颇多&#xff0c;不仅适合Linux入门学习的朋友&#xff0c;运维…

Linux(CentOS)学习

一、认识Linux 1、如何修改Linux时区 2、配置固定IP 3、重启网络服务 3、小技巧快捷键 4、环境变量设置 5、Linux文件的上传和下载 6、压缩和解压 二、基础命令 1、目录命令 (1、)查看目录内容&#xff08;ls&#xff09; 1、ls //查看当前目录内容 2、- a //显示隐藏内容 3…

Web自动化测试平台开发---Automated_platform

一、项目简介 历时一个假期&#xff0c;Automated_platform 第一版完工&#xff0c;是一款基于po模式的自动化测试平台,采用后端技术为DjangoceleryRabbitMQmysql 配置mysql数据库&#xff0c;进行数据迁移后&#xff0c;运行项目后&#xff0c;即可成功访问http://127.0.0.1:8…

【王道操作系统】ch1计算机系统概述-05操作系统引导

文章目录 【王道操作系统】ch1计算机系统概述-05操作系统引导01 什么是操作系统引导02 磁盘里边有哪些相关数据&#xff08;1&#xff09;主引导记录&#xff08;MBR&#xff09;&#xff08;2&#xff09;活动分区&#xff08;一般是C盘&#xff09; 03 操作系统引导的过程 【…

中间件-Nginx加固(控制超时时间限制客户端下载速度并发连接数)

中间件-Nginx加固&#xff08;控制超时时间&限制客户端下载速度&并发连接数&#xff09; 1.1 Nginx 控制超时时间配置1.2 Nginx 限制客户端下载速度&并发连接数 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1.1 Nginx 控制超…