首页 > 解决方案 > 在向量区执行时,Cortex-m0 pop 指令失败?

问题描述

从 Cortex-M0 上的向量区域(即地址 0xC0 以下)执行该指令会失败但在更高的 FLASH 中正常工作时,是否有一些官方原因?

pop {r4,pc}

当这段代码从低于 0xC0 的地址执行时,PC 实际上并没有从堆栈中弹出,而是继续执行 'pop' 之后的下一条指令(这是垃圾)。

标签: armcortex-m

解决方案


听起来您正试图从异常处理程序返回,或者从异常处理程序中更改程序计数器。将pop值加载到 pc 的bx指令,或将导致处理器从异常中返回的指令,但是,它不会返回到您弹出到 pc 中的地址,而是会展开堆栈并返回到该位置这是在异常进入期间推送的。这在M0 用户指南 - 异常进入和返回中有更详细的说明。

如果你想从异常中返回到不同的位置,你可以修改被推送的堆栈帧,用你想要的位置覆盖被推送的 pc。


推荐阅读