【发布时间】:2015-02-14 21:42:54
【问题描述】:
我在 ARM Cortex A9 Pandaboard 上构建了一个裸机应用程序,我经常遇到指令获取中止。当我转储 IFSR 寄存器时,我得到了 0x1008。我已阅读参考手册,并且了解 1008 是同步外部中止。问题是同步外部中止是什么意思,它从何而来?感谢您的帮助。
【问题讨论】:
我在 ARM Cortex A9 Pandaboard 上构建了一个裸机应用程序,我经常遇到指令获取中止。当我转储 IFSR 寄存器时,我得到了 0x1008。我已阅读参考手册,并且了解 1008 是同步外部中止。问题是同步外部中止是什么意思,它从何而来?感谢您的帮助。
【问题讨论】:
ARMv7 ARM 部分“VMSA 内存中止”完全涵盖了这一点(鉴于它是架构的权威定义),但总之不到 14 页;
abort 表示 CPU 尝试进行内存访问,无论出于何种原因,该访问都无法完成,因此引发了异常。
external 中止是来自处理器的外部,即总线上的某个东西。换句话说,MMU 中的访问没有故障,而是转到总线上,然后某个设备或互连本身返回并说“嘿,我无法处理这个”。
同步外部中止意味着你很幸运,因为调试起来不会非常可怕 - 在预取中止的情况下,这意味着 IFAR 将包含错误指令的有效 VA,因此您确切知道是什么原因造成的。令人不快的替代方案是 异步 外部中止,这只不过是一个中断,说“嘿,你前一段时间所做的事情实际上并没有工作。不,我也不知道是什么。”
所以,您正在尝试从您认为是记忆但不是记忆的东西中执行指令。如果没有任何进一步的细节,实际原因可能是拼写错误的硬编码地址、狡猾的页表、陈旧的 TLB 条目、缓存一致性等。
【讨论】:
TTBRn 中设置了正确的属性以实现连贯的桌游?请记住,表条目中的属性本身只影响由 MMU 转换的 CPU 访问 - MMU 表遍历器是一个单独的接口。