ユーザーが何らかの間違いを犯して、マイコンの仕様で許容されていない使い方を行った場合に、ハードウェア的に正常に動作できない状態に陥ります。この時、ハードウェアが実行する処理のことを「フォールト処理」と呼びます。マイコンによっては、「○○エラー」と呼ぶなど呼び方や処理内容も異なります。本記事では、Arm Cortex-M4プロセッサを例にとって解説を進めます。
「フォールト処理」は、割り込み、リセット処理などと同じ例外処理です。図2はCortex-M4の例外ベクタテーブルです。アドレス0x0Cがハードフォールト、0x10がメモリ管理フォールト、0x14がバスフォールト、0x18が用法フォールトに割り当てられています。
フォールトが発生すると、PCはこれらのベクタアドレスに飛んで、例外処理を開始します。要因はフォールトステータスレジスタ(Fault Status Register:FSR)に反映されるので、各ハンドラの中で、FSRをチェックすると、フォールトの種類と詳細内容を判断できます。
Cortex-M4の場合、FSRはSCB_HFSRレジスタ(0xE000 ED2C)(図3-a)とSCB_CFSRレジスタ(0xE000 ED28)(図3-b)です。それぞれのビットを確認することで、引き起こされたフォールトの種類と詳細内容を判別できます。
Cortex-M4を使用する場合、ユーザーはMPUを使ってメモリ領域の属性を定義します(一般的なマイコンやプロセッサではMMU(Memory Management Unit)で定義される)。その設定に違反するメモリアクセスや違法アクセスが発生した場合にメモリ管理フォールトが引き起こされます。また、特権モードと非特権モードでのアクセス権に違反した場合でも、メモリ管理フォールトは引き起こされます。発生要因を簡単にまとめると次のようになります。
Copyright © ITmedia, Inc. All Rights Reserved.