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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在向量区域执行时,Cortex-m0弹出指令失败?相关的知识,希望对你有一定的参考价值。

从Cortex-M0上的向量区域(即低于地址0xC0)执行此指令时,是否存在某些官方原因,但在更高的FLASH中正常工作?

pop {r4,pc}

当从低于0xC0的地址执行此代码时,PC实际上不会从堆栈中弹出,并且在“pop”(垃圾)之后执行下一条指令。

答案

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

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

另一答案

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

谢谢大家的帮助。

以上是关于在向量区域执行时,Cortex-m0弹出指令失败?的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 IAR 使用所需的 Cortex-M0+ 指令(此功能将禁用优化。)

Cortex-M0指令集——EOR

Cortex-M0指令集——二进制编码

组装 THUMB 指令以在 Cortex-M3 上执行

Cortex-M0简介

Cortex-M0指令集——CMN