|
|
wait.h説明を見る。00001 /* 00002 * TOPPERS/FDMP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Function Distributed Multiprocessor Kernel 00005 * 00006 * Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory 00007 * Toyohashi Univ. of Technology, JAPAN 00008 * Copyright (C) 2005 by Embedded and Real-Time Systems Laboratory 00009 * Graduate School of Information Science, Nagoya Univ., JAPAN 00010 * 00011 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 00012 * によって公表されている GNU General Public License の Version 2 に記 00013 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 00014 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 00015 * 利用と呼ぶ)することを無償で許諾する. 00016 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00017 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00018 * スコード中に含まれていること. 00019 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00020 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00021 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00022 * の無保証規定を掲載すること. 00023 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00024 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00025 * と. 00026 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00027 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00028 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00029 * 報告すること. 00030 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00031 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00032 * 00033 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00034 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 00035 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 00036 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 00037 * 00038 * @(#) $Id: wait.h,v 1.2 2006/03/14 04:37:54 honda Exp $ 00039 */ 00040 00045 #ifndef _WAIT_H_ 00046 #define _WAIT_H_ 00047 00048 #include "task.h" 00049 #include "time_event.h" 00050 00058 Inline void 00059 make_wait(WINFO *winfo) 00060 { 00061 make_non_runnable(runccb, runtsk); 00062 runtsk->winfo = winfo; 00063 winfo->tmevtb = NULL; 00064 } 00065 00066 00075 extern void make_wait_tmout(WINFO *winfo, TMEVTB *tmevtb, TMO tmout); 00076 00086 extern BOOL wait_complete(CCB *ccb, TCB *tcb); 00087 00088 /* 00089 * タイムアウトに伴う待ち解除 00090 * 00091 * tcb で指定されるタスクが,待ちキューにつながれていれば待ちキューか 00092 * ら削除し,タスク状態を更新する.また,待ち解除したタスクからの返値 00093 * を,wait_tmoutでは E_TMOUT,wait_tmout_ok では E_OK とする.待ち解 00094 * 除したタスクへのディスパッチが必要な時は,reqflg を TRUE にする. 00095 * wait_tmout_ok は,dly_tsk で使うためのもので,待ちキューから削除す 00096 * る処理を行わない. 00097 * いずれの関数も,タイムイベントのコールバック関数として用いるための 00098 * もので,割込みハンドラから呼び出されることを想定している. 00099 */ 00100 extern void wait_tmout(TCB *tcb); 00101 extern void wait_tmout_ok(TCB *tcb); 00102 00103 /* 00104 * 待ち状態の強制解除 00105 * 00106 * tcb で指定されるタスクの待ち状態を強制的に解除する.具体的には,タ 00107 * スクが待ちキューにつながれていれば待ちキューから削除し,タイムイベ 00108 * ントブロックが登録されていればそれを登録解除する. 00109 * wait_cancel は,タスクの状態は更新しない. 00110 * wait_release は,タスクの状態を更新し,待ち解除したタスクからの返 00111 * 値を E_RLWAI とする.また,待ち解除したタスクへのディスパッチが必 00112 * 要な場合には TRUE を返す. 00113 */ 00114 extern void wait_cancel(CCB *ccb, TCB *tcb); 00115 extern BOOL wait_release(CCB *ccb, TCB *tcb); 00116 00117 00118 /* 00119 * 同期・通信オブジェクトの管理ブロックの共通部分操作ルーチン 00120 * 00121 * 同期・通信オブジェクトの初期化ブロックと管理ブロックの先頭部分は共 00122 * 通になっている.以下は,その共通部分を扱うための型およびルーチン群 00123 * である. 00124 * 複数の待ちキューを持つ同期・通信オブジェクトの場合,先頭以外の待ち 00125 * キューを操作する場合には,これらのルーチンは使えない.また,オブジェ 00126 * クト属性の TA_TPRI ビットを参照するので,このビットを他の目的に使っ 00127 * ている場合も,これらのルーチンは使えない. 00128 */ 00129 00133 typedef struct wait_object_initialization_block { 00134 ATR wobjatr; /* オブジェクト属性 */ 00135 } WOBJINIB; 00136 00140 typedef struct wait_object_control_block { 00141 QUEUE wait_queue; /* 待ちキュー */ 00142 const WOBJINIB *wobjinib; /* 初期化ブロックへのポインタ */ 00143 } WOBJCB; 00144 00148 typedef struct wait_object_waiting_information { 00149 WINFO winfo; /* 標準の待ち情報ブロック */ 00150 WOBJCB *wobjcb; /* 待ちオブジェクトの管理ブロック */ 00151 CCB *ccb; /* 待ちオブジェクトが属しているクラス */ 00152 } WINFO_WOBJ; 00153 00154 /* 00155 * 同期・通信オブジェクトに対する待ち状態への移行 00156 * 00157 * 実行中のタスクを待ち状態に移行させ,同期・通信オブジェクトの待ちキュー 00158 * につなぐ.また,待ち情報ブロック(WINFO)の wobjcb を設定する. 00159 * wobj_make_wait_tmout は,タイムイベントブロックの登録も行う. 00160 */ 00161 extern void wobj_make_wait(CCB *ccb, WOBJCB *wobjcb, WINFO_WOBJ *winfo); 00162 extern void wobj_make_wait_tmout(CCB *ccb, WOBJCB *wobjcb, 00163 WINFO_WOBJ *winfo, TMEVTB *tmevtb, 00164 TMO tmout); 00165 00166 00167 /* 00168 * タスク優先度変更時の処理 00169 * 00170 * 同期・通信オブジェクトに対する待ち状態にあるタスクの優先度が変更さ 00171 * れた場合に,待ちキューの中でのタスクの位置を修正する. 00172 */ 00173 extern void wobj_change_priority(WOBJCB *wobjcb, TCB *tcb); 00174 00175 00176 #endif /* _WAIT_H_ */ Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:13 2006 に Doxygen によって生成されました。 |