[技术问答] 【M2L31】为什么多程序跳转后还在执行原来的程序?

[复制链接]
880|37
spicy 发表于 2025-11-13 16:23 | 显示全部楼层 |阅读模式
为什么多程序跳转后还在执行原来的程序?
樱花树维纳斯 发表于 2025-11-17 15:24 | 显示全部楼层
M2L31 多程序跳转后仍执行原程序,可能因跳转地址错误(如未指向正确入口)、栈配置不当导致返回地址异常,或程序未禁用中断引发冲突。也可能是跳转前未正确初始化目标程序环境(如时钟、外设状态),导致实际未进入新程序,需检查跳转指令及内存映射。
世纪女孩 发表于 2025-11-18 15:43 | 显示全部楼层
M2L31 多程序跳转后仍执行原程序,可能因跳转地址错误(未指向新程序入口)、中断向量表未重映射(新程序中断仍指向原地址)、Flash 分区冲突(程序区重叠被覆盖),或跳转前未关闭中断 / 清除缓存导致异常。需检查地址配置、向量表映射及内存保护设置。
世纪女孩 发表于 2025-11-18 15:43 | 显示全部楼层
M2L31 多程序跳转后仍执行原程序,可能因跳转地址错误(未指向新程序入口)、中断向量表未重映射(新程序中断仍指向原地址)、Flash 分区冲突(程序区重叠被覆盖),或跳转前未关闭中断 / 清除缓存导致异常。需检查地址配置、向量表映射及内存保护设置。
heisexingqisi 发表于 2026-2-6 17:29 | 显示全部楼层
不同的 “程序跳转” 场景,导致 “仍执行原程序” 的原因不同
i1mcu 发表于 2026-2-7 21:27 | 显示全部楼层
是否真的“跳转”了?              
jiekou001 发表于 2026-2-8 17:25 | 显示全部楼层
这种现象本质上是程序的流程控制没有被正确中断或重定向
primojones 发表于 2026-2-8 21:24 | 显示全部楼层
观察关键寄存器和全局变量的值变化。
febgxu 发表于 2026-2-9 15:34 | 显示全部楼层
没有正确关闭中断或清理标志位              
deliahouse887 发表于 2026-2-10 11:01 | 显示全部楼层
如果跳转的目标地址写错了,单片机会继续执行后续的指令,看起来像是“还在执行原来的程序”。
wwppd 发表于 2026-2-10 11:34 | 显示全部楼层
核心是逻辑错误,而不是单片机真的“卡”在旧程序里。
mickit 发表于 2026-2-10 13:05 | 显示全部楼层
优化中断优先级设置,避免关键跳转逻辑被中断打断;在ISR中禁用不必要的中断。
夏眠毁灭者 发表于 2026-2-11 11:24 | 显示全部楼层
M2L31 多程序跳转后仍执行原程序,核心原因是程序跳转未正确更新 PC 指针:可能是跳转指令(如 BL/BLX)使用错误、栈地址配置异常导致返回地址错乱,或中断向量表未重映射、RAM/Flash 地址冲突,也可能是跳转后未清中断标志引发异常返回,导致程序流程未真正切换。
总结
核心问题是程序计数器(PC)未被正确更新,跳转指令未生效;
常见诱因包括指令错误、栈配置异常、地址冲突或中断标志未清除。
mikewalpole 发表于 2026-2-11 19:41 | 显示全部楼层
死循环结构限制              
yeates333 发表于 2026-2-12 16:06 | 显示全部楼层
处理完中断后可能回不到新程序,或者导致新程序的时序被打乱。
ulystronglll 发表于 2026-2-12 19:35 | 显示全部楼层
用调试器或仿真器单步跟踪,观察 PC实际走向。
earlmax 发表于 2026-2-14 11:30 | 显示全部楼层
先注释掉所有中断服务程序,看看现象是否消失。如果消失了,问题就在中断。
hudi008 发表于 2026-2-14 11:52 | 显示全部楼层
高优先级中断频繁触发,可能打断低优先级中断的返回流程,导致逻辑混乱。
jtracy3 发表于 2026-2-14 12:36 | 显示全部楼层
单片机使用中断向量表来确定中断处理函数的地址。
cashrwood 发表于 2026-2-14 13:30 | 显示全部楼层
验证目标地址是否有有效代码              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

120

主题

1140

帖子

0

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