从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存储。
谢谢大家的帮助。