【发布时间】:2009-08-31 22:53:02
【问题描述】:
所以我在我们的 arm9 系统上遇到了“预取中止”异常。这个系统没有 MMU,所以这可能是软件问题吗?所有的寄存器对我来说都是正确的,从 JTAG 的角度来看,代码看起来是正确的(没有损坏)。
现在我认为这是某种硬件问题(虽然我不想这么说 - 硬件一直都很好)。
【问题讨论】:
所以我在我们的 arm9 系统上遇到了“预取中止”异常。这个系统没有 MMU,所以这可能是软件问题吗?所有的寄存器对我来说都是正确的,从 JTAG 的角度来看,代码看起来是正确的(没有损坏)。
现在我认为这是某种硬件问题(虽然我不想这么说 - 硬件一直都很好)。
【问题讨论】:
您遇到的具体异常是什么?
上次这种情况发生在我身上时,我有一段时间误入歧途,因为我没有意识到 ARM 的“预取中止”意味着指令预取,而不是数据预取,而且我只是在玩数据预取指示。它只是意味着程序试图跳转到一个不存在的内存位置。 (实际问题是我在引导加载程序中将“go 81000000”错误地输入为“go 81000”。)
另见:
【讨论】:
预取中止触发的地址是什么。这可能是因为程序计数器(PC 或 R15)被设置为在您的微控制器上无效的地址(即使您没有使用 MMU,也可能发生这种情况 - 微控制器的地址空间可能有“漏洞”它将触发预取中止)。如果您尝试预取不正确对齐的地址,也可能发生这种情况,但我认为这取决于微控制器的实现(ARM ARM 将行为列为“UPREDICTABLE”)。
CPU 是否真的处于 Abort 模式?如果它正在执行预取处理程序但未处于中止模式,则意味着某些代码正在通过预取中止向量分支,通常通过地址 0x0000000c,但控制器通常允许重新映射向量地址。
【讨论】: