从Cortex-M0的向量区域(即,地址0xC0以下)执行该指令但在较高的FLASH中正确运行时,是否有某种正式原因导致该指令失败?
pop {r4,pc}
当从低于0xC0的地址执行此代码时,实际上并没有从堆栈中弹出PC,并且继续执行'pop'之后的下一条指令(这是垃圾)。
答案 0 :(得分:2)
听起来您正在尝试从异常处理程序中返回,或从异常处理程序中更改程序计数器。
一条pop
指令将值加载到pc上,或者一条bx
指令将导致处理器从异常中返回,但是,它不会返回到您弹出到pc中的地址,而是它将展开堆栈并返回到异常输入期间被压入的位置。 M0 User guide - exception entry and return中对此进行了详细说明。
如果要从异常中返回其他位置,则可以修改已推送的堆栈框架,并用所需的位置覆盖已推送的pc。
答案 1 :(得分:0)
问题已解决...这是特定于供应商的问题。此SoC在地址<256处的FLASH空间受到保护且是“虚拟的”-它用作异常向量,但对于代码执行或常规FLASH存储,它不能正常运行(通过设计)。
非常感谢您的帮助。