我正在ARM Cortex A9 Pandaboard上构建一个裸机应用程序,我经常使用指令获取中止。当我转储IFSR寄存器时,我得到了0x1008。我已经阅读了参考手册,我知道1008是同步外部中止。问题是同步外部中止意味着什么,它来自何处?谢谢你的帮助。
答案 0 :(得分:9)
ARMv7 ARM部分" VMSA内存中止"尽可能彻底地涵盖这一点(假设它是架构的权威定义),但总结的内容略少于14页;
中止表示CPU尝试进行内存访问,无论出于何种原因,都无法完成,因此会引发异常。
外部中止是处理器外部的一个,即总线上的内容。换句话说,MMU中的访问没有故障,走到总线上,某个设备或互连本身都回来了,说'嘿,我无法解决这个问题&#34 34。
同步外部中止意味着您相当幸运,因为它不会完全无法调试 - 在预取中止的情况下,它意味着IFAR
将包含故障指令的有效VA,因此您确切知道导致它的原因。令人不快的替代方案是异步外部中止,这只不过是一个中断说&,嘿,你刚才做的事情并没有真正发挥作用。不,我也不知道是什么。"
所以,你试图从你认为是记忆的东西中执行指令,但不是。没有任何进一步的细节,实际原因可能是从错误的硬编码地址到狡猾的页面表,陈旧的TLB条目,缓存一致性等等。