我在运行嵌入式系统、没有协处理器、没有 MMU、Atmel 9263 时遇到未定义指令错误。嵌入式系统的内存范围为 0x20000000 - 0x23FFFFFF。到目前为止,我有两个案例:
SP 0x0030B840,LR 2000AE78 - LR 指向有效代码,所以我不确定是什么导致了异常,尽管 SP 是假的。我应该查看哪些其他地址、寄存器、内存位置?
SP 0x20D384A8,LR 0x1FFCA59C - SP 正常,LR 是假的。有没有什么我可以做的事后检查来找出LR是如何被压碎的?看起来它从地址空间的末尾向后滚动,但我不知道如何。
现在我只是用模拟替换大块代码并再次运行测试以尝试隔离问题 - 问题是有时需要 4 小时才能显示问题。
任何提示将不胜感激,谢谢!
芯片是 AT91SAM9263,我们使用的是 IAR EWARM 工具链。我很确定它是直接的 ARM,但我会检查一下。
编辑
Undef Instruct 的另一个例子——这次 SP/LR 看起来不错。LR = 0x2000b0c4,当我在附近拆卸时:
2000b0bc e5922000 LDR R2,[R2,#+0]
2000b0c0 e12fff32 BLX R2
2000b0c4 e1b00004 MOVS R0,R4
由于 LR 是 Undef 异常之后的指令 - BLX 如何识别为未定义?注意CPSR是0x00000013,所以这都是ARM模式。但是,R2 是堆区域中的 0x226d2a08,我认为是不正确的 - 分解存在 ANDEQ R0、R0、R12,指令是 0x0000000C,而那里的其他指令对我来说看起来像数据。所以我认为糟糕的R2是问题所在,我只是想了解为什么BLX的Undef?
谢谢!