|
||||||||||||||||||||||
共用体 waiting_information待ち情報ブロック(WINFO)の定義 [詳細]
waiting_informationのコラボレーション図
説明待ち情報ブロック(WINFO)の定義タスクが待ち状態の間は,TCB およびそこから指される WINFO を次のよ うに設定しなければならない. (a) TCB のタスク状態を待ち状態にする.その際に,待ち状態に伴う付属 状態(TS_WAIT_????)も設定する. (b) タイムアウトを監視するために,タイムイベントブロックを登録する. 登録するタイムイベントブロックは,待ちに入るサービスコール処理関数 のローカル変数として確保し,それへのポインタを WINFO の tmevtb に 記憶する.タイムアウトの監視が必要ない場合(永久待ちの場合)には, tmevtb を NULL にする. 同期・通信オブジェクトに対する待ち状態の場合には,標準の WINFO に wobjcbフィールドを追加した構造体(WINFO_WOBJ,wait.h で定義)を使 い,タスク状態に TS_WAIT_WOBJ を設定する.また,以下の (c)〜(e) の 設定を行う必要がある.同期・通信オブジェクトに関係しない待ち(起床 待ち,時間経過待ち)の場合には,(c)〜(e) は必要ない. (c) TCB を待ち対象の同期・通信オブジェクトの待ちキューにつなぐ.待 ちキューにつなぐために,task_queue を使う.TCB を同期・通信オブジェ クトの管理ブロックの共通部分(WOBJCB)の待ちキューにつないだ場合に は,タスク状態に TS_WAIT_WOBJCB を設定する. (d) 待ち対象の同期・通信オブジェクトの管理ブロックへのポインタを, WINFO_WOBJ の wobjcb に記憶する. FDMPカーネルで wobjcb を使うのは,優先度順の待ちキューにつながれて いるタスクの優先度が変更された場合のみであるが,デバッグ情報を取り 出しやすいように,待ちキューが優先度順でない場合にも wobjcb を設定 する. (e) 待ち対象の同期・通信オブジェクトに依存して記憶することが必要な 情報がある場合には,WINFO_WOBJ に必要な情報のためのフィールドを追加 した構造体を定義し,WINFO_WOBJ の代わりに用いる. 待ち状態を解除する際には,待ち解除したタスクからの返値を WINFO の wercd に設定する.wercd を使うのは待ち解除以降であるのに対して, tmevtb は待ち解除後は使わないため,メモリ節約のために共用体(union) を使っている.
構造体
この共用体の説明は次のファイルから生成されました: Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:20 2006 に Doxygen によって生成されました。 |