1

试图了解看门狗的原因。汇编程序片段如下:

fe813cf0:       2820            cmp     r0, #32
fe813cf2:       dbf0            blt.n   fe813cd6 <XYZ+0x10>
fe813cf4:       f04f 30ff       mov.w   r0, #4294967295 ; 0xffffffff
fe813cf8:       bd10            pop     {r4, pc}

我从转储中获得的 PC 值是 fe813cf3。这是什么意思?我应该如何解释它?如果需要更多信息,请告诉我。

4

1 回答 1

2

如果是看门狗触发,那似乎表明处理器已挂起。在最坏的情况下,您正在捕获的状态可能已损坏。不知道你是如何得到“转储”的,所以很难说。

通常在 ARM 上,奇数地址表示想要切换到Thumb指令集的跳转。

例如,请参阅(分支交换)指令的此文档BX

BX 指令跳转到指定寄存器中包含的地址。分支地址的第 0 位的值决定了在 ARM 状态还是 Thumb 状态下继续执行。

可以以这种方式使用地址的位 0,因为:

  • 所有 ARM 指令都是字对齐的。这意味着任何 ARM 指令地址的位 0 和 1 都将被忽略,因为这些位指的是地址的半字和字节部分。

  • 所有 Thumb 指令都是半字对齐的。这意味着任何 Thumb 指令的地址的位 0 都会被忽略,因为它指的是地址的字节部分。

但是,我很确定以上暗示 PC 从未真正设置为奇数地址,位 0 由分支指令清除。

于 2013-04-18T09:28:24.283 回答