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

问题描述 投票:1回答:2

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

pop {r4,pc}

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

arm cortex-m
2个回答
2
投票

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

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


0
投票

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

谢谢大家的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.