【问题标题】:Synchronous External Abort on ARMARM 上的同步外部中止
【发布时间】:2015-02-14 21:42:54
【问题描述】:

我在 ARM Cortex A9 Pandaboard 上构建了一个裸机应用程序,我经常遇到指令获取中止。当我转储 IFSR 寄存器时,我得到了 0x1008。我已阅读参考手册,并且了解 1008 是同步外部中止。问题是同步外部中止是什么意思,它从何而来?感谢您的帮助。

【问题讨论】:

    标签: exception arm abort


    【解决方案1】:

    ARMv7 ARM 部分“VMSA 内存中止”完全涵盖了这一点(鉴于它是架构的权威定义),但总之不到 14 页;

    abort 表示 CPU 尝试进行内存访问,无论出于何种原因,该访问都无法完成,因此引发了异常。

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

    同步外部中止意味着你很幸运,因为调试起来不会非常可怕 - 在预取中止的情况下,这意味着 IFAR 将包含错误指令的有效 VA,因此您确切知道是什么原因造成的。令人不快的替代方案是 异步 外部中止,这只不过是一个中断,说“嘿,你前一段时间所做的事情实际上并没有工作。不,我也不知道是什么。”

    所以,您正在尝试从您认为是记忆但不是记忆的东西中执行指令。如果没有任何进一步的细节,实际原因可能是拼写错误的硬编码地址、狡猾的页表、陈旧的 TLB 条目、缓存一致性等。

    【讨论】:

    • 非常感谢您的回答。我清楚地了解了我的问题。但是在几分钟前,我尝试插入一个用于刷新缓存的函数,而那些中止从未发生过。缓存有问题吗?我在我的转换表中使用共享普通内存属性来使用缓存。
    • 您是否在相关的TTBRn 中设置了正确的属性以实现连贯的桌游?请记住,表条目中的属性本身只影响由 MMU 转换的 CPU 访问 - MMU 表遍历器是一个单独的接口。
    • 我为我的 32 位 ARM 板使用短描述符格式。我已经通过 CP15 访问在 TTBR0 寄存器中设置了 Shareable 位。但是当我尝试设置 L1 预取位和内部缓存(IRGN)属性时,我得到了一个奇怪的行为。我无法设置这两个位,而我的 TTBR0 始终只设置了可共享位。我错过了什么重要的事情吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2018-09-06
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多