在GD32A503的Bootloader跳转到APP时,堆栈冲突。

[复制链接]
 楼主| stormwind123 发表于 2025-7-23 21:50 | 显示全部楼层 |阅读模式
在GD32A503的Bootloader跳转到APP时,堆栈冲突,

评论

可能需要setmsp一下  发表于 2025-8-19 10:45
xiaoqizi 发表于 2025-8-5 20:49 | 显示全部楼层
若跳转前未将主堆栈指针更新为APP的初始堆栈地址,则CPU仍会使用Bootloader的堆栈空间,导致两者数据混杂甚至覆盖关键变量
木木guainv 发表于 2025-8-5 22:32 | 显示全部楼层
当从APP返回Bootloader并再次跳转时,之前APP使用的局部变量、中断现场等信息仍保留在RAM中
Jiangxiaopi 发表于 2025-8-6 07:58 | 显示全部楼层
当从APP返回Bootloader并再次跳转时,之前APP使用的局部变量、中断现场等信息仍保留在RAM中
荣陶陶 发表于 2025-8-6 09:42 | 显示全部楼层
必须在跳转前通过[size=0.875]__set_MSP()函数显式设置APP的堆栈顶地址
Zhiniaocun 发表于 2025-8-6 11:31 | 显示全部楼层
利用IDE的调试功能观察跳转前后的寄存器状态,确认堆栈指针是否切换成功
Zuocidian 发表于 2025-8-6 13:34 | 显示全部楼层
利用IDE的调试功能观察跳转前后的寄存器状态,确认堆栈指针是否切换成功
Puchou 发表于 2025-8-6 15:27 | 显示全部楼层
在Bootloader中禁用看门狗定时器,防止因未及时喂狗导致意外复位影响调试。
Xiashiqi 发表于 2025-8-6 17:10 | 显示全部楼层
直接调用函数指针跳转会
不清理堆栈导致二次跳转失败

小海师 发表于 2025-8-6 18:53 | 显示全部楼层
APP的向量表第一个字是初始堆栈地址,第二个字是复位中断处理函数入口。务必确保这两个值已由编译器正确生成并烧录到对应Flash位置
Haizangwang 发表于 2025-8-6 20:46 | 显示全部楼层
RTC与深度休眠是否可以协同工作呢
豌豆爹 发表于 2025-8-13 15:55 | 显示全部楼层
可能是堆栈指针未正确初始化。
duo点 发表于 2025-8-13 15:55 | 显示全部楼层
Bootloader和APP的代码、数据或堆栈区域在内存中重叠,导致运行时冲突。
七毛钱 发表于 2025-8-13 15:56 | 显示全部楼层
中断向量表未重映射?
内政奇才 发表于 2025-8-13 15:56 | 显示全部楼层
可能是链接脚本配置错误导致的。
麻花油条 发表于 2025-8-13 15:57 | 显示全部楼层
重映射中断向量表。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

588

主题

3619

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部