Exception ARM9预取中止异常可能是软件问题吗?

Exception ARM9预取中止异常可能是软件问题吗?,exception,embedded,arm,Exception,Embedded,Arm,所以我在我们的arm9系统上得到了一个“预回迁中止”异常。该系统没有MMU,因此是否存在软件问题?在我看来,所有寄存器都是正确的,从JTAG的角度来看,代码看起来是正确的(没有损坏) 现在我认为这是某种硬件问题(尽管我不想说,硬件到目前为止一直很好)。您到底遇到了什么异常 上次我遇到这种情况时,有一段时间我走错了路,因为我没有意识到ARM“预取中止”是指指令预取,而不是数据预取,我只是在玩数据预取指令。这仅仅意味着程序试图跳转到一个不存在的内存位置。(实际的问题是我在引导加载程序中将“go 81

所以我在我们的arm9系统上得到了一个“预回迁中止”异常。该系统没有MMU,因此是否存在软件问题?在我看来,所有寄存器都是正确的,从JTAG的角度来看,代码看起来是正确的(没有损坏)


现在我认为这是某种硬件问题(尽管我不想说,硬件到目前为止一直很好)。

您到底遇到了什么异常

上次我遇到这种情况时,有一段时间我走错了路,因为我没有意识到ARM“预取中止”是指指令预取,而不是数据预取,我只是在玩数据预取指令。这仅仅意味着程序试图跳转到一个不存在的内存位置。(实际的问题是我在引导加载程序中将“go 81000000”误输入为“go 81000”。)

另见:

  • (关于调试数据中止的KB条目)
  • (ARM例外情况列表)

预取中止触发的地址是什么。这可能是因为程序计数器(PC或R15)被设置为在微控制器上无效的地址(即使您没有使用MMU,也可能发生这种情况-微控制器的地址空间中可能有“孔”,将触发预取中止)。如果您试图预取一个地址,但地址对齐不正确,也可能发生这种情况,但我认为这取决于微控制器的实现(ARM将该行为列为“可预测”)

CPU实际上是否处于中止模式?如果它正在执行预回迁处理程序,但未处于中止模式,则意味着某些代码正在通过预回迁中止向量进行分支,通常是通过地址0x0000000c,但控制器通常允许重新映射向量地址