組み込みソフトウェアを開発するうえで、「割り込み」は重要な要素です。割り込みとは、その名のとおり、何らかの作業(処理)を行っている途中に、別の作業(処理)が割り込んでくることです。
割り込みの概念を理解するために、日常生活を考えてみます。いまパソコンに向かって新規プロジェクトの企画書を書いているとします。すると、今回のプロジェクトに関する緊急会議の開催を知らせるメールがきました。この会議には、すべての作業を中断して出席する必要があります。また社内規定により、席を長時間外す場合は、パソコンの電源を切ることが義務付けられています。
そこで、現在開いているページにブックマークを付けて、文書を保存し、パソコンの電源を切ります。会議終了後、パソコンの電源を再び入れ、企画書を開き、ブックマークの位置から作業を再開しました。
すると、またメールが来ました。差出人は、いつもくだらない用事を頼んでくる同僚です。相手は至急の回答を求めていますが、企画書の提出期限が迫っているため、同僚への返事は後回しにしました。
組み込みソフトウェアの場合、メールを受信する前の企画書作成が通常処理です。通常処理(企画書作成)を行っているときに、割り込み(最初のメール受信)が発生し、割り込み処理(会議への参加)を行います。割り込みが終了したら通常処理(企画書作成)に復帰します。
割り込み処理から割り込み発生前の状態に復帰するためには、どの時点で割り込みが発生したか、割り込みが発生した個所はどこか、といった情報が必要です。企画書の場合は、現在開いているページにブックマークを付けることで、割り込み復帰後に再開する個所が分かります。
組み込みソフトウェアの場合は、割り込み発生時の実行環境が分かれば、割り込みから正常に復帰できます。この実行環境はコンテキストと呼ばれます。コンテキストは割り込み発生時にスタックメモリに保存し、割り込み終了後は保存したコンテキストの内容をスタックメモリから読み出して、通常処理に復帰します。
コンテキストに対する考え方はいろいろありますが、本連載ではコンテキストを現在のプログラムカウンタやステータスレジスタなどの内容とします。スタックメモリに保存された、割り込み発生時のプログラムカウンタを読み出すことで、割り込み終了後に再開するべきプログラムアドレスが分かります。
また割り込みには、優先度があります。割り込み要求を直ちに行うか、後回しにするかは、割り込みの重要度に依存します。企画書作成の場合、緊急会議開催のメールは優先度の高い割り込みです。これに対して同僚からのメールは、優先度の低い割り込みです。組み込みソフトウェアでは、あらかじめ設定した優先度に従って、割り込み処理が行われます。
シングルチップマイコンでは割り込みコントローラに対して、割り込みの優先度がプログラミングできます。割り込みの優先度は通常、レベルx(xは数字)で表現され、xが小さい数字ほど高優先度の割り込みとなります。例えばレベル2の割り込み発生時にレベル6の割り込みが発生しても、レベル6の割り込みは実行されません。
割り込みは、必要に応じて禁止することができます。割り込みを禁止することを、割り込みマスクと呼びます。ただし、禁止(マスク)できない割り込みがあり、これをNMI(ノンマスカブル割り込み)と呼びます。企画書作成の例では、緊急会議への参加がNMIに相当します。
組み込みOSが搭載されたシステムの場合、すべての処理(タスク)はOSが管理します。このためイベントが発生してもタスクの優先順位やスケジューリングはプログラマの関知するところではなく、OSにすべて任せます。これに対してOSが搭載されていないシステムでは、イベント発生による割り込み処理は、プログラマ側で処理する必要があります。以下は、割り込み発生時の一般的な動作です。
Copyright © ITmedia, Inc. All Rights Reserved.