2016-07-18 3 views
2

私はARM MMUをセットアップするコードを作成していました。私は高速モデルを使用しています。 VTTBRレジスタにいくつかのダミー値を入れて、データを中止しました。 私はこのポストHow to handle this Data Abort exception in ARM 7? mode in CPSR 0x17 and board stucked at 0x10を見て、私はリンクレジスタを見ようとしました。 そこから、この命令で中止が起こったことがわかりました:MOVT r3,#0x8400ARM v7でデータのタイプを見つける方法は?

しかし、これ前にはすでに移動がMOV r3,#0x9240のように起こっています。私は第2の動きで何がうまくいかなかったのか、かなり困惑しています。私は可能な4つのタイプの中で起こったどのタイプのデータアボートが正確に知りたいのですか(1.アラインメントフォールト2.トランスレーションフォールト3.ドメインフォールト4.permission faults)。

私のコードは、私がMOVTは、下ハーフワードに影響を与えることなく、上位(トップ)ハーフワードの中の値を動くことを知っているこの

840000A4 : MOV r3,#0x9240 
840000A8 : MOVT r3,#0x8400 

のようになります。

私のLRには、840000A8が含まれています。

+0

アームのドキュメントを読んで、どのコプロセッサーのcsrsにどのようなステータスが含まれているかを伝えます。 –

答えて

3

実際にこれに答えるには、the ARMv7-A Architecture Reference Manualのダース以上のページを再生する必要がありますので、何を調査するかを示す一連の標識を検討してください。 ARMv7-Aのシステムレベルプログラミングは、適切なリファレンスマテリアルがなければ痛いでしょう。アーキテクチャバージョンとはるかに古くてシンプルなARM7コア(ARMv4アーキテクチャ)と混同している場合は特にそうです。

FSRの内容はDFSRmrc p15, 0, <Rt>, c5, c0, 0)です。スズについては、データフォルトのステータスがわかります(命令フォルトには別のIFSRがあります)。アボートが同期していた場合は、DFAR(mrc p15, 0, <Rt>, c6, c0, 0)も障害のあるアドレスを通知します。

はさらに、データアボートのためのリンクレジスタ*値は障害命令の8 bytes aheadである(通常のPCの動作とは異なり、それは関係なく、命令セットの常に 8バイトである、ことをノートが)、もしそうであればあなたのLRには0x840000a8が含まれています。あなたは0x840000a0を目撃する必要があります。

* Hypモードは例外的に、魚の異なるケトルであるため、私たちはHypモードを例外とみなしているとします。

関連する問題