...

タスク間通信 - CQ出版社

by user

on
Category: Documents
16

views

Report

Comments

Transcript

タスク間通信 - CQ出版社
このPDFは,CQ出版社発売の「すぐわかる!組込み技術教科書」の一部分の見本です.
内容・購入方法などにつきましては以下のホームページをご覧下さい.
<http://shop.cqpub.co.jp/hanbai/books/45/45521.html>
3.25
タスク間通信
あるタスクが作成したデータを,別のタスクが加工するなど,タスクとタスクの間には,共有
データをやり取りすることがあります.その際には,RTOSが提供するタスク間通信の機能を使
います.
データが付随した同期制御
データのやり取りで関連するタスクの例として,データを受信するタスクと,データを解析するタス
クがあったとします.データ解析タスクは,データ受信タスクがハードウェアからデータを受信するま
で待ち合わせる必要があります.イベントフラグを使って制御すると,図3.25.1のようになり,タスク
間通信の機能を使って制御すると図3.25.2のようになります.
このように,同期制御にデータが伴う場合,タスク間通信機能が使用できます.タスク間通信機能は,
データを受信するシステムコールとデータを送信するシステムコールを持っています.データ解析タス
クは,データ受信のシステムコールを呼び出すことで,データが送信されるまでウエイト状態となりま
す.そこへ,ハードウェアからデータを取得したデータ受信タスクが,そのデータを送信すると,デー
タ解析タスクはウエイト状態が解除され,同時にデータを受信します.データは,それを受信するタス
クが待ち合わせていないときでも送信することができ,RTOSがそのデータを保持しています.つまり,
データは送信できるときに送信し,受信できるときに受信すればよく,別の同期の仕組みは必要ありま
せん.RTOSが提供するタスク間通信機能として,データの受け渡しをメモリ上にあるデータへのポイ
ンタを渡す方式をとるメールボックスや,データをコピーして渡す方式のデータキューやメッセージバ
ッファなどがあります.
*イベントフラグセット
データ受信タスク
) 受信したデータをタスク間
通信機能で送信
データ解析タスク
データ受信タスク
) 受信したデータ
を保存
データ
データ解析タスク
+データを解析
データ
図3.25.1
イベントフラグを用いた制御
図3.25.2 タスク間通信を用いた制御
タスク間の速度差を吸収する
組込みシステムでは,受信データの発生頻度や,タスクの優先度によって,タスクの処理速度に違い
データ受信タスク
このデータを取り
こぼしてしまう
受信データ1
受信データ2
受信データ3
受信データ4
受信データ5
図3.25.3 タスクの速度差による問題
96
データ解析タスク
データを解析に回す
1
ミ
リ
秒
解析終了,
次のデータは?
1
ミ
リ
秒
解析処理中
3.25
タスク間通信
が出ることが多くあります.図3.25.3のように,1ミリ秒の間に,受信するデータが5回発生したとしま
す.そして1回のデータを解析するのに,やはり1ミリ秒かかるとします.この場合,一つのデータを受
信し,その解析が終わってから次のデータを受信していては間に合いません.このとき,データを受信
する処理が速い処理で,データを解析する処理が遅い処理となります.
この速度差の問題を解決するには,先にデータの受信だけ行って,そのデータを保持しておき,デー
タ解析は後から一つずつ行う方法があります.タスク間通信機能は,図3.25.4のように,このデータを
保持する仕組みを提供しています.
このようにタスク間通信機能を使用することで,タスク間でのデータのやり取りに関する制御を行う
ことができます.
データ受信タスク
受信データ1
データ解析タスク
タスク間通信機能
メールボックス
メッセージバッファ
データ送信
受信データ2
受信データ3
データ受信
受信データ5
データ1を解析
…
受信データ4
データ1
データ受信
データ2を解析
…
データ2
データ受信
データ3
第
3
章
要
素
技
術
/
プ
ラ
ッ
ト
フ
ォ
ー
ム
データ3を解析
…
データ4
データ5
図3.25.4 タスク間通信機能を使ったタスクの速度差の吸収
タスク間通信の仕組み
タスク間通信は,データの送信と受信により,タスク間でのデータの受け渡しと,同期制御をあわせ
て行う機能です.ここでは,タスク間通信の仕組みとその動作について説明します.
■ メールボックス等のデータ送信システムコールを呼び出したとき
そのメールボックスでデータ受信を待ち合わせてい
るタスクがいれば,送信データは直ちに受信され,そ
のタスクはウエイト状態が解除されます.
そのメールボックスでデータ受信を待ち合わせてい
るタスクがいなければ,データはメールボックスに保
持されます.このとき,データ送信のシステムコール
データ送信には,
タスクのウエイト
解除をともなうこ
とがあるんだ.そ
れによって,プリ
エンプションが起
きることもあるよ.
基
本
ソ
フ
ト
からすぐに復帰する場合と,送信したデータが受信さ
れるまで,送信タスクをウエイト状態にする場合とがあります.
■ メールボックス等のデータ受信システムコールを呼び出したとき
そのメールボックスに送信済みのデータが保持されていなければ,システムコールを呼び出したタス
クはウエイト状態となります.このメールボックスにデータが送信されたとき,ウエイト状態が解除さ
れます.
データ受信は,呼び
出したタスクがウエ
イト状態になってし
まうことがあります.
そして,別のタスク
にディスパッチする
ことがあります.
そのメールボックスに送信済みのデータが保持され
ていれば,送信データは直ちに受信され,受信タスク
はウエイト状態とならずシステムコールから復帰しま
す.
97
Fly UP