マイコンの機能を使い切るうえで知らなければならない概念の一つ。
割り込み処理の考え方
これまでに作成したプログラムは各処理の
順番が決まっていました。
処理1の次は処理2、処理2の次は処理3、処理3の次は処理1。
割り込み処理はこの
処理の順番とは
独立して動作する処理です。
イメージとしては
ウェブブラウザでインターネットをしながら
メールを受信しつつ
時刻設定したアラームが自動的に鳴るようなものです。
ウェブブラウザが
メインの処理で、
自動受信するメールブラウザと
タイマー動作のアラームが
割り込みの処理に相当します。
メールが来たという
外的要因により動作するのが
外部割込み、タイマーで設定した時刻になったという
内的要因により動作するのが
内部割込みです。
※メール受信も本当はタイマー動作ですが、メールが来たら自動的に動作することにしておきます。
マイコンでの動作ではスイッチ入力があると
メイン処理とは独立して処理をしたり、タイマーで一定時間おきにLEDの点灯処理を行うような感じです。
なぜ割り込みが必要となるのか
この様に書くと
割り込みを使わなくても処理できそうに思えます。
例えば
処理1にスイッチ入力に対する処理を書いておき、
処理3には例えば30回毎に何かを実行する等タイマー処理に相当する処理を書いておけばこれらが処理できそうです。
ただ、必ずしも
思った通りの動作にはなりません。
たとえば処理2に
100msほど時間がかかるとします。
スイッチ入力されたタイミングを
1ms単位で知りたい場合、入力を確認する間隔は最短でも100msとなるので十分な精度が得られません。
タイマーを使って実行したい間隔が
10msであった場合もやはり望みの動作をさせることができません。
この様な状況では処理1~処理3の様なメイン処理にスイッチ入力やタイマー処理を組み込むことはできません。
メイン処理とは独立して動作している必要があり、処理1~処理3の
どの処理を行っている時でもスイッチ入力やタイマーなどの条件を満たした時点で対応する処理を実行しなければなりません。
割り込み処理の実行動作
実際にはマイコンで
1度に実行できる処理は一度に1つのみで、並列処理を行うことはできません。メイン処理を実行中に特定の条件を満たしたときに
メイン処理を一時中断して専用の処理を実行し、メイン処理に復帰しなければいけません。
メイン処理から見れば
専用処理が割り込んできた状態と言えます。
このため、メイン処理に対して
条件を満たした時点で優先して処理する機能を
割り込み処理と呼びます。
複数の割り込み処理が混在する時、
割り込み処理中に
割り込み処理が発生することがあります。
しかし、
急いで実行する必要がある処理中に別の処理に割り込まれると望みの動作にならないことが予期されます。これらの割り込み処理について
どの処理を優先して処理すべきかを決める必要があります。
どの処理が優先すべき急ぎの処理なのか設定する値が
優先度です。ある割り込み処理中にそれより優先度の低い割り込み条件が発生したときは先に最初の割り込み処理を実行したのちに優先度の低い割り込み処理が実行されます。
関連:
当ブログで扱うSH7125の特殊機能一覧