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 に答える