SH3(SH7709S)のCPU例外発生時に、例外発生場所の特定の方法を教えてください。

・現在、SH3(SH7709S)を使ったシステムで、数か月に1回、不定期にCPUの例外処理が発生しています。

例外が発生した場合 spc等の情報をログに残すようにしています。その情報をもとに

原因や例外の発生場所を探しているのですが、メモリダンプして下記SPCのアドレスを検索しても

ヒットしません。(メモリマップ上に存在しないアドレスのため)

・このあと、どのように調査や対策をしたらよいのか途方に暮れている状況です。

どなたか少しでも参考になる方法がありましたら教えて下さい。

(例外は工場現場でしか発生しないため、デバッガを接続して調査することができません)

(メモリマップ)

ROM(FMEM)   0000_0000~0007_FFFF

SRAM     0C00_0000~0C0F_FFFF

(例外事例)

spc=3A5D3869,ssr=0100,evnt=00E0 (命令アドレスエラー)

spc=07070707,ssr=0101,evnt=00E0(命令アドレスエラー)

spc=06060870,ssr=0100,evnt=0180(一般不当命令)

(参考)

ソースコードの解析ではスタックや配列のオーバーフローが起きそうな箇所は見つかりませんでした。

各種測定器でノイズを測るとほかの正常なシステムと同等レベルでした。

他に必要な情報がありましたらご連絡ください。

Parents
  • あと、ベクタベースレジスタにおかしな値を設定してしまったりベクタテーブルの内容が壊れた状態で割り込みを受け付けてしまうと思わぬ箇所への分岐となってしまう可能性があり、その場合は関数の実行ログも意味をなさなくなるので例外発生時にはベクタベースレジスタの値やベクタテーブルの内容はチェックされた方が良いですね。

Reply
  • あと、ベクタベースレジスタにおかしな値を設定してしまったりベクタテーブルの内容が壊れた状態で割り込みを受け付けてしまうと思わぬ箇所への分岐となってしまう可能性があり、その場合は関数の実行ログも意味をなさなくなるので例外発生時にはベクタベースレジスタの値やベクタテーブルの内容はチェックされた方が良いですね。

Children
No Data