在GD32A503的Bootloader跳转到APP时,堆栈冲突。
在GD32A503的Bootloader跳转到APP时,堆栈冲突, 若跳转前未将主堆栈指针更新为APP的初始堆栈地址,则CPU仍会使用Bootloader的堆栈空间,导致两者数据混杂甚至覆盖关键变量当从APP返回Bootloader并再次跳转时,之前APP使用的局部变量、中断现场等信息仍保留在RAM中
当从APP返回Bootloader并再次跳转时,之前APP使用的局部变量、中断现场等信息仍保留在RAM中
必须在跳转前通过__set_MSP()函数显式设置APP的堆栈顶地址
利用IDE的调试功能观察跳转前后的寄存器状态,确认堆栈指针是否切换成功
利用IDE的调试功能观察跳转前后的寄存器状态,确认堆栈指针是否切换成功
在Bootloader中禁用看门狗定时器,防止因未及时喂狗导致意外复位影响调试。
直接调用函数指针跳转会不清理堆栈导致二次跳转失败
APP的向量表第一个字是初始堆栈地址,第二个字是复位中断处理函数入口。务必确保这两个值已由编译器正确生成并烧录到对应Flash位置
RTC与深度休眠是否可以协同工作呢
可能是堆栈指针未正确初始化。 Bootloader和APP的代码、数据或堆栈区域在内存中重叠,导致运行时冲突。 中断向量表未重映射? 可能是链接脚本配置错误导致的。 重映射中断向量表。 GD32A503 的 RAM 空间是共享的
页:
[1]