5.1.1. バイナリセマフォとは

マイコン入門spacer ad
トップページに戻る(マイコン徹底入門:STM32で始めるARM/Cortex-M3組み込み開発)
「マイコン徹底入門」とは? |  「マイコン徹底入門」を読む |  ダウンロード |  掲示板 |  筆者の自己紹介


Previous: 5.1. バイナリセマフォ

Up: 5.1. バイナリセマフォ

Next: 5.1.2. バイナリセマフォの作成


マイコン徹底入門:RTOS編:フリーのリアルタイムOS活用法: 5. 割込み処理: 5.1. バイナリセマフォ:

5.1.1. バイナリセマフォとは

 RTOSでよく用いられるのがバイナリセマフォを用いた割り込み制御です。

 セマフォとは元々は手旗信号を意味していた言葉です。旗を上げることにより「進行してもよし」、旗を下げることで「停止せよ」と伝える訳ですが、コンピュータ科学でも同じような意味で用いられています。

 割込み発生時に起動したいタスクがあるとします。割込んでを行わせたいので優先度は最優先に設定します。このタスクは一旦起動はさせるのですが、起動後直ちにセマフォによって「停止」を指示します(旗を下げる)。タスクは旗が下がっているのを見て、自ら停止します。その後このタスクはセマフォに変化があるまではずっと停止したままです。その後、割込みが派生したとき、割込みハンドラは、セマフォによってタスクに「進行」を指示します(旗を上げる)。タスクは旗が上がったのを見て、直ちに自分の処理を開始します。優先度が高く設定されているので、他のタスクよりも優先して処理されます。ちなみに処理を開始する際には、旗を自分で降ろして(セマフォを停止に戻して)おきます。タスク内で定義された処理が完了した場合には、またセマフォが上がるまで、自らを停止させます。

 セマフォは言ってみれば、割込みが発生するまで、タスクの実行を停止させるストッパーということになります。

 ここでセマフォがキューと似ていると感じた方がいるでしょう。確かに、セマフォとキューは、あるタスクが別のタスクに信号を伝えるために信号を器(セマフォ・キュー)に入れる、別のタスクは器から信号を受け取るという意味で、同じ処理を行っています。実際のところ、FreeRTOSでもセマフォはキューの一種として実装されているようです。そしてキューと同様の考え方から、セマフォで進行を指示する(旗を揚げる)ことを「セマフォを与える」、セマフォの旗が揚がったことを確認したので、処理を開始する際にセマフォの旗を降ろすことを「セマフォを取る」と表現します。

 ここで「バイナリ」セマフォを対象としています。バイナリというのは2進数を意味しており、2種類の状態、つまり「開始」「停止」しか無いことを表しています。一方後述のカウンティングセマフォは複数の割込み処理用タスクに開始を指示できます。

 このサンプルでは、1秒毎にタイマ割込(TIM4)が発生するのですが、その度に割込みハンドラがセマフォを使用して、割込み処理用タスクに開始を伝えています。割込み処理用タスクは起動したことをターミナルに表示します。

Handler task called.

Handler task called.

Handler task called.

....

 バイナリセマフォを用いたプログラムは、バイナリセマフォの作成、割込みハンドラの作成、割込み処理用タスクの作成に分かれます。


Previous: 5.1. バイナリセマフォ

Up: 5.1. バイナリセマフォ

Next: 5.1.2. バイナリセマフォの作成


このページはITと知的財産の法律情報「法務ネット」の管理人が制作・運営しています。