所以我在arm9系统上遇到了“预取中止”异常。这个系统没有MMU,所以无论如何这可能是一个软件问题?所有的寄存器对我来说都是正确的,从JTAG的角度看代码看起来是正确的(没有损坏)。
现在我认为这是某种硬件问题(虽然我不想这么说 - 硬件一直很好,直到现在)。
答案 0 :(得分:5)
你得到的例外究竟是什么?
上次发生这种情况时,我上错了一段时间,因为我没有意识到ARM“预取中止”意味着指令预取,而不是数据预取,而我只是在玩数据预取说明。它只是意味着程序试图跳转到不存在的内存位置。 (实际的问题是我在引导程序中输入了“go 81000000”作为“go 81000”。)
另见:
答案 1 :(得分:3)
预取中止触发的地址是什么。可能是因为程序计数器(PC或R15)被设置为在您的微控制器上无效的地址(即使您没有使用MMU也会发生这种情况 - 微控制器的地址空间可能有“漏洞”)它将触发预取中止)。如果你试图预取一个不正确对齐的地址,也可能会发生这种情况,但我认为这取决于微控制器的实现(ARM ARM将行为列为'UPREDICTABLE')。
CPU实际处于中止模式吗?如果它正在执行预取处理程序但不处于中止模式,这意味着某些代码通过预取中止向量分支,通常通过地址0x0000000c,但控制器通常允许重新映射向量地址。