ソフトウェア割り込みと機能


10

MCUを使用して約3年経った後も、ソフトウェア割り込みの使用方法がわかりません。私はSTM32でいくつかのジョブを実行しましたが、ソフトウェア割り込みを使用したことがありません。実際、これは私にとって大きな問題です。

単純な関数を使用してタスクを実行できるのに、ソフトウェア割り込みを使用する必要があるのはなぜですか?ソフトウェア割り込みと関数の違いは何ですか?

いつでも好きなときに、関数(ジョブ用に作成したもの)を呼び出すことができます。単純な関数の代わりにソフトウェア割り込みを使用することにはいくつかの利点があるはずです。よくわかりませんが、ソフトウェア割り込みにはメリットがあると思います。ソフトウェア割り込みに優先度を割り当ててから、ソフトウェア割り込みに高い優先度を与えて、ハードウェア割り込みがタスクを壊すのを防ぐことができます。


1
割り込みを使用する主な目的は、他の重要なタスクが他の何かが起こるのを待っている間、タイミングが常に一定ではないときに実行できることです。また、ほとんどの場合、ポーリングよりも少し速いと思います。
MrPhooky 2015

1
@MrPhookyそれはあなたが話しているハードウェア割り込みです。OPはソフトウェアの割り込みについて話している。
brhans、

回答:


19

関数とソフトウェア割り込みの主な違いは、コンテキストと呼ばれるものです。

  • 関数は、メインプログラムのコンテキスト内で実行されます。
  • 割り込みは、割り込みハンドラーのコンテキスト内で実行されます。

単純なシステムでは、これは実際の違いではない可能性があります。ソフトウェア割り込みは、ROMにハードコードされたライブラリルーチンを提供する便利な方法として単に使用できます。すべてのルーチンのアドレスを知る必要はなく、IDコードとメインエントリポイント。これにより、コードの移植性が向上します。

ただし、より複雑なシステムでは、ソフトウェア割り込みは、カーネルコンテキストと呼ばれるまったく異なる環境で実行される場合があります。通常、アプリケーションは、リソースへのアクセスが制限されている保護されたユーザーコンテキストで実行されます。カーネルコンテキストで実行する場合にのみ、より複雑なタスクを実行できます。実際、一部のシステムでは、実行できる命令を制限しているため、カーネルコンテキストでコードをトリガーするメカニズムが必要です。そのために、割り込みが使用されます。


1
また、割り込みはプログラムの進行を任意に停止させ、システムが他のことを実行できるようにします(ハードウェア割り込みなど)。プログラムの観点から見ると、関数の状態は割り込みが発生したときと変わらないため、プログラムはこれを考慮する必要はありません。古いシステムでは、これがTSR(Terminate / Stay Resident)プログラムがタイマー/クロック割り込みをフックすることによってマルチタスクをシミュレートする方法です。IOPLレベルがなくても、たとえば、システムクロックを最新に保つことには利点がありました。
phyrfox 2015

4
アプリケーションのコードは、そのような割り込みがいつ、なぜ発生したかを正確に知っているため、これらの「ソフトウェア割り込み」は「同期割り込み」とも呼ばれることに注意してください。アプリケーションは、基本的にいつでも未承諾の方法で発生します。
JimmyB 2015

@HannoBinder:OPはCortex-M3ベクトル割り込みコントローラーに割り込み要求をポストすることについて話していると思います。優先度の高い割り込みのコードが優先度の低い割り込みをポストした場合、その要求は、優先度の高いすべての割り込みが終了するしばらく後に延期されます。
スーパーキャット2015

12

ソフトウェア割り込みを使用して、優先度の低い割り込みタスクを終了できます。多くの場合、レイテンシが長くなりすぎないように、タイミングが重要なコードには高い割り込み優先度が与えられます。タイミングクリティカルな部分が完了すると、メインループにとってタイミングクリティカルである可能性があるが、他の優先度の高い割り込みを保持するほどクリティカルではない追加のタスクがある場合があります。優先度の低いソフトウェア割り込みをトリガーすると、これを実現できます。

