ソフトウェア割り込みを使用して、優先度の低い割り込みタスクを終了できます。多くの場合、レイテンシが長くなりすぎないように、タイミングが重要なコードには高い割り込み優先度が与えられます。タイミングクリティカルな部分が完了すると、メインループにとってタイミングクリティカルである可能性があるが、他の優先度の高い割り込みを保持するほどクリティカルではない追加のタスクがある場合があります。優先度の低いソフトウェア割り込みをトリガーすると、これを実現できます。
たとえば、それぞれに独自のタイマーを備えた複数のステッピングモーターがあるとします。タイマー割り込みには、ステップジッタを最小限に抑えるために高い優先度が与えられています。最もタイミングが重要なタスクは、ステップパルスを設定またはクリアするか、位相出力を進めるだけです。加速ランプの計算、センサー処理など、追加の機能が必要になる場合があります。これはステップごとに処理する必要があるため、メインループのタイミングが長すぎる可能性があるため、main()からこれを処理するのは適切でない場合があります。これらの追加タスクは、他の優先度の高いステッパーチャネルのレイテンシを増加させないように、優先度の低いソフトウェア割り込みによって処理される場合があります。
ソフトウェア割り込みと関数の違いは何ですか?
関数は呼び出された場所から即座に呼び出され、割り込みから呼び出された場合、現在の割り込み優先レベルは変更されません。ソフトウェア割り込みは、優先度が上がるとその割り込みを呼び出す割り込みトリガーです。高優先度の割り込みの最後に関数呼び出しが挿入された場合、関数はその高優先度内に含まれます。優先度の低いソフトウェア割り込みをトリガーしてから優先度の高い割り込みから戻ることにより、機能は新しい(低い)優先度で呼び出されます。