arm - 在向量区执行时,Cortex-m0 pop 指令失败?
问题描述
从 Cortex-M0 上的向量区域(即地址 0xC0 以下)执行该指令会失败但在更高的 FLASH 中正常工作时,是否有一些官方原因?
pop {r4,pc}
当这段代码从低于 0xC0 的地址执行时,PC 实际上并没有从堆栈中弹出,而是继续执行 'pop' 之后的下一条指令(这是垃圾)。
解决方案
听起来您正试图从异常处理程序返回,或者从异常处理程序中更改程序计数器。将pop
值加载到 pc 的bx
指令,或将导致处理器从异常中返回的指令,但是,它不会返回到您弹出到 pc 中的地址,而是会展开堆栈并返回到该位置这是在异常进入期间推送的。这在M0 用户指南 - 异常进入和返回中有更详细的说明。
如果你想从异常中返回到不同的位置,你可以修改被推送的堆栈帧,用你想要的位置覆盖被推送的 pc。
推荐阅读
- scala - S3AbortableInputStream:并非所有字节都从 S3ObjectInputStream 中读取
- r - 使用两个列表中的公共信息创建矩阵
- python - 根据条件替换熊猫数据框列中的数据,如果条件不满足则跳过
- python-3.x - 如何在 google colab 中下载 .CSV 中列出的所有 URL 图片内容?
- quarkus - Quarkus 入门项目无法生成原生镜像
- python - 处理缺失值(条件插补) Pandas
- html - 如何使图片正常缩放?
- r - 使用向量的值作为 flexdashboards 的输入
- python - 正则表达式提取与给定模式中的位置匹配的子字符串
- javascript - 如何使用javascript读取目录中的最新文件?