たとえば、それぞれに独自のタイマーを備えた複数のステッピングモーターがあるとします。タイマー割り込みには、ステップジッタを最小限に抑えるために高い優先度が与えられています。最もタイミングが重要なタスクは、ステップパルスを設定またはクリアするか、位相出力を進めるだけです。加速ランプの計算、センサー処理など、追加の機能が必要になる場合があります。これはステップごとに処理する必要があるため、メインループのタイミングが長すぎる可能性があるため、main()からこれを処理するのは適切でない場合があります。これらの追加タスクは、他の優先度の高いステッパーチャネルのレイテンシを増加させないように、優先度の低いソフトウェア割り込みによって処理される場合があります。

ソフトウェア割り込みと関数の違いは何ですか?

関数は呼び出された場所から即座に呼び出され、割り込みから呼び出された場合、現在の割り込み優先レベルは変更されません。ソフトウェア割り込みは、優先度が上がるとその割り込みを呼び出す割り込みトリガーです。高優先度の割り込みの最後に関数呼び出しが挿入された場合、関数はその高優先度内に含まれます。優先度の低いソフトウェア割り込みをトリガーしてから優先度の高い割り込みから戻ることにより、機能は新しい(低い)優先度で呼び出されます。


2
別の一般的なパターンとしては、タイミングが重要なものを処理するために100KHzの割り込みがあり、1kHzのタイマー刻みが必要ですが、2つの別個のタイマーを使用することはできません。100kHzの割り込みルーチンが言うのに時間がかかりませんが、if ((timer_count--) & 0x80000000) SET_TICK_INTERRUPT_FLAG(); else timer_count = temp-1; 他の割り込みはその処理を実行でき、割り込みが一時的に無効になっている場合、timer_countに100を追加します。1kHzルーチンの実行に10us以上かかる場合でも、100kHzルーチンに干渉することはありません。
スーパーキャット2015

同様に、単純なシステム(完全なRTOSなし)でソフトウェア割り込みを疑似スケジューラーとして使用しました。ハードウェア要件はISRによって処理されますが、コールバック関数やその他の時間のかかるタスクは、ハードウェア状態はソフトウェア割り込みに委任されます。
Evil Dog Pie

基本的に「下半分」のバリエーションについて説明しました。「ソフトウェア割り込み」とも呼ばれるこれについての参照はありますか?これはMajenkoの回答とはかなり異なる意味であり、質問はARMとタグ付けされています-アーキテクチャには実際にはSWI(ソフトウェア割り込み)命令があります。
domen

3
@domenどのような参照が必要かわかりません。それがそれを達成するために使用されるものであることから、「ソフトウェア割り込み」と呼ばれます。ARMのコンテキストでは、OPは特にSTM32を参照し、RM0008リファレンスマニュアルへのリンクを提供しました。これはARMコアリファレンスマニュアルではありません。RM0008でカバーされる唯一の「ソフトウェア割り込み」は、実際のハードウェアピンが割り込みに使用されているかどうかに関係なく、ソフトウェア割り込みを生成するために使用できるEXTI_SWIER(ソフトウェア割り込みイベントレジスタ)です。私は個人的にSWI(SWC)命令を使用していません。
2015

ありがとう!回答にこの情報の一部を含めて、どの「ソフトウェア割り込み」であるかを明確にするとよいでしょう。
domen

7

Majenkoの答えを少し拡張するために、ソフトウェア割り込みを使用してオペレーティングシステム、特にシステムコールインターフェイスを実装しています。これは、関数呼び出しを行うためにアプリケーションをオペレーティングシステムとリンクする必要がないことを意味し、コンテキストスイッチにより、OSはハードウェアへのアクセスを制限し、保護されたメモリなどを利用できます。

OSを使用しておらず、MCUのすべてのコードを制御している場合は、おそらくソフトウェア割り込みを使用する必要はありません。(Tutが述べたように、それらは他の用途を持つことができます。)

x86 のLinuxおよびMS-DOSシステムコールインターフェイスはソフトウェア割り込みを使用するため、例としてそれらにリンクします。


1
そして、OSがソフト割り込みを使用する多くの場合、それらは関数でラップされて生活を簡素化します。
2015

1
私はまだDOS用に(まったく新しい)プログラミングも行っており、int 21ハンドラーに精通しています。I / Oに必要なほとんどすべては、DOS ISRで処理されます。
R Drast 2015

Linuxについて引用されているページは1993-1996のものであることに注意してください。
CVn 2015

リンクを最新のリンクに置き換えました。
Adam Haun、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.