組み込みシステムに欠かせない「割り込み」の仕組みや種類について詳しく解説。また、今回はタイマに関する問題を出題する!!
前回の宿題【問題7】は、「割り込み」に関する問題でした。
割り込みは、緊急性の高いイベントが発生したときに、現在実行中の処理を一時中断して、そのイベントを処理するための仕組みです。
今回も問題の解答に続いて、割り込みの仕組みや種類などについて解説します。この機会にしっかりと理解しておきましょう。
それでは、解答を発表します!
問題7 割り込みに関する次の記述のうち、正しいものはどれか? 答え. イ (←クリック) |
イ以外の記述には、誤りがあります。
アは「外部割り込み」が誤りです。プログラム割り込みやシステムコール割り込みは、内部割り込みになります。ウは「内部割り込み」が誤りです。マスカブル割り込みとノンマスカブル割り込みに分類されるのは外部割り込みになります。エは「タスクハンドラ」が誤りです。割り込み要求を受けると、現在実行中の処理の代わりに割り込みハンドラに記述された処理が実行されます。
MPUはプログラムに沿って順番に処理を実行していきます。しかし、すべての処理が順番どおりに実行されるわけではありません。例えば、組み込み機器の緊急停止ボタンが押されたとしましょう。この場合、現在実行中の処理を中断して、機器を停止する処理を実行しなければなりません。
ここでは「ポーリング」という手法が利用できます。ポーリングは、一定間隔でハードウェアの状態を監視し、ボタンの押下などのイベントの発生を検知したら、そのイベントに対応する処理を実行します(図1)。
図1 ポーリングの例 |
ポーリングは、ハードウェアに依存せず、ソフトウェアで簡単に実装可能です。ただし、イベントの発生と時間差が生じるかもしれないという問題があります。例えば、ポーリングにより、5秒ごとに緊急停止ボタンが押されたかどうかをチェックしているとします。このケースですと、仮にチェックした直後にボタンが押されると、5秒後までボタンが押されたことが分かりません。状況によっては、5秒間の遅れは致命的です。逆に、チェックする間隔を短くし過ぎると、めったに押されないボタンを監視するために、常にチェック処理を実行していることになり、MPUに大きな負荷が掛かります。
イベントの発生時に、すぐに対応する処理を実行するための仕組みが、“割り込み”です。緊急停止ボタンの押下などのイベントが発生すると、MPUに割り込み要求が送られます。MPUは割り込み要求を受けると、現在実行中の処理を中断し、割り込みハンドラを実行します。緊急停止ボタンが押されたときに実行すべき処理は、あらかじめ割り込みハンドラに記述しておきます。
処理を実行しているとき、その処理の流れを「コンテキスト」といいます。割り込み要求に応じて、現在実行中の処理を中断し、割り込みハンドラを実行すると、コンテキストが別のコンテキストに変わることになります。そのため、中断した処理を後で再開できるように、現在使用中のレジスタの値などを一時的にどこかに退避し、割り込みハンドラの実行が完了したときに復元する必要があります。コンテキストの変更に伴ってレジスタなどの値を退避/復元する作業を「コンテキストスイッチ」といいます(図2)。
図2 割り込みの例 |
割り込みは、大きく「外部割り込み(ハードウェア割り込み)」と「内部割り込み(ソフトウェア割り込み)」に分類できます。割り込みには、表1に示すようなものがあります。
種類 |
説明 |
|
外部割り込み | 入出力割り込み | ハードウェアの入出力によって発生する |
機械チェック割り込み | 機械の異常を伝えるために発生する | |
タイマ割り込み | タイマが一定時間が過ぎたことを通知するために発生する | |
内部割り込み | 例外割り込み | ゼロによる除算やバッファオーバーフローといったプログラムのバグなどが原因で発生する |
システムコール割り込み | システムコールが呼び出されたときに発生する |
外部割り込みには、割り込み要求の受け付けを禁止できないものと、できるものがあります。電源のオン/オフ、ハードウェアのリセットなど、優先的に処理しなければならないイベントは、禁止できない「ノンマスカブル割り込み(NMI:Non-Maskable Interrupt)」として通知します。そのほかの割り込みは「マスカブル割り込み」になります。割り込みを禁止することを「マスク」といいます。
大規模なシステムでは、ハードウェアの種類やソフトウェアの実行コード行数に比例して、割り込みの種類も増えます。そのため、多くの場合、「割り込みコントローラ(INTC:Interrupt Controller)」で数多くの割り込みを制御して、MPUに渡すことになります。割り込みコントローラでは「割り込みマスクレジスタ」によって、各割り込みを受け付けるのか、禁止するのかを指定したり、「割り込み優先順位設定レジスタ」によって割り込みの優先順位(レベル)を設定したりできます。
図3に示すように、割り込みコントローラの入力端子には、各ハードウェアからの「割り込み要求(IRQ:Interrupt Request)」を受け付ける信号線を接続します。ハードウェアから割り込み要求信号が送られてくると、割り込みマスクレジスタの該当ビットを参照して、受け付け可能な割り込みかどうかを判定します。受け付け可能であれば、割り込み優先順位設定レジスタを参照して、最もレベルの高い割り込みを抽出してMPUに割り込み要求を送ります。
図3 割り込みコントローラの例 |
MPUは、割り込み要求を受けると、割り込みに一意に割り振られた割り込み番号を基に、「割り込みベクタ・テーブル」にアクセスします。割り込みベクタ・テーブルは、イベントに応じてどの割り込みハンドラを実行するかを制御するテーブルです。システムの初期化処理の際に、割り込みハンドラのメモリ上の位置を示すアドレスを設定しておきます。MPUは、そのアドレスを取得して割り込みハンドラを実行します(図4)。
図4 割り込みベクタ・テーブル |
問題8 ウォッチドッグタイマ(WDT:Watchdog Timer)の説明として、正しいものはどれか? 答え. 解答はこちら(←クリック) |
いかがでしたでしょうか? 割り込みの仕組みについて理解できましたか。次回は、時間を管理する「タイマ」について解説します。お楽しみに!(次回に続く)
関連リンク: | |
組込みソフトウェア技術研修講座イーラーニング(サンプルIDプレゼント中) http://www.certpro.jp/elearning.html |
|
組込みソフトウェア技術者試験クラス2試験対策問題集(ETEC-SW2)(サンプルIDプレゼント中) http://www.certpro.jp/etecsw2test.html |
|
Copyright © ITmedia, Inc. All Rights Reserved.