2016-07-07 6 views
0

私たちはucosでarm9を使用しています。 OS_CPU_ARM_ExceptHndlr_BrkTask一般的な移植関数の最後の計測器は、私たちのシステムでは異常な動作をしています。LDMFDはR13に奇妙な影響を与えます

Instrument: LDMFD SP!,{R0-R12,LR,PC}^ 

のは、SPが0x10002000であるとしましょう、と(R0-R12、LR、PCにコピーされます)以下の15件のDWORDは、我々はPC(R15)が変更された見つける1から15までの値を持っており、 15にジャンプしますが、SP(R13)は奇妙な値(スタックメモリ空間の外にあるアドレス)に変更されます。 0x1000203C(0x10002000 + 4 * 15)になると思いました。

なぜR13がこのように変更されたのですか?

+1

「SP」は「R13」です。 'R14'は' LR'です。 – Michael

+0

ありがとうございました。これは綴り間違いで、影響を受けたR13です。私はR13に変更の質問があります。 – shino

答えて

0

この命令は、他のレジスタと同様に、スタックからr14をロードします。 PCへの書き込みはジャンプを引き起こします。これは、リンクレジスタにリターンアドレスを設定する分岐およびリンクではありません。

さらに、この命令は実際には例外の戻り値です(^のため)。したがって、返信先のモードによっては、r14が銀行に預けられている可能性があります。したがって、例外が戻った後、メモリからロードされたものとは異なるr14が表示されることがあります。

+0

ありがとうございました。質問には綴り間違いがあり修正されています。 R13(SP)は、奇妙な動作をするレジスタです。 – shino

+0

@ shino、上記の答えが適用されます。スタックポインターはバンクされているので、例えば 'R13_irq'や' R13_usr'を見ているかどうかを理解する必要があります。 –

関連する問題