00001 /* 00002 * TOPPERS/ASP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Advanced Standard Profile Kernel 00005 * 00006 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 00007 * Toyohashi Univ. of Technology, JAPAN 00008 * Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory 00009 * Graduate School of Information Science, Nagoya Univ., JAPAN 00010 * 00011 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 00012 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 00013 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 00014 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00015 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00016 * スコード中に含まれていること. 00017 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00018 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00019 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00020 * の無保証規定を掲載すること. 00021 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00022 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00023 * と. 00024 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00025 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00026 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00027 * 報告すること. 00028 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00029 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00030 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 00031 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 00032 * 免責すること. 00033 * 00034 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00035 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 00036 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 00037 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 00038 * の責任を負わない. 00039 * 00040 * @(#) $Id: kernel.h 998 2008-04-30 01:54:44Z ertl-hiro $ 00041 */ 00042 00043 /* 00044 * TOPPERS/ASPカーネル 標準ヘッダファイル 00045 * 00046 * TOPPERS/ASPカーネルがサポートするサービスコールの宣言と,必要なデー 00047 * タ型,定数,マクロの定義を含むヘッダファイル. 00048 * 00049 * アセンブリ言語のソースファイルからこのファイルをインクルードする時 00050 * は,TOPPERS_MACRO_ONLYを定義しておく.これにより,マクロ定義以外を 00051 * 除くようになっている. 00052 * 00053 * このファイルをインクルードする前にインクルードしておくべきファイル 00054 * はない. 00055 */ 00056 00057 #ifndef TOPPERS_KERNEL_H 00058 #define TOPPERS_KERNEL_H 00059 00060 #ifdef __cplusplus 00061 extern "C" { 00062 #endif 00063 00064 /* 00065 * TOPPERS共通のデータ型・定数・マクロ 00066 */ 00067 #include <t_stddef.h> 00068 00069 /* 00070 * ターゲット依存部 00071 */ 00072 #include "target_kernel.h" 00073 00074 #ifndef TOPPERS_MACRO_ONLY 00075 00076 /* 00077 * データ型の定義 00078 */ 00079 00080 /* 00081 * ビットパターンやオブジェクト番号の型定義 00082 */ 00083 typedef uint_t TEXPTN; /* タスク例外要因のビットパターン */ 00084 typedef uint_t FLGPTN; /* イベントフラグのビットパターン */ 00085 typedef uint_t INHNO; /* 割込みハンドラ番号 */ 00086 typedef uint_t INTNO; /* 割込み番号 */ 00087 typedef uint_t EXCNO; /* CPU例外ハンドラ番号 */ 00088 00089 /* 00090 * 処理単位の型定義 00091 */ 00092 typedef void (*TASK)(intptr_t exinf); 00093 typedef void (*TEXRTN)(TEXPTN texptn, intptr_t exinf); 00094 typedef void (*INTHDR)(void); 00095 typedef void (*ISR)(intptr_t exinf); 00096 typedef void (*CYCHDR)(intptr_t exinf); 00097 typedef void (*ALMHDR)(intptr_t exinf); 00098 typedef void (*EXCHDR)(void *p_excinf); 00099 typedef void (*INIRTN)(intptr_t exinf); 00100 typedef void (*TERRTN)(intptr_t exinf); 00101 00102 /* 00103 * メモリ領域確保のための型定義 00104 */ 00105 #ifndef TOPPERS_STK_T 00106 #define TOPPERS_STK_T intptr_t 00107 #endif /* TOPPERS_STK_T */ 00108 typedef TOPPERS_STK_T STK_T; /* スタック領域を確保するための型 */ 00109 00110 #ifndef TOPPERS_MPF_T 00111 #define TOPPERS_MPF_T intptr_t 00112 #endif /* TOPPERS_MPF_T */ 00113 typedef TOPPERS_MPF_T MPF_T; /* 固定長メモリプール領域を確保するための型 */ 00114 00115 /* 00116 * メッセージヘッダの型定義 00117 */ 00118 typedef struct t_msg { /* メールボックスのメッセージヘッダ */ 00119 struct t_msg *pk_next; 00120 } T_MSG; 00121 00122 typedef struct t_msg_pri { /* 優先度付きメッセージヘッダ */ 00123 T_MSG msgque; /* メッセージヘッダ */ 00124 PRI msgpri; /* メッセージ優先度 */ 00125 } T_MSG_PRI; 00126 00127 /* 00128 * パケット形式の定義 00129 */ 00130 typedef struct t_rtsk { 00131 STAT tskstat; /* タスク状態 */ 00132 PRI tskpri; /* タスクの現在優先度 */ 00133 PRI tskbpri; /* タスクのベース優先度 */ 00134 STAT tskwait; /* 待ち要因 */ 00135 ID wobjid; /* 待ち対象のオブジェクトのID */ 00136 TMO lefttmo; /* タイムアウトするまでの時間 */ 00137 uint_t actcnt; /* 起動要求キューイング数 */ 00138 uint_t wupcnt; /* 起床要求キューイング数 */ 00139 } T_RTSK; 00140 00141 typedef struct t_rtex { 00142 STAT texstat; /* タスク例外処理の状態 */ 00143 TEXPTN pndptn; /* 保留例外要因 */ 00144 } T_RTEX; 00145 00146 typedef struct t_rsem { 00147 ID wtskid; /* セマフォの待ち行列の先頭タスクのID */ 00148 uint_t semcnt; /* セマフォの現在の資源数 */ 00149 } T_RSEM; 00150 00151 typedef struct t_rflg { 00152 ID wtskid; /* イベントフラグの待ち行列の先頭タスクのID */ 00153 FLGPTN flgptn; /* イベントフラグの現在のビットパターン */ 00154 } T_RFLG; 00155 00156 typedef struct t_rdtq { 00157 ID stskid; /* データキューの送信待ち行列の先頭タスクのID */ 00158 ID rtskid; /* データキューの受信待ち行列の先頭タスクのID */ 00159 uint_t sdtqcnt; /* データキューに入っているデータの数 */ 00160 } T_RDTQ; 00161 00162 typedef struct t_rpdq { 00163 ID stskid; /* 優先度データキューの送信待ち行列の先頭タスクのID */ 00164 ID rtskid; /* 優先度データキューの受信待ち行列の先頭タスクのID */ 00165 uint_t spdqcnt; /* 優先度データキューに入っているデータの数 */ 00166 } T_RPDQ; 00167 00168 typedef struct t_rmbx { 00169 ID wtskid; /* メールボックスの待ち行列の先頭タスクのID */ 00170 T_MSG *pk_msg; /* メッセージキューの先頭のメッセージパケット */ 00171 } T_RMBX; 00172 00173 typedef struct t_rmpf { 00174 ID wtskid; /* 固定長メモリプールの待ち行列の先頭タスクのID */ 00175 uint_t fblkcnt; /* 固定長メモリプールの空きメモリブロック数 */ 00176 } T_RMPF; 00177 00178 typedef struct t_rcyc { 00179 STAT cycstat; /* 周期ハンドラの動作状態 */ 00180 RELTIM lefttim; /* 周期ハンドラを次に起動すべき時刻までの時間 */ 00181 } T_RCYC; 00182 00183 typedef struct t_ralm { 00184 STAT almstat; /* アラームハンドラの動作状態 */ 00185 RELTIM lefttim; /* アラームハンドラの起動時刻までの時間 */ 00186 } T_RALM; 00187 00188 /* 00189 * サービスコールの宣言 00190 */ 00191 00192 /* 00193 * タスク管理機能 00194 */ 00195 extern ER act_tsk(ID tskid) throw(); 00196 extern ER iact_tsk(ID tskid) throw(); 00197 extern ER_UINT can_act(ID tskid) throw(); 00198 extern ER ext_tsk(void) throw(); 00199 extern ER ter_tsk(ID tskid) throw(); 00200 extern ER chg_pri(ID tskid, PRI tskpri) throw(); 00201 extern ER get_pri(ID tskid, PRI *p_tskpri) throw(); 00202 extern ER get_inf(intptr_t *p_exinf) throw(); 00203 extern ER ref_tsk(ID tskid, T_RTSK *pk_rtsk) throw(); 00204 00205 /* 00206 * タスク付属同期機能 00207 */ 00208 extern ER slp_tsk(void) throw(); 00209 extern ER tslp_tsk(TMO tmout) throw(); 00210 extern ER wup_tsk(ID tskid) throw(); 00211 extern ER iwup_tsk(ID tskid) throw(); 00212 extern ER_UINT can_wup(ID tskid) throw(); 00213 extern ER rel_wai(ID tskid) throw(); 00214 extern ER irel_wai(ID tskid) throw(); 00215 extern ER sus_tsk(ID tskid) throw(); 00216 extern ER rsm_tsk(ID tskid) throw(); 00217 extern ER dly_tsk(RELTIM dlytim) throw(); 00218 00219 /* 00220 * タスク例外処理機能 00221 */ 00222 extern ER ras_tex(ID tskid, TEXPTN rasptn) throw(); 00223 extern ER iras_tex(ID tskid, TEXPTN rasptn) throw(); 00224 extern ER dis_tex(void) throw(); 00225 extern ER ena_tex(void) throw(); 00226 extern bool_t sns_tex(void) throw(); 00227 extern ER ref_tex(ID tskid, T_RTEX *pk_rtex) throw(); 00228 00229 /* 00230 * 同期・通信機能 00231 */ 00232 extern ER sig_sem(ID semid) throw(); 00233 extern ER isig_sem(ID semid) throw(); 00234 extern ER wai_sem(ID semid) throw(); 00235 extern ER pol_sem(ID semid) throw(); 00236 extern ER twai_sem(ID semid, TMO tmout) throw(); 00237 extern ER ini_sem(ID semid) throw(); 00238 extern ER ref_sem(ID semid, T_RSEM *pk_rsem) throw(); 00239 00240 extern ER set_flg(ID flgid, FLGPTN setptn) throw(); 00241 extern ER iset_flg(ID flgid, FLGPTN setptn) throw(); 00242 extern ER clr_flg(ID flgid, FLGPTN clrptn) throw(); 00243 extern ER wai_flg(ID flgid, FLGPTN waiptn, 00244 MODE wfmode, FLGPTN *p_flgptn) throw(); 00245 extern ER pol_flg(ID flgid, FLGPTN waiptn, 00246 MODE wfmode, FLGPTN *p_flgptn) throw(); 00247 extern ER twai_flg(ID flgid, FLGPTN waiptn, 00248 MODE wfmode, FLGPTN *p_flgptn, TMO tmout) throw(); 00249 extern ER ini_flg(ID flgid) throw(); 00250 extern ER ref_flg(ID flgid, T_RFLG *pk_rflg) throw(); 00251 00252 extern ER snd_dtq(ID dtqid, intptr_t data) throw(); 00253 extern ER psnd_dtq(ID dtqid, intptr_t data) throw(); 00254 extern ER ipsnd_dtq(ID dtqid, intptr_t data) throw(); 00255 extern ER tsnd_dtq(ID dtqid, intptr_t data, TMO tmout) throw(); 00256 extern ER fsnd_dtq(ID dtqid, intptr_t data) throw(); 00257 extern ER ifsnd_dtq(ID dtqid, intptr_t data) throw(); 00258 extern ER rcv_dtq(ID dtqid, intptr_t *p_data) throw(); 00259 extern ER prcv_dtq(ID dtqid, intptr_t *p_data) throw(); 00260 extern ER trcv_dtq(ID dtqid, intptr_t *p_data, TMO tmout) throw(); 00261 extern ER ini_dtq(ID dtqid) throw(); 00262 extern ER ref_dtq(ID dtqid, T_RDTQ *pk_rdtq) throw(); 00263 00264 extern ER snd_pdq(ID pdqid, intptr_t data, PRI datapri) throw(); 00265 extern ER psnd_pdq(ID pdqid, intptr_t data, PRI datapri) throw(); 00266 extern ER ipsnd_pdq(ID pdqid, intptr_t data, PRI datapri) throw(); 00267 extern ER tsnd_pdq(ID pdqid, intptr_t data, 00268 PRI datapri, TMO tmout) throw(); 00269 extern ER rcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri) throw(); 00270 extern ER prcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri) throw(); 00271 extern ER trcv_pdq(ID pdqid, intptr_t *p_data, 00272 PRI *p_datapri, TMO tmout) throw(); 00273 extern ER ini_pdq(ID pdqid) throw(); 00274 extern ER ref_pdq(ID pdqid, T_RPDQ *pk_rpdq) throw(); 00275 00276 extern ER snd_mbx(ID mbxid, T_MSG *pk_msg) throw(); 00277 extern ER rcv_mbx(ID mbxid, T_MSG **ppk_msg) throw(); 00278 extern ER prcv_mbx(ID mbxid, T_MSG **ppk_msg) throw(); 00279 extern ER trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout) throw(); 00280 extern ER ini_mbx(ID mbxid) throw(); 00281 extern ER ref_mbx(ID mbxid, T_RMBX *pk_rmbx) throw(); 00282 00283 /* 00284 * メモリプール管理機能 00285 */ 00286 extern ER get_mpf(ID mpfid, void **p_blk) throw(); 00287 extern ER pget_mpf(ID mpfid, void **p_blk) throw(); 00288 extern ER tget_mpf(ID mpfid, void **p_blk, TMO tmout) throw(); 00289 extern ER rel_mpf(ID mpfid, void *blk) throw(); 00290 extern ER ini_mpf(ID mpfid) throw(); 00291 extern ER ref_mpf(ID mpfid, T_RMPF *pk_rmpf) throw(); 00292 00293 /* 00294 * 時間管理機能 00295 */ 00296 extern ER get_tim(SYSTIM *p_systim) throw(); 00297 extern ER get_utm(SYSUTM *p_sysutm) throw(); 00298 00299 extern ER sta_cyc(ID cycid) throw(); 00300 extern ER stp_cyc(ID cycid) throw(); 00301 extern ER ref_cyc(ID cycid, T_RCYC *pk_rcyc) throw(); 00302 00303 extern ER sta_alm(ID almid, RELTIM almtim) throw(); 00304 extern ER ista_alm(ID almid, RELTIM almtim) throw(); 00305 extern ER stp_alm(ID almid) throw(); 00306 extern ER istp_alm(ID almid) throw(); 00307 extern ER ref_alm(ID almid, T_RALM *pk_ralm) throw(); 00308 00309 /* 00310 * システム状態管理機能 00311 */ 00312 extern ER rot_rdq(PRI tskpri) throw(); 00313 extern ER irot_rdq(PRI tskpri) throw(); 00314 extern ER get_tid(ID *p_tskid) throw(); 00315 extern ER iget_tid(ID *p_tskid) throw(); 00316 extern ER loc_cpu(void) throw(); 00317 extern ER iloc_cpu(void) throw(); 00318 extern ER unl_cpu(void) throw(); 00319 extern ER iunl_cpu(void) throw(); 00320 extern ER dis_dsp(void) throw(); 00321 extern ER ena_dsp(void) throw(); 00322 extern bool_t sns_ctx(void) throw(); 00323 extern bool_t sns_loc(void) throw(); 00324 extern bool_t sns_dsp(void) throw(); 00325 extern bool_t sns_dpn(void) throw(); 00326 extern bool_t sns_ker(void) throw(); 00327 extern ER ext_ker(void) throw(); 00328 00329 /* 00330 * 割込み管理機能 00331 */ 00332 extern ER dis_int(INTNO intno) throw(); 00333 extern ER ena_int(INTNO intno) throw(); 00334 extern ER chg_ipm(PRI intpri) throw(); 00335 extern ER get_ipm(PRI *p_intpri) throw(); 00336 00337 /* 00338 * CPU例外管理機能 00339 */ 00340 extern bool_t xsns_dpn(void *p_excinf) throw(); 00341 extern bool_t xsns_xpn(void *p_excinf) throw(); 00342 00343 #endif /* TOPPERS_MACRO_ONLY */ 00344 00345 /* 00346 * オブジェクト属性の定義 00347 */ 00348 #define TA_ACT UINT_C(0x02) /* タスクを起動された状態で生成 */ 00349 00350 #define TA_TPRI UINT_C(0x01) /* タスクの待ち行列を優先度順に */ 00351 #define TA_MPRI UINT_C(0x02) /* メッセージキューを優先度順に */ 00352 00353 #define TA_WMUL UINT_C(0x02) /* 複数の待ちタスク */ 00354 #define TA_CLR UINT_C(0x04) /* イベントフラグのクリア指定 */ 00355 00356 #define TA_STA UINT_C(0x02) /* 周期ハンドラを動作状態で生成 */ 00357 00358 #define TA_NONKERNEL UINT_C(0x02) /* カーネル管理外の割込み */ 00359 00360 #define TA_ENAINT UINT_C(0x01) /* 割込み要求禁止フラグをクリア */ 00361 #define TA_EDGE UINT_C(0x02) /* エッジトリガ */ 00362 00363 /* 00364 * サービスコールの動作モードの定義 00365 */ 00366 #define TWF_ORW UINT_C(0x01) /* イベントフラグのOR待ち */ 00367 #define TWF_ANDW UINT_C(0x02) /* イベントフラグのAND待ち */ 00368 00369 /* 00370 * オブジェクトの状態の定義 00371 */ 00372 #define TTS_RUN UINT_C(0x01) /* 実行状態 */ 00373 #define TTS_RDY UINT_C(0x02) /* 実行可能状態 */ 00374 #define TTS_WAI UINT_C(0x04) /* 待ち状態 */ 00375 #define TTS_SUS UINT_C(0x08) /* 強制待ち状態 */ 00376 #define TTS_WAS UINT_C(0x0c) /* 二重待ち状態 */ 00377 #define TTS_DMT UINT_C(0x10) /* 休止状態 */ 00378 00379 #define TTW_SLP UINT_C(0x0001) /* 起床待ち */ 00380 #define TTW_DLY UINT_C(0x0002) /* 時間経過待ち */ 00381 #define TTW_SEM UINT_C(0x0004) /* セマフォ資源の獲得待ち */ 00382 #define TTW_FLG UINT_C(0x0008) /* イベントフラグ待ち */ 00383 #define TTW_SDTQ UINT_C(0x0010) /* データキューへの送信待ち */ 00384 #define TTW_RDTQ UINT_C(0x0020) /* データキューからの受信待ち */ 00385 #define TTW_SPDQ UINT_C(0x0100) /* 優先度データキューへの送信待ち */ 00386 #define TTW_RPDQ UINT_C(0x0200) /* 優先度データキューからの受信待ち */ 00387 #define TTW_MBX UINT_C(0x0040) /* メールボックスからの受信待ち */ 00388 #define TTW_MPF UINT_C(0x2000) /* 固定長メモリブロックの獲得待ち */ 00389 00390 #define TTEX_ENA UINT_C(0x01) /* タスク例外処理許可状態 */ 00391 #define TTEX_DIS UINT_C(0x02) /* タスク例外処理禁止状態 */ 00392 00393 #define TCYC_STP UINT_C(0x01) /* 周期ハンドラが動作していない */ 00394 #define TCYC_STA UINT_C(0x02) /* 周期ハンドラが動作している */ 00395 00396 #define TALM_STP UINT_C(0x01) /* アラームハンドラが動作していない */ 00397 #define TALM_STA UINT_C(0x02) /* アラームハンドラが動作している */ 00398 00399 /* 00400 * その他の定数の定義 00401 */ 00402 #define TSK_SELF 0 /* 自タスク指定 */ 00403 #define TSK_NONE 0 /* 該当するタスクがない */ 00404 00405 #define TPRI_SELF 0 /* 自タスクのベース優先度 */ 00406 #define TPRI_INI 0 /* タスクの起動時優先度 */ 00407 00408 #define TIPM_ENAALL 0 /* 割込み優先度マスク全解除 */ 00409 00410 /* 00411 * 構成定数とマクロ 00412 */ 00413 00414 /* 00415 * 優先度の範囲 00416 */ 00417 #define TMIN_TPRI 1 /* タスク優先度の最小値(最高値)*/ 00418 #define TMAX_TPRI 16 /* タスク優先度の最大値(最低値)*/ 00419 #define TMIN_DPRI 1 /* データ優先度の最小値(最高値)*/ 00420 #define TMAX_DPRI 16 /* データ優先度の最大値(最低値)*/ 00421 #define TMIN_MPRI 1 /* メッセージ優先度の最小値(最高値)*/ 00422 #define TMAX_MPRI 16 /* メッセージ優先度の最大値(最低値)*/ 00423 00424 /* 00425 * バージョン情報 00426 */ 00427 #define TKERNEL_MAKER UINT_C(0x0118) /* カーネルのメーカーコード */ 00428 #define TKERNEL_PRID UINT_C(0x0007) /* カーネルの識別番号 */ 00429 #define TKERNEL_SPVER UINT_C(0xf5b0) /* ITRON仕様のバージョン番号 */ 00430 #define TKERNEL_PRVER UINT_C(0x1031) /* カーネルのバージョン番号 */ 00431 00432 /* 00433 * キューイング回数の最大値 00434 */ 00435 #define TMAX_ACTCNT UINT_C(1) /* 起動要求キューイング数の最大値 */ 00436 #define TMAX_WUPCNT UINT_C(1) /* 起床要求キューイング数の最大値 */ 00437 00438 /* 00439 * ビットパターンのビット数 00440 */ 00441 #ifndef TBIT_TEXPTN /* タスク例外要因のビット数 */ 00442 #define TBIT_TEXPTN (sizeof(TEXPTN) * CHAR_BIT) 00443 #endif /* TBIT_TEXPTN */ 00444 00445 #ifndef TBIT_FLGPTN /* イベントフラグのビット数 */ 00446 #define TBIT_FLGPTN (sizeof(FLGPTN) * CHAR_BIT) 00447 #endif /* TBIT_FLGPTN */ 00448 00449 /* 00450 * メモリ領域確保のためのマクロ 00451 * 00452 * 以下のTOPPERS_COUNT_SZとTOPPERS_ROUND_SZの定義は,unitが2の巾乗であ 00453 * ることを仮定している. 00454 */ 00455 #ifndef TOPPERS_COUNT_SZ 00456 #define TOPPERS_COUNT_SZ(sz, unit) (((sz) + (unit) - 1) / (unit)) 00457 #endif /* TOPPERS_COUNT_SZ */ 00458 #ifndef TOPPERS_ROUND_SZ 00459 #define TOPPERS_ROUND_SZ(sz, unit) (((sz) + (unit) - 1) & ~((unit) - 1)) 00460 #endif /* TOPPERS_ROUND_SZ */ 00461 00462 #define COUNT_STK_T(sz) TOPPERS_COUNT_SZ(sz, sizeof(STK_T)) 00463 #define ROUND_STK_T(sz) TOPPERS_ROUND_SZ(sz, sizeof(STK_T)) 00464 00465 #define COUNT_MPF_T(sz) TOPPERS_COUNT_SZ(sz, sizeof(MPF_T)) 00466 #define ROUND_MPF_T(sz) TOPPERS_ROUND_SZ(sz, sizeof(MPF_T)) 00467 00468 /* 00469 * 必要なメモリ領域のサイズ 00470 */ 00471 #define TSZ_MPF(blkcnt, blksz) ((blkcnt) * ROUND_MPF_T(blksz)) 00472 00473 /* 00474 * その他の構成定数 00475 */ 00476 #define TMAX_MAXSEM UINT_MAX /* セマフォの最大資源数の最大値 */ 00477 00478 #ifdef __cplusplus 00479 } 00480 #endif 00481 00482 #endif /* TOPPERS_KERNEL_H */
Copyright © 2008 by Kijineko Inc.