在向量区域中执行时,Cortex-m0 pop指令失败?

时间:2018-09-04 21:46:41

标签: arm cortex-m

从Cortex-M0的向量区域(即,地址0xC0以下)执行该指令但在较高的FLASH中正确运行时,是否有某种正式原因导致该指令失败?

pop {r4,pc}

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

2 个答案:

答案 0 :(得分:2)

听起来您正在尝试从异常处理程序中返回,或从异常处理程序中更改程序计数器。 一条pop指令将值加载到pc上,或者一条bx指令将导致处理器从异常中返回,但是,它不会返回到您弹出到pc中的地址,而是它将展开堆栈并返回到异常输入期间被压入的位置。 M0 User guide - exception entry and return中对此进行了详细说明。

如果要从异常中返回其他位置,则可以修改已推送的堆栈框架,并用所需的位置覆盖已推送的pc。

答案 1 :(得分:0)

问题已解决...这是特定于供应商的问题。此SoC在地址<256处的FLASH空间受到保护且是“虚拟的”-它用作异常向量,但对于代码执行或常规FLASH存储,它不能正常运行(通过设计)。

非常感谢您的帮助。