Exception ARM未定义指令错误

Exception ARM未定义指令错误,exception,debugging,arm,Exception,Debugging,Arm,我在运行嵌入式系统时遇到一个未定义的指令错误,没有协处理器,没有MMU,Atmel 9263。嵌入式系统的内存范围为0x20000000-0x23FFFFFF。到目前为止,我有两个案例: SP 0x0030B840,LR 2000AE78-LR指向有效代码,因此我不确定是什么导致异常,尽管SP是假的。我应该查看哪些其他地址、寄存器和内存位置 SP 0x20D384A8,LR 0x1FFCA59C-SP正常,LR为假。我能做些验尸来找出LR是怎么被压死的吗?看起来它从地址空间的末尾向后滚动,但我不

我在运行嵌入式系统时遇到一个未定义的指令错误,没有协处理器,没有MMU,Atmel 9263。嵌入式系统的内存范围为0x20000000-0x23FFFFFF。到目前为止,我有两个案例:

  • SP 0x0030B840,LR 2000AE78-LR指向有效代码,因此我不确定是什么导致异常,尽管SP是假的。我应该查看哪些其他地址、寄存器和内存位置

  • SP 0x20D384A8,LR 0x1FFCA59C-SP正常,LR为假。我能做些验尸来找出LR是怎么被压死的吗?看起来它从地址空间的末尾向后滚动,但我不知道如何

  • 现在,我只是用模拟替换大块代码,并再次运行测试来尝试隔离问题——问题是,有时需要4个小时才能显示问题

    任何提示都将不胜感激,谢谢

    芯片是AT91SAM9263,我们使用的是IAR EWARM工具链。我很确定它是直臂的,但我会检查一下

    编辑

    Undef指令的另一个示例—这次SP/LR看起来不错。LR=0x2000b0c4,当我在附近拆卸时:

    2000b0bc E5922000LDR R2,[R2,#+0]
    2000b0c0 E12FF32 BLX R2
    2000b0c4 e1b00004 MOVS R0、R4

    既然LR是Undef异常之后的指令,那么BLX如何被标识为Undefined?请注意,CPSR是0x00000013,因此这是全ARM模式。但是,R2是0x226d2a08,它位于堆区域,我认为这是不正确的-分解是ANDEQ R0,R0,R12,指令是0x0000000C,其他指令在我看来像数据。所以我认为问题出在坏R2上,我只是想弄明白为什么在BLX上出现了Undef


    谢谢

    检查CPSR中的T位。如果您无意中从ARM模式更改为Thumb模式(反之亦然),则会出现未定义的指令

    就SP或LR损坏而言,可能是您以错误的模式执行了一些指令,这些指令在命中未定义的指令之前损坏了SP或LR

    编辑

    在编辑问题时响应新的错误案例:

    LR包含来自BLX R2的返回地址,因此它指向BLX后面的一条指令是有意义的

    如果在执行BLXR2时R2指向堆,那么您将跳入堆并开始执行数据,就像它们是指令一样。这将在短时间内导致未定义的指令异常

    如果要查看未定义的确切指令,请查看R14_und寄存器(在未定义指令处理程序中定义)-它包含未定义指令后的下一条指令的地址


    根本原因是R2中的错误值。假设这是C代码,我猜是错误的指针解引用,但我需要查看源代码才能确定。

    这是未定义的指令还是数据中止,因为您正在从未对齐的地址读取

    编辑:


    在未定义的异常情况下,CPSR[4:0]应为0b11011或0x1B而不是0x13,0x13是根据arm进行的重置。

    1。)您能告诉我们整个评估套件/SoC的名称吗?你说的是9263,所以我假设阿特梅尔是91SAM9263。2.)是否针对正确的指令集版本?如果是上述芯片组,则将ARM9作为arch系列,将ARMv5作为指令集版本。调用arm gcc时,使用-mcpu=和-march=设置这些参数。3.)您是使用ARM和Thumb还是仅使用ARM?您能否发布一些数据/指令,包括r14地址(有问题的指令)。看起来您的问题不是未定义的指令,而是程序中的一些错误。错误导致R2中的错误值和之后的“未定义指令”。尝试跟踪R2指向的数据损坏的位置。通常它类似于越界数组写入。是的,第5位是T位,0表示ARM。