Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Hardfault
中断向量表
栈溢出及中断向量偏移BUG记录与分析
发布于 2024-03-28 00:17:48 浏览:608
订阅该版
[tocm] # 栈溢出BUG记录与分析 ## BUG现象描述 程序在调用函数A时,执行到其中第一个语句就触发 hard fault (A程序跳转地址无异常),在其他地方(不在函数A中)调用同样的语句正常。 进入 hard fault 时,LR 寄存器值为 0xFFFFxxxx ## 分析思路 首先查看进入 hard fault 时,LR 寄存器值为 0xFFFF FFE9 ,因此触发 hard fault 时使用的是 MSP 栈(若为 0xFFFF FFFD 则为 PSP 栈),此时 MSP 值为 0x1FFF FF98,在 Memory 中输入 Flash 的起始地址 0x8000 0000 ,其值为 2000 07B0 ,而 MSP 比起始值还小,明显是跑飞了,**怀疑是内存方面导致的错误**。回到引入 hard fault 的函数A中结合上下文分析,注意到其中有一个较大结构变量的定义, Command 中输入 sizeof(变量名)查看其大小值为 0x0509,进入 startup.s 文件中查看设置的栈大小 Stack_Size EQU 0x00000400 ,明显栈溢出了,将栈大小改为 0x00001000,重新烧录程序后,之前异常的问题消失。 # 中断向量表偏移 BUG 记录与分析 ## BUG现象描述 该程序是使用了 bootloader ,因此需要根据 APP 固件存放的 Flash 地址对中断向量表进行偏移处理。 ```c void $Sub$$main(void) { extern int $Super$$main(void); // 中断向量表偏移处理 SCB->VTOR = FLASH_BASE | 0x5000; __enable_irq(); $Super$$main(); } ``` 在一开始不开启中断时,程序能够正常进入 main 函数,正常进入主循环中执行程序。当开启 SysTick 及其中断后,程序就会跑飞运行到奇怪的地址。 ## 分析思路 因为是开启 SysTick 后引入的问题,我首先怀疑是对 SysTick 的配置存在问题,于是反复核实检查,确实 SysTick 的配置没有问题,但就是只要一开始其就会稳定触发问题。尝试在 SysTick 的中断回调函数中打断点,发现还没进入中断回调函数程序就已经跑飞了。怀疑是中断配置的问题,检测 NVIC 配置也没有问题。与中断相关的操作那就只剩开头提到的中断向量表偏移的操作了,于是对其进行检查。一开始,中断向量表偏移量为 0x2800 ``` SCB->VTOR = FLASH_BASE | 0x2800 ; ``` ,检查 APP 固件存放的 Flash 起始地址,值为 0x8000 5000 真相大白!中断向量表偏移量与存放的 Flash 地址偏移不一致,因此只要一触发中断,跳转到中断号对应的处理函数时,就会跳转到错误的地址,导致程序运行错误。将中断向量表偏移量改为 0x5000, ``` SCB->VTOR = FLASH_BASE | 0x5000 ; ``` 程序终于正常运行,并且能够正常处理 SysTick 及其中断处理。
5
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
螺丝松掉的人
这家伙很懒,什么也没写!
文章
42
回答
0
被采纳
0
关注TA
发私信
相关文章
1
RTT1.0,STM32调试时会跑到HardFault【已解决】,出现新问题
2
新手请教关于hardfault怎么查
3
github最新版本库中stm32f0X分支,运行切换任务时候出现hardfault[已解决]
4
实现iap功能,bootloader使用了rtt操作系统,在跳转到app代码的时候提示出现hardfault的问题
5
ymodem在on_begin内发送can无法断开连接,而且RTT会报hardfault
6
挂载UFFS文件系统执行到退出_BuildTreeStepOne函数时hardfault异常
7
STM32F1+RTT串口接收中断进入hardfault
8
STM32F746NG随机进入hardfault(已解决)
9
[已解决]自已建了个STM32F103的MDK工程,初始化时总是进入HardFault,求教!
10
将 Cortex M3 的 hardfault 处理与 M4、M7、M0 保持一致?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
11
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
rv666
9
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
6
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部