復刻:キーワードガイダンス第14回「多重割り込み」
2014-05-11


初出:技術評論社「組込みプレスVol.16」(平成21(2009)年8月28日発売)

●順番待ちの仕組みと処理の順番
変わったハンバーガーショップを考えて見ます。
レジ待ちの列はA列、B列、C列の3列としましょう。
レジ係は1人しかいません。
同時に複数の列にお客が並んだ場合はA列>B列>C列の順に接客します。
レジ係は注文を聞いて会計を済ませて調理係に依頼すると次の客の注文を取ります。
会計済みで注文品受け取り待ちの客には列の脇に避けてもらいます。
注文品は調理係が準備を済ませると受け取り待ちの客に渡します。

●多重割り込みの二つの例
ある時A列とC列に同時に客が並びました。
レジ係はA列に客が並んでいるのでC列の客は待たせたままA列の客の注文をとります。

(a) 注文品の単価と個数のレジ入力
(b) 客からお金を受け取る
(c) 調理係に注文を伝える
(d) 客にお釣りを渡す

上記が済んだら次はC列のレジの処理のはずですが、
気付いたらB列に客が並んでいます。
レジ係はC列の客は待たせたままでB列の注文を取ります。
このように「多重割り込み」には大きく分けて二つの場合があります。

(1) 同時に二つ以上の要因の割り込みが発生した場合
(2) 一つの要因の割り込み処理中に別の要因の割り込みが発生した場合

この例は多重割り込みの二つの例の複合例です。

●割り込み優先度と割り込み禁止区間
割り込み優先度は同時に割り込みが発生した時の処理の順番の約束事に過ぎません。
仮に、優先度が低いC列の会計処理中に優先度の高いA列に客が並んでも割り込み禁止のままの場合は無視するしかありません。
何が何でもC列の処理を中断してA列の処理を「優先する」という意味の優先度ではないのです。

但し、以下のような工夫は可能です。

レジ係の手順を以下のように変更します。
(a) 注文品の単価と個数のレジ入力
(b) 優先度の高い列に目を向けて客がいればそちらの注文取りを先に行う
(c) 客からお金を受け取る
(d) (b)と同じ
(e) 調理係に注文を伝える
(f) (b)と同じ
(g) 客にお釣りを渡す

最初の手順では(a)〜(d)の区間を「割り込み禁止区間」としています。
一方、あとの手順では(a)の区間だけを「割り込み禁止区間」とします。
注文を忘れないためのレジ入力が済んだ時点までを割り込み禁止という扱いにしたからです。
一部のワンチップマイコンの割り込みコントローラは割り込みが発生すると最初に割り込み禁止にした上で、その時点で一番優先度の高い割り込み処理に
CPUを割り当てます。
割り込み処理の任意の部分で意図的に割り込み許可にしない限り、優先度の高い割り込みが優先度の低い割り込み処理中に発生しても優先度の高い割り込み処理は実行されません。

●割り込み保留可能時間と割り込み禁止時間
通常、割り込み要因の発生には周期性があります。
その周期未満の時間は割り込みが発生したことを保留にして他の処理を行うことが出来るのです。これを「割り込み保留可能時間」といいます。
「割り込み禁止時間」は「割り込み保留可能時間」を越えないように実装する必要があります。
これは多重割り込みが発生する可能性も含めて全ての組み合わせで条件を満たす必要があります。
なお、割り込み要求はレジスタに保持されますが、その情報をクリアしないと次の割り込みは発生しません。

●同じ要因の多重割り込み
実際にはそれぞれの列に複数の客が並ぶことは出来ません。
もし、割り込み処理中の割り込みと同じ要因の割り込みが発生する場合はシステムの要求スペックをハードウェア仕様が満たしていないことになります。
したがって、ハードウェア設計上そのような処理を行う場合の仕組みについて検討する必要は全くありません。
逆にソフトウェアでは工夫を行って、割り込み禁止時間を短縮するようにします。

続きを読む

[組込み]
[キーワードガイダンス]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット