2009-08-31 57 views
3

私はarm9システムで "プリフェッチアボート"例外を取得しています。このシステムはMMUを持っていないので、とにかくこれはソフトウェアの問題かもしれませんか?すべてのレジスタが正しいと思われ、コードはJTAGの観点から見て正しい(壊れていない)ように見えます。ARM9のプリフェッチで例外がソフトウェアの問題である可能性がありますか?

今、私はこれがハードウェアの問題だと思っています(私はそれを言うのは嫌ですが、ハードウェアは今までは問題ありませんでした)。

答えて

5

例外はありますか?

私が前回ARMの「プリフェッチアボート」がデータプリフェッチではなく命令プリフェッチを意味していたことを認識していなかったため、プリフェッチ命令。単に、プログラムが存在しないメモリ位置にジャンプしようとしたことを意味します。 (実際の問​​題は、ブートローダに "81000に行く" と、私は "8100万を行く" タイプミスのだということでした。)

も参照してください:

3

プリフェッチアボートがトリガしているアドレスは何ですか?これは、プログラムカウンタ(PCまたはR15)がマイコンで有効でないアドレスに設定されているために発生します(これは、MMUを使用していなくても発生する可能性があります - マイクロコントローラのアドレス空間には 'それはプリフェッチ中止を引き起こすでしょう)。不適切に配置されたアドレスをプリフェッチしようとすると発生する可能性もありますが、これはマイクロコントローラの実装に依存していると思います(ARM ARMはその動作を 'UPREDICTABLE'としてリストしています)。

CPUは実際にはアボートモードですか?プリフェッチハンドラを実行しているが、アボートモードではないコードは、プリフェッチアボートベクタを通って分岐していることを意味します。通常、アドレス0x0000000cを使用しますが、コントローラはしばしばベクタアドレスの再マッピングを許可します。

関連する問題