exception - ARM 上的同步外部中止

标签 exception arm abort

我在 ARM Cortex A9 Pandaboard 上构建了一个裸机应用程序,我经常遇到指令获取中止。当我转储 IFSR 寄存器时,我得到了 0x1008。我已经阅读了引用手册,我知道 1008 是同步外部中止。问题是同步外部中止是什么意思,它来自哪里?谢谢你的帮助。

最佳答案

ARMv7 ARM “VMSA 内存中止”一节像人们所期望的那样彻底地涵盖了这一点(鉴于它是架构的权威定义),但总结起来不到 14 页;

中止 意味着 CPU 试图进行内存访问,无论出于何种原因,都无法完成,因此引发异常。

外部 abort 是来自处理器外部的一个,即总线上的某个东西。换句话说,访问在 MMU 中没有故障,进入总线,然后某个设备或互连本身返回并说“嘿,我无法处理这个”。

A 同步 外部中止意味着你很幸运,因为调试起来不会很糟糕——在预取中止的情况下,它意味着 IFAR将包含错误指令的有效 VA,因此您确切地知道是什么导致了它。令人不快的替代方法是异步外部中止,这只不过是一个中断,说“嘿,你前一段时间做的事情实际上没有奏效。不,我也不知道是什么。”

因此,您试图从您认为是内存但实际上不是的东西中执行指令。没有任何进一步的细节,实际原因可能是任何东西,从打字的硬编码地址到狡猾的页表、陈旧的 TLB 条目、缓存一致性等。

关于exception - ARM 上的同步外部中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27507013/

相关文章:

c++ - 返回真还是返回假?魔法

ios - 在 iOS x64 中获取可变参数函数的参数

node.js - 退出模块,但不退出整个 NodeJS 进程

c# - 完成后我应该如何处理线程?离开它还是中止它?

c# - ThreadAbortException 最后能跳过吗?

assembly - ARM 汇编代码和 SVC 编号

android - 为什么我经常收到 ActivityNotFound 异常?

vb.net - MQQueueManager 构造函数抛出 FileNotFoundException

java - 在可完成的 future 之内/之后抛出异常

java - Aspectj(使用 spring)- 在没有传播方法的情况下仅在抛出方法上记录一次异常抛出