「組み込み」ならではの基礎知識 ――スタートアップ・ルーチンからハードウェアまで
割り込み信号には2種類あります.一つは,場合によっては受け付けなくてもよい割り込み(マスク可能割り込み)です.もう一つは,必ず受け付けなければならない割り込み(マスク不能割り込み)です.割り込みを受け付けるとつごうの悪い処理を実行するときに,あらかじめ割り込み禁止命令を実行しておけば,マスク可能割り込みを受け付けないようにすることができます.処理が終わったら,割り込み許可命令を実行することで,再び割り込みを受け付けるようになります.
割り込み信号が入ってから,実際に割り込み処理が始まるまでの時間を割り込み応答時間といいます.対応しなければならない事象がいつまで待っていてくれるのか,割り込み応答時間と突き合わせて十分対処できることを確認しておかなければ事象を処理しそこねてしまいます.割り込まれる側の関数に割り込みを禁止している処理があるときは,この処理時間も加算します.
不慣れなうちは,割り込み信号をきっかけにした処理をすべて割り込み処理ルーチンに書いてしまいがちです.すると,割り込まれた側の処理が滞ってしまいます.割り込みを受け付けてから元のしごとに戻るまでの時間(割り込み処理時間)を最小にするために,後に回せるしごとは,割り込み処理ルーチン内でフラグをセットするだけにとどめ,割り込まれる側で処理するようにくふうします.先ほどのピザ屋さんの例で,配達伝票を書くことがフラグのセットにあたります.もちろん,割り込み処理時間が割り込み信号の入る間隔よりも短くなるように設計します.
割り込み処理が複数あるときには優先順位をつけます.優先順位の低い割り込み処理を実行している最中に,優先順位の高い割り込み処理を受け付けられるように作ります.これを多重割り込みと言います(図6-3).