试图了解看门狗的原因。汇编程序的片段如下:
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。这是什么意思?我该如何解读? 如果需要更多信息,请告诉我。
答案 0 :(得分:2)
如果它是一个触发的看门狗,那似乎表明处理器已挂起。在最糟糕的情况下,您捕获的状态可能已损坏。不确定你是如何得到“转储”的,所以很难说。
通常在ARM上,奇数地址表示想要切换到Thumb指令集的跳转。
例如参见this documentation of the BX
(branch exchange) instruction:
BX指令分支到指定寄存器中包含的地址。分支地址的位0的值确定执行是继续处于ARM状态还是Thumb状态。
地址的第0位可以这种方式使用,因为:
所有ARM指令都是字对齐的。这意味着忽略任何ARM指令地址的第0位和第1位,因为这些位指的是地址的半字和字节部分。
所有Thumb指令都是半字对齐的。这意味着忽略任何Thumb指令地址的第0位,因为它指的是地址的字节部分。
但是,我很确定上面的含义暗示PC实际上从未设置到奇数地址,而第0位被分支指令清除。