Exception ARM上的同步外部中止

Exception ARM上的同步外部中止,exception,arm,abort,Exception,Arm,Abort,我在ARM Cortex A9上构建一个裸机应用程序,我经常收到指令获取中止。当我转储IFSR寄存器时,我得到0x1008。我已经阅读了参考手册,我知道1008是同步外部中止。问题是同步外部中止意味着什么,它来自哪里?感谢您的帮助。一节“VMSA内存中止”将尽可能详细地介绍这一点(考虑到这是架构的权威定义),但仅用不到14页的篇幅进行总结 中止表示CPU试图进行内存访问,但由于任何原因无法完成,因此引发异常 外部中止是从外部到处理器的中止,即总线上的某个东西。换句话说,MMU中的访问没有故障,进

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

一节“VMSA内存中止”将尽可能详细地介绍这一点(考虑到这是架构的权威定义),但仅用不到14页的篇幅进行总结

中止表示CPU试图进行内存访问,但由于任何原因无法完成,因此引发异常

外部中止是从外部到处理器的中止,即总线上的某个东西。换句话说,MMU中的访问没有故障,进入总线,或者某个设备或互连本身返回并说“嘿,我不能处理这个”

同步外部中止意味着您相当幸运,因为调试并不十分可怕-在预取中止的情况下,这意味着
IFAR
将包含故障指令的有效VA,因此您确切地知道是什么导致了它。另一个令人不快的选择是异步外部中止,它只不过是一个中断,表示“嘿,你刚才做的事情实际上不起作用。不,我也不知道是什么。”


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

非常感谢您的回答。我对我的问题有了明确的认识。但几分钟前,我尝试插入一个函数来刷新缓存,但这些中止从未发生过。缓存有问题吗?我在翻译表中使用了共享的普通内存属性来使用缓存。您是否在相关的
TTBRn
中设置了正确的属性以进行一致的表遍历?记住,表条目中的属性本身只影响MMU转换的CPU访问-MMU表遍历器是一个单独的接口。我在32位ARM板上使用了短描述符格式。我已经通过CP15访问在TTBR0寄存器中设置了可共享位。但当我试图设置L1预取位和内部可缓存性(IRGN)属性时,我得到了一个奇怪的行为。我无法设置这两个位,而我的TTBR0总是只设置了可共享位。我错过什么重要的事了吗?