2012/07/28

[arm]Imprecise data bus errorとは何者じゃ

TOPPERS/ASP+FM3基板で遊んでいるが、Hard Faultが発生している。
「Hard Faultかぁ」で止まっていたのだが、レジスタの値を見るともう少し調べることができるそうだ。

 

Fault系のステータスレジスタってものがある。
HFSR(E000_ED2C), MMFSR(MMSR? E000_ED28), BFSR(E000_ED29), UFSR(E000_ED2A)らしい。
MMSR, BFSR, UFSRは、レジスタとしてはCFSRの一部になるのかな?

HardFaultは、HFSR。
見ると、0x4000_0000で、FORCED=1だった。
説明を見ると「他のステータスレジスタをみなされ」だそうだ。なんじゃそりゃ。

仕方なく他のステータスレジスタを見ると、BFSRが0x04だった。
これは、IMPRECISERR=1。

Imprecise data bus errorらしい。


このビットが立ったときには、データバスエラーが起きている。
なおかつ、BFARレジスタにはfaultしたアドレスは残さない、となっている。
残す方のエラーは、PRECISERRのようだ。

IMPRECISERRは非同期で発生するらしく、エラーになった箇所が問題だとは限らないらしい。
プロセッサ側で優先度の高い作業をしていたら、それが終わってからエラーになるんだと。
優先度が高い側ではっきりした?エラーが発生したら、そっちの要因もビットが立つんだとか(このページのIMPRECISERR説明より)。

 

うーん、それは困った。。。


データバスエラーというのは、データバスに対してアクセスしようとしてエラーになることのような印象を受けた。

  • アドレス不正
  • アラインメント不正

どっちかじゃなかろうか。

 

そう思ったけど、関数は何回か呼ばれていて問題ないし、変なポインタキャストもしてなさそうだし、なんだかわからないなぁ。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。