|
|
kernel.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) 2004 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: kernel.h,v 1.7 2006/03/21 09:48:03 honda Exp $ 00039 */ 00040 00065 #ifndef _KERNEL_H_ 00066 #define _KERNEL_H_ 00067 00068 #ifdef __cplusplus 00069 extern "C" { 00070 #endif 00071 00072 /* 00073 * カーネル・アプリケーション 共通インクルードファイル 00074 */ 00075 #include <t_stddef.h> 00076 00077 /* 00078 * ITRON仕様共通規定のデータ型・定数・マクロ 00079 */ 00080 #include <itron.h> 00081 00082 /* 00083 * システムやプロセッサに依存する定義 00084 */ 00085 #include <sys_defs.h> 00086 #include <cpu_defs.h> 00087 00088 /* 00089 * システムログサービスのための定義 00090 */ 00091 #include <t_syslog.h> 00092 00093 /* 00094 * 補助マクロ 00095 */ 00096 #define TROUND_VP(sz) (((sz) + sizeof(VP) - 1) & ~(sizeof(VP) - 1)) 00097 #define TCOUNT_VP(sz) (((sz) + sizeof(VP) - 1) / sizeof(VP)) 00098 00099 /* 00100 * データ型の定義 00101 */ 00102 #ifndef _MACRO_ONLY 00103 00104 typedef UINT TEXPTN; /* タスク例外要因のビットパターン */ 00105 typedef UINT FLGPTN; /* イベントフラグのビットパターン */ 00106 00107 typedef struct t_msg { /* メールボックスのメッセージヘッダ */ 00108 struct t_msg *next; 00109 } T_MSG; 00110 00111 typedef struct t_msg_pri { /* 優先度付きメッセージヘッダ */ 00112 T_MSG msgque; /* メッセージヘッダ */ 00113 PRI msgpri; /* メッセージ優先度 */ 00114 } T_MSG_PRI; 00115 00116 #endif /* _MACRO_ONLY */ 00117 00118 /* 00119 * サービスコールの宣言 00120 */ 00121 #ifndef _MACRO_ONLY 00122 00123 /* 00124 * タスク管理機能 00125 */ 00126 extern ER act_tsk(ID tskid) throw(); 00127 extern ER iact_tsk(ID tskid) throw(); 00128 extern ER_UINT can_act(ID tskid) throw(); 00129 extern void ext_tsk(void) throw(); 00130 extern ER ter_tsk(ID tskid) throw(); 00131 extern ER chg_pri(ID tskid, PRI tskpri) throw(); 00132 extern ER get_pri(ID tskid, PRI *p_tskpri) throw(); 00133 00134 /* 00135 * タスク付属同期機能 00136 */ 00137 extern ER slp_tsk(void) throw(); 00138 extern ER tslp_tsk(TMO tmout) throw(); 00139 extern ER wup_tsk(ID tskid) throw(); 00140 extern ER iwup_tsk(ID tskid) throw(); 00141 extern ER_UINT can_wup(ID tskid) throw(); 00142 extern ER rel_wai(ID tskid) throw(); 00143 extern ER irel_wai(ID tskid) throw(); 00144 extern ER sus_tsk(ID tskid) throw(); 00145 extern ER rsm_tsk(ID tskid) throw(); 00146 extern ER frsm_tsk(ID tskid) throw(); 00147 extern ER dly_tsk(RELTIM dlytim) throw(); 00148 00149 /* 00150 * タスク例外処理機能 00151 */ 00152 extern ER ras_tex(ID tskid, TEXPTN rasptn) throw(); 00153 extern ER iras_tex(ID tskid, TEXPTN rasptn) throw(); 00154 extern ER dis_tex(void) throw(); 00155 extern ER ena_tex(void) throw(); 00156 extern BOOL sns_tex(void) throw(); 00157 00158 /* 00159 * 同期・通信機能 00160 */ 00161 extern ER sig_sem(ID semid) throw(); 00162 extern ER isig_sem(ID semid) throw(); 00163 extern ER wai_sem(ID semid) throw(); 00164 extern ER pol_sem(ID semid) throw(); 00165 extern ER twai_sem(ID semid, TMO tmout) throw(); 00166 00167 extern ER set_flg(ID flgid, FLGPTN setptn) throw(); 00168 extern ER iset_flg(ID flgid, FLGPTN setptn) throw(); 00169 extern ER clr_flg(ID flgid, FLGPTN clrptn) throw(); 00170 extern ER wai_flg(ID flgid, FLGPTN waiptn, 00171 MODE wfmode, FLGPTN *p_flgptn) throw(); 00172 extern ER pol_flg(ID flgid, FLGPTN waiptn, 00173 MODE wfmode, FLGPTN *p_flgptn) throw(); 00174 extern ER twai_flg(ID flgid, FLGPTN waiptn, 00175 MODE wfmode, FLGPTN *p_flgptn, TMO tmout) throw(); 00176 00177 extern ER snd_dtq(ID dtqid, VP_INT data) throw(); 00178 extern ER psnd_dtq(ID dtqid, VP_INT data) throw(); 00179 extern ER ipsnd_dtq(ID dtqid, VP_INT data) throw(); 00180 extern ER tsnd_dtq(ID dtqid, VP_INT data, TMO tmout) throw(); 00181 extern ER fsnd_dtq(ID dtqid, VP_INT data) throw(); 00182 extern ER ifsnd_dtq(ID dtqid, VP_INT data) throw(); 00183 extern ER rcv_dtq(ID dtqid, VP_INT *p_data) throw(); 00184 extern ER prcv_dtq(ID dtqid, VP_INT *p_data) throw(); 00185 extern ER trcv_dtq(ID dtqid, VP_INT *p_data, TMO tmout) throw(); 00186 00187 extern ER snd_mbx(ID mbxid, T_MSG *pk_msg) throw(); 00188 extern ER rcv_mbx(ID mbxid, T_MSG **ppk_msg) throw(); 00189 extern ER prcv_mbx(ID mbxid, T_MSG **ppk_msg) throw(); 00190 extern ER trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout) throw(); 00191 00192 /* 00193 * メモリプール管理機能 00194 */ 00195 extern ER get_mpf(ID mpfid, VP *p_blk) throw(); 00196 extern ER pget_mpf(ID mpfid, VP *p_blk) throw(); 00197 extern ER tget_mpf(ID mpfid, VP *p_blk, TMO tmout) throw(); 00198 extern ER rel_mpf(ID mpfid, VP blk) throw(); 00199 00200 /* 00201 * 時間管理機能 00202 */ 00203 extern ER set_tim(const SYSTIM *p_systim) throw(); 00204 extern ER get_tim(SYSTIM *p_systim) throw(); 00205 extern ER isig_tim(void) throw(); 00206 00207 extern ER sta_cyc(ID cycid) throw(); 00208 extern ER stp_cyc(ID cycid) throw(); 00209 00210 /* 00211 * システム状態管理機能 00212 */ 00213 extern ER mrot_rdq(ID clsid, PRI tskpri) throw(); 00214 extern ER rot_rdq(PRI tskpri) throw(); 00215 extern ER imrot_rdq(ID clsid, PRI tskpri) throw(); 00216 extern ER irot_rdq(PRI tskpri) throw(); 00217 extern ER get_tid(ID *p_tskid) throw(); 00218 extern ER mget_tid(ID clsid, ID *p_tskid) throw(); 00219 extern ER imget_tid(ID clsid, ID *p_tskid) throw(); 00220 extern ER iget_tid(ID *p_tskid) throw(); 00221 extern ER loc_cpu(void) throw(); 00222 extern ER iloc_cpu(void) throw(); 00223 extern ER unl_cpu(void) throw(); 00224 extern ER iunl_cpu(void) throw(); 00225 extern ER dis_dsp(void) throw(); 00226 extern ER ena_dsp(void) throw(); 00227 extern BOOL sns_ctx(void) throw(); 00228 extern BOOL sns_loc(void) throw(); 00229 extern BOOL sns_dsp(void) throw(); 00230 extern BOOL sns_dpn(void) throw(); 00231 00232 /* 00233 * 実装独自サービスコール 00234 */ 00235 extern BOOL vxsns_ctx(VP p_excinf) throw(); 00236 extern BOOL vxsns_loc(VP p_excinf) throw(); 00237 extern BOOL vxsns_dsp(VP p_excinf) throw(); 00238 extern BOOL vxsns_dpn(VP p_excinf) throw(); 00239 extern BOOL vxsns_tex(VP p_excinf) throw(); 00240 extern BOOL vsns_ini(void) throw(); 00241 00242 #endif /* _MACRO_ONLY */ 00243 00244 /* 00245 * オブジェクト属性の定義 00246 */ 00247 #define TA_HLNG 0x00u /* 高級言語用インタフェース */ 00248 #define TA_ASM 0x01u /* アセンブリ言語用インタフェース */ 00249 00250 #define TA_TFIFO 0x00u /* タスクの待ち行列をFIFO順に */ 00251 #define TA_TPRI 0x01u /* タスクの待ち行列を優先度順に */ 00252 00253 #define TA_MFIFO 0x00u /* メッセージキューをFIFO順に */ 00254 #define TA_MPRI 0x02u /* メッセージキューを優先度順に */ 00255 00256 #define TA_ACT 0x02u /* タスクを起動された状態で生成 */ 00257 00258 #define TA_WSGL 0x00u /* イベントフラグの待ちタスクを1つに */ 00259 #define TA_CLR 0x04u /* イベントフラグのクリア指定 */ 00260 00261 #define TA_STA 0x02u /* 周期ハンドラを動作状態で生成 */ 00262 00263 /* 00264 * サービスコールの動作モードの定義 00265 */ 00266 #define TWF_ANDW 0x00u /* イベントフラグのAND待ち */ 00267 #define TWF_ORW 0x01u /* イベントフラグのOR待ち */ 00268 00269 /* 00270 * その他の定数の定義 00271 */ 00272 #define TSK_SELF 0 /* 自タスク指定 */ 00273 #define TSK_NONE 0 /* 該当するタスクがない */ 00274 #define TPRI_SELF 0 /* 自タスクのベース優先度の指定 */ 00275 #define TPRI_INI 0 /* タスクの起動時優先度の指定 */ 00276 #define TCLS_SELF 0 /* 自クラス指定 */ 00277 /* 00278 * 構成定数とマクロ 00279 */ 00280 00281 /* 00282 * 優先度の範囲 00283 */ 00284 #define TMIN_TPRI 1 /* タスク優先度の最小値 */ 00285 #define TMAX_TPRI 16 /* タスク優先度の最大値 */ 00286 #define TMIN_MPRI 1 /* メッセージ優先度の最小値 */ 00287 #define TMAX_MPRI 16 /* メッセージ優先度の最大値 */ 00288 00289 /* 00290 * バージョン情報 00291 */ 00292 #define TKERNEL_MAKER 0x0118u /* カーネルのメーカーコード */ 00293 #define TKERNEL_PRID 0x0005u /* カーネルの識別番号 */ 00294 #define TKERNEL_SPVER 0x5402u /* ITRON仕様のバージョン番号 */ 00295 #define TKERNEL_PRVER 0x1010u /* カーネルのバージョン番号 */ 00296 00297 /* 00298 * キューイング/ネスト回数の最大値 00299 */ 00300 #define TMAX_ACTCNT 1 /* 起動要求キューイング数の最大値 */ 00301 #define TMAX_WUPCNT 1 /* 起床要求キューイング数の最大値 */ 00302 #define TMAX_SUSCNT 1 /* 強制待ち要求ネスト数の最大値 */ 00303 00304 /* 00305 * ビットパターンのビット数 00306 */ 00307 #define TBIT_TEXPTN (sizeof(TEXPTN) * CHAR_BIT) 00308 /* タスク例外要因のビット数 */ 00309 #define TBIT_FLGPTN (sizeof(FLGPTN) * CHAR_BIT) 00310 /* イベントフラグのビット数 */ 00311 00312 #ifdef __cplusplus 00313 } 00314 #endif 00315 00316 #endif /* _KERNEL_H_ */ Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:12 2006 に Doxygen によって生成されました。 |