メディア

フォールト(Fault)って何? 〜 種類と解析方法Q&Aで学ぶマイコン講座(44)(2/4 ページ)

» 2019年02月27日 11時00分 公開

フォールトとは?

 ユーザーが何らかの間違いを犯して、マイコンの仕様で許容されていない使い方を行った場合に、ハードウェア的に正常に動作できない状態に陥ります。この時、ハードウェアが実行する処理のことを「フォールト処理」と呼びます。マイコンによっては、「○○エラー」と呼ぶなど呼び方や処理内容も異なります。本記事では、Arm Cortex-M4プロセッサを例にとって解説を進めます。

 「フォールト処理」は、割り込み、リセット処理などと同じ例外処理です。図2はCortex-M4の例外ベクタテーブルです。アドレス0x0Cがハードフォールト、0x10がメモリ管理フォールト、0x14がバスフォールト、0x18が用法フォールトに割り当てられています。

図2:Arm Cortex-M3/M4の例外ベクタテーブル (クリックで拡大)

 フォールトが発生すると、PCはこれらのベクタアドレスに飛んで、例外処理を開始します。要因はフォールトステータスレジスタ(Fault Status Register:FSR)に反映されるので、各ハンドラの中で、FSRをチェックすると、フォールトの種類と詳細内容を判断できます。

 Cortex-M4の場合、FSRはSCB_HFSRレジスタ(0xE000 ED2C)(図3-a)とSCB_CFSRレジスタ(0xE000 ED28)(図3-b)です。それぞれのビットを確認することで、引き起こされたフォールトの種類と詳細内容を判別できます。

図3:Arm Cortex-M3/M4のFSR(フォールトステータスレジスタ) (クリックで拡大)

メモリ管理フォールト

 Cortex-M4を使用する場合、ユーザーはMPUを使ってメモリ領域の属性を定義します(一般的なマイコンやプロセッサではMMU(Memory Management Unit)で定義される)。その設定に違反するメモリアクセスや違法アクセスが発生した場合にメモリ管理フォールトが引き起こされます。また、特権モードと非特権モードでのアクセス権に違反した場合でも、メモリ管理フォールトは引き起こされます。発生要因を簡単にまとめると次のようになります。

  • MPU設定に定義されていないメモリ領域へのアクセス
    • 例えば、例外処理に入る際のスタッキングにてメモリのアクセス違反が発生した場合。具体的には、スタックポインタが破壊、またはスタックポインタが大きくなりすぎてMPUで定義されていない、または許可されていない領域に達した場合
    • 例外処理中にスタックポインタが破壊した場合
    • 例外処理中にMPUの設定が変更された場合
  • スタックされたPCが、MPUで設定された命令実行できない領域の場合
  • 読み出し専用領域への書き込みアクセス
  • 特権アクセスのみと定義された領域への非特権状態からのアクセス
  • 実行できない領域に分岐した場合
  • 無効な例外復帰コードを実行した場合
  • 例外ベクタテーブルの中に無効なアドレスを書き込んだ場合(例えば、ベクタテーブルが設定される前に、例外が発生した場合)

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.