kernel.h

説明を見る。
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.

ホームページ制作