|
応用事例としてファクシミリの受信から印刷までのシステムを考えて見ましょう。
ファクシミリシステムは次のように2つのハンドラと3つのタスクに分割できます。
通信(受信)割込みハンドラ
データを受信した際に発生する割込みにより起動される割込みハンドラ。
受信タスクを起床させる(iwup_tsk)。
印刷完了割込みハンドラ
印刷エンジン(ハードウェア)が印刷を終了した際に発生する割込みにより起動される割込みハンドラ。
印刷タスクを起床させる(iwup_tsk)。
受信タスク
受信したデータをバッファに格納する。
普段は起床待ち状態(slp_tsk)で、通信(受信)割込みハンドラから起床される。
受信データをバッファに格納して復号化タスクに送る(snd_mbx)。
データの受信は最優先で行わなければならないので、最も高いプライオリティを割り当てる。
印刷タスク
復号化されたイメージデータを印刷する。
普段は復号化タスクから送られるメッセージ待ち状態(rcv_mbx)で、メッセージを受け取ると印刷処理を行う。
イメージデータを印刷エンジン(ハードウェア)に送った後は、印刷完了まで起床待ち状態になる(slp_tsk)。
印刷が完了したら次のイメージデータが送られてくるのを待つ。
復号化タスクの処理結果を処理しなければならないので、復号化タスクより高いプライオリティを割り当てる。
復号化タスク
送られてきたデータを復号化する。
普段は、通信(受信)タスクから送られるメッセージ待ち状態(rcv_mbx)で、メッセージを受け取ると、復号化処理を行う。
復号化処理が完了したら、復号化したイメージデータを印刷タスクに送る(snd_mbx)。
演算処理を行うだけなので、もっとも低いプライオリティを割り当てる。
|