マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。44回目は、初心者から中級者の方からよく質問される「フォールト」(Fault)についてです。
素朴な疑問から技術トラブルなどマイコンユーザーのあらゆる悩みに対し、マイコンメーカーのエンジニアが回答していく連載「Q&Aで学ぶマイコン講座」。
今回は、初級〜中級者から多く寄せられる質問です。
マイコンの説明書を読むと「バスフォールト」(Bus Fault)とか「ハードフォールト」(Hard Fault)と書かれていますが、そもそも「フォールト」とは何ですか? どのような場合に起きて、どのような対応処理をすればよいのでしょうか?
「フォールト」とは、マイコンがハードウェア的に正常に動作できない状態に陥った場合に発生する例外処理です(図1参照)。「○○エラー」(例、バスエラー)と呼ばれることもあります。マイコンによっていろいろな定義があるので、本記事では、Arm Cortex-M4プロセッサを例にとって解説します。Cortex-M4の「フォールト」には次の種類があります。
メモリ管理フォールトは、MPU(Memory Protection Unit)の設定に違反するメモリアクセスや違法アクセス(例えば、実行不可能なメモリ領域からコードを実行しようとした場合など)が発生した場合に引き起こされます。
バスフォールトとは、バスへのアクセスに何らかの問題があり、メモリやレジスタの読み書きに支障がある場合に、バスフォールトが引き起こされます。
用法フォールトとは、マイコンの仕様に定義されていない使い方をした場合に引き起こされます(例えば、未定義命令の実行、0による除算など)。
そして、メモリ管理フォールト、バスフォールト、用法フォールト以外のフォールトをハードフォールトと呼びます。
「フォールト」が引き起こされた場合、それぞれの例外処理が起動しますので、ハンドラの中で対応処理を行います。要因はフォールトステータスレジスタ(Fault Status Register/FSR)に反映されますので、FSRをチェックすれば、引き起こされた「フォールト」の種類が分かります。
Copyright © ITmedia, Inc. All Rights Reserved.