当前位置:网站首页>STM32 如何定位导致发生 hard fault 的代码段
STM32 如何定位导致发生 hard fault 的代码段
2022-07-06 09:16:00 【薇远镖局】
产生 hard fault 方法:
对不可访问的内存地址进行写操作
uint32_t *addr = (uint32_t *)0x20100000; *addr = 0x12;
STM32 定位导致发生 hard fault 的代码段 ~ 流程:
1、获得进入中断服务函数 HardFault_Handler 前的 PC 值(PC 值表示的是汇编指令所在的 flash 地址)
2、生成反汇编文件(内含 flash 地址及对应的汇编指令,以及汇编对应的 C 程序)或者 MAP 文件
3、在反汇编文件中,通过 PC 值找到对应的 C 程序语句;或者在 MAP 文件通过 PC 值找到对应的调用函数
获得进入中断服务函数 HardFault_Handler 前的 PC 值
方法1:
使用 RT-Thread 系统,如果出现 hard fault,会在中断服务函数 HardFault_Handler 中打印如下消息:
从 log 可得知 线程 “ connect t “ 内的程序导致 hard fault,程序执行到 PC: 0x08055F22 处跳转到中断服务函数 HardFault_Handler
方法2:
在中断服务函数 HardFault_Handler 的开始位置打一个断点
程序运行到这里后,先查看寄存器LR的值:
如果LR为0xXXXXXXX9,则进入中断前SP的值为MSP;
如果LR为0xXXXXXXXD,则进入中断前SP的值为PSP;
下图的LR为0xXXXXXXXD(截图未显示出来),所以查看寄存器 PSP 的值,为 0x2000FA30
通过 PSP 的值,根据寄存器入栈顺序,就可以得到 PC 值(由于是小端编码,所以为 0x08055F6A)
生成反汇编文件
方法1:
ELF 文件反汇编,生成汇编文件:
.arm-none-eabi-objdump.exe -l -S . tthread.elf > .aaa.c
方法2:
启动 RT-Thread Studio 或者其他 IDE 调试,打开 “反汇编” 视图
方法3:
查看 map 文件,有类似于反汇编文件的一些信息,对于 RT-Thread 功能,则是 rtthread.map
查看 rtthread.map 文件可知 0x08055F22 位于函数 load_data_to_toServerBuf 内
边栏推荐
- 分布式事务的实现方案
- 【Flink】CDH/CDP Flink on Yarn 日志配置
- wangeditor富文本引用、表格使用问题
- Pytoch Foundation
- 互联网协议详解
- wangeditor富文本组件-复制可用
- Internet protocol details
- [Bluebridge cup 2020 preliminary] horizontal segmentation
- C语言读取BMP文件
- Are you monitored by the company for sending resumes and logging in to job search websites? Deeply convinced that the product of "behavior awareness system ba" has not been retrieved on the official w
猜你喜欢
Apprentissage automatique - - régression linéaire (sklearn)
sklearn之feature_extraction.text.CountVectorizer / TfidVectorizer
Nanny level problem setting tutorial
【CDH】CDH5.16 配置 yarn 任务集中分配设置不生效问题
vs2019 使用向导生成一个MFC应用程序
Machine learning -- linear regression (sklearn)
Vert. x: A simple login access demo (simple use of router)
[CDH] cdh5.16 configuring the setting of yarn task centralized allocation does not take effect
ToggleButton实现一个开关灯的效果
Implementation scheme of distributed transaction
随机推荐
[BSidesCF_2020]Had_a_bad_day
[BSidesCF_2020]Had_ a_ bad_ day
When using lambda to pass parameters in a loop, the parameters are always the same value
Detailed explanation of nodejs
Vert. x: A simple login access demo (simple use of router)
搞笑漫画:程序员的逻辑
电商数据分析--用户行为分析
5G工作原理详解(解释&图解)
MTCNN人脸检测
wangeditor富文本组件-复制可用
[Bluebridge cup 2020 preliminary] horizontal segmentation
互聯網協議詳解
Yarn installation and use
[template] KMP string matching
Variable star user module
Redis interview questions
[NPUCTF2020]ReadlezPHP
MongoDB
Those commonly used tool classes and methods in hutool
Some concepts often asked in database interview