3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
6 * Copyright (C) 2000 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
9 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
10 * によって公表されている GNU General Public License の Version 2 に記
11 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
12 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
33 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
34 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
36 * @(#) $Id: wait.h,v 1.1 2009/01/31 05:27:37 suikan Exp $
47 #include "time_event.h"
52 * 実行中のタスクを待ち状態に移行させる.具体的には,実行中のタスクを
53 * レディキューから削除し,TCB の winfoフィールド,WINFO の tmevtbフ
57 make_wait(WINFO *winfo)
59 make_non_runnable(runtsk);
60 runtsk->winfo = winfo;
67 * 実行中のタスクを,タイムアウト指定付きで待ち状態に移行させる.具体
68 * 的には,実行中のタスクをレディキューから削除し,TCB の winfoフィー
69 * ルド,WINFO の tmevtbフィールドを設定する.また,タイムイベントブ
72 extern void make_wait_tmout(WINFO *winfo, TMEVTB *tmevtb, TMO tmout);
77 * tcb で指定されるタスクの待ち状態を解除する.具体的には,タイムイベ
78 * ントブロックが登録されていれば,それを登録解除する.また,タスク状
79 * 態を更新し,待ち解除したタスクからの返値を E_OK とする.待ちキュー
80 * からの削除は行わない.待ち解除したタスクへのディスパッチが必要な場
83 extern BOOL wait_complete(TCB *tcb);
88 * tcb で指定されるタスクが,待ちキューにつながれていれば待ちキューか
89 * ら削除し,タスク状態を更新する.また,待ち解除したタスクからの返値
90 * を,wait_tmoutでは E_TMOUT,wait_tmout_ok では E_OK とする.待ち解
91 * 除したタスクへのディスパッチが必要な時は,reqflg を TRUE にする.
92 * wait_tmout_ok は,dly_tsk で使うためのもので,待ちキューから削除す
94 * いずれの関数も,タイムイベントのコールバック関数として用いるための
95 * もので,割込みハンドラから呼び出されることを想定している.
97 extern void wait_tmout(TCB *tcb);
98 extern void wait_tmout_ok(TCB *tcb);
103 * tcb で指定されるタスクの待ち状態を強制的に解除する.具体的には,タ
104 * スクが待ちキューにつながれていれば待ちキューから削除し,タイムイベ
105 * ントブロックが登録されていればそれを登録解除する.
106 * wait_cancel は,タスクの状態は更新しない.
107 * wait_release は,タスクの状態を更新し,待ち解除したタスクからの返
108 * 値を E_RLWAI とする.また,待ち解除したタスクへのディスパッチが必
111 extern void wait_cancel(TCB *tcb);
112 extern BOOL wait_release(TCB *tcb);
115 * 同期・通信オブジェクトの管理ブロックの共通部分操作ルーチン
117 * 同期・通信オブジェクトの初期化ブロックと管理ブロックの先頭部分は共
118 * 通になっている.以下は,その共通部分を扱うための型およびルーチン群
120 * 複数の待ちキューを持つ同期・通信オブジェクトの場合,先頭以外の待ち
121 * キューを操作する場合には,これらのルーチンは使えない.また,オブジェ
122 * クト属性の TA_TPRI ビットを参照するので,このビットを他の目的に使っ
123 * ている場合も,これらのルーチンは使えない.
127 * 同期・通信オブジェクトの初期化ブロックの共通部分
129 typedef struct wait_object_initialization_block {
130 ATR wobjatr; /* オブジェクト属性 */
134 * 同期・通信オブジェクトの管理ブロックの共通部分
136 typedef struct wait_object_control_block {
137 QUEUE wait_queue; /* 待ちキュー */
138 const WOBJINIB *wobjinib; /* 初期化ブロックへのポインタ */
142 * 同期・通信オブジェクト待ち情報ブロックの定義
144 typedef struct wait_object_waiting_information {
145 WINFO winfo; /* 標準の待ち情報ブロック */
146 WOBJCB *wobjcb; /* 待ちオブジェクトの管理ブロック */
150 * 同期・通信オブジェクトに対する待ち状態への移行
152 * 実行中のタスクを待ち状態に移行させ,同期・通信オブジェクトの待ちキュー
153 * につなぐ.また,待ち情報ブロック(WINFO)の wobjcb を設定する.
154 * wobj_make_wait_tmout は,タイムイベントブロックの登録も行う.
156 extern void wobj_make_wait(WOBJCB *wobjcb, WINFO_WOBJ *winfo);
157 extern void wobj_make_wait_tmout(WOBJCB *wobjcb, WINFO_WOBJ *winfo,
158 TMEVTB *tmevtb, TMO tmout);
163 * 同期・通信オブジェクトに対する待ち状態にあるタスクの優先度が変更さ
164 * れた場合に,待ちキューの中でのタスクの位置を修正する.
166 extern void wobj_change_priority(WOBJCB *wobjcb, TCB *tcb);
168 #endif /* _WAIT_H_ */