所以我在我们的arm9系统上得到了一个“预取中止”异常。这个系统没有MMU,那么这可能是一个软件问题吗?在我看来,所有的寄存器都是正确的,并且从JTAG的角度来看,代码看起来是正确的(没有损坏)。
现在我认为这是某种硬件问题(尽管我不想这么说--直到现在硬件都是完好无损的)。
发布于 2009-08-31 22:57:32
你得到的异常到底是什么?
上一次发生在我身上时,我走错了一段时间,因为我没有意识到ARM“预取中止”意味着指令预取,而不是数据预取,而我只是在玩数据预取指令。这仅仅意味着程序试图跳转到一个不存在的内存位置。(实际问题是我在引导加载程序中将"go 81000000“错误地键入为"go 81000”。)
另请参阅:
上的KB条目
发布于 2009-08-31 23:06:20
预取中止触发的地址是什么?这可能是因为程序计数器(PC或R15)设置的地址在您的微控制器上无效(即使您没有使用内存管理单元,也可能发生这种情况-微控制器的地址空间中可能有“漏洞”,这将触发预取中止)。如果您试图预取一个不正确对齐的地址,也可能会发生这种情况,但我认为这取决于微控制器的实现( ARM将该行为列为'UPREDICTABLE')。
CPU是否真的处于中止模式?如果它正在执行预取处理程序,但不处于中止模式,这意味着一些代码正在通过预取中止向量进行分支,通常是通过地址0x0000000c,但控制器通常允许重新映射向量地址。
https://stackoverflow.com/questions/1359767
复制相似问题