|
|
tcb.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-2003 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: tcb.h,v 1.2 2006/03/13 07:21:58 honda Exp $ 00039 */ 00040 00053 #ifndef _TCB_H_ 00054 #define _TCB_H_ 00055 00056 typedef struct task_control_block TCB; 00057 typedef struct task_initialization_block TINIB; 00058 00059 #include "queue.h" 00060 #include "time_event.h" 00061 00062 /* 00063 * タスク優先度の内部表現・外部表現変換マクロ 00064 */ 00065 #define INT_PRIORITY(x) ((UINT)((x) - TMIN_TPRI)) 00066 #define EXT_TSKPRI(x) ((PRI)(x) + TMIN_TPRI) 00067 00068 /* 00069 * タスク状態の内部表現 00070 * 00071 * TCB 中のタスク状態では,実行状態(RUNNING)と実行可能状態(READY) 00072 * は区別しない.二重待ち状態は,(TS_WAITING | TS_SUSPENDED) で表す. 00073 * TS_WAIT_???? は,待ち状態に伴う付属状態を表し,待ち状態(二重待ち 00074 * 状態を含む)の場合にのみ設定される. 00075 */ 00076 #define TS_DORMANT 0x00u /* 休止状態 */ 00077 #define TS_RUNNABLE 0x01u /* 実行できる状態 */ 00078 #define TS_WAITING 0x02u /* 待ち状態 */ 00079 #define TS_SUSPENDED 0x04u /* 強制待ち状態 */ 00080 00081 #define TS_WAIT_SLEEP 0x08u /* 起床待ち状態 */ 00082 #define TS_WAIT_WOBJ 0x10u /* 同期・通信オブジェクトに対する待ち状態 */ 00083 #define TS_WAIT_WOBJCB 0x20u /* 共通部分の待ちキューにつながっている */ 00084 00085 /* 00086 * タスク状態判別マクロ 00087 * 00088 * TSTAT_DORMANT はタスクが休止状態であるかどうかを,TSTAT_RUNNABLE 00089 * はタスクが実行できる状態であるかどうかを判別する.TSTAT_WAITING は 00090 * 待ち状態と二重待ち状態のいずれかであるかどうかを,TSTAT_SUSPENDED 00091 * は強制待ち状態と二重待ち状態のいずれかであるかどうかを判別する. 00092 */ 00093 #define TSTAT_DORMANT(tstat) ((tstat) == TS_DORMANT) 00094 #define TSTAT_RUNNABLE(tstat) (((tstat) & TS_RUNNABLE) != 0) 00095 #define TSTAT_WAITING(tstat) (((tstat) & TS_WAITING) != 0) 00096 #define TSTAT_SUSPENDED(tstat) (((tstat) & TS_SUSPENDED) != 0) 00097 00140 typedef union waiting_information { 00141 ER wercd; /* 待ち解除時のエラーコード */ 00142 TMEVTB *tmevtb; /* 待ち状態用のタイムイベントブロック */ 00143 } WINFO; 00144 00158 struct task_initialization_block { 00159 ATR tskatr; /* タスク属性 */ 00160 VP_INT exinf; /* タスクの拡張情報 */ 00161 FP task; /* タスクの起動番地 */ 00162 UINT ipriority; /* タスクの起動時優先度(内部表現) */ 00163 SIZE stksz; /* スタック領域のサイズ(丸めた値) */ 00164 VP stk; /* スタック領域の先頭番地 */ 00165 00166 ATR texatr; /* タスク例外処理ルーチン属性 */ 00167 FP texrtn; /* タスク例外処理ルーチンの起動番地 */ 00168 }; 00169 00170 /* 00171 * TCB 中のフィールドのビット幅の定義 00172 * 00173 * TCB 中のフィールドの配置は,性能に大きく影響すると思われるため,ター 00174 * ゲット依存にフィールドのビット幅を変更することを許している. 00175 */ 00176 #ifndef TBIT_TCB_TSTAT 00177 #define TBIT_TCB_TSTAT 6 /* tstat フィールドのビット幅 */ 00178 #endif /* TBIT_TCB_TSTAT */ 00179 00180 #ifndef TBIT_TCB_PRIORITY 00181 #define TBIT_TCB_PRIORITY 4 /* priority フィールドのビット幅 */ 00182 #endif /* TBIT_TCB_PRIORITY */ 00183 00193 struct task_control_block { 00194 QUEUE task_queue; /* タスクキュー */ 00195 const TINIB *tinib; /* タスク初期化ブロックへのポインタ */ 00196 00197 UINT tstat : TBIT_TCB_TSTAT; /* タスク状態(内部表現)*/ 00198 UINT priority : TBIT_TCB_PRIORITY; /* 現在の優先度(内部表現)*/ 00199 unsigned int actcnt : 1; /* 起動要求キューイング */ 00200 unsigned int wupcnt : 1; /* 起床要求キューイング */ 00201 unsigned int enatex : 1; /* タスク例外処理許可状態 */ 00202 00203 TEXPTN texptn; /* 保留例外要因 */ 00204 WINFO *winfo; /* 待ち情報ブロックへのポインタ */ 00205 CTXB tskctxb; /* タスクコンテキストブロック */ 00206 00207 ID clsid; /* クラスID */ 00208 BOOL pend_tertsk; /* タスクの強制終了保留 */ 00209 BOOL pend_chgpri; /* 優先度変更保留 */ 00210 BOOL pend_relwai; /* タスク強制待ち解除保留 */ 00211 BOOL terflg; /* exit_and_dispatch要求 */ 00212 UINT pend_newpri; /* 優先度変更保留の新優先度(内部表現)*/ 00213 }; 00214 00215 #endif /*_TCB_H_*/ Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:13 2006 に Doxygen によって生成されました。 |