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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。