OSDN Git Service

マルチプロジェクト型にレポジトリを変更するために移動した
[toppersasp4lpc/asp.git] / asp / include / kernel.h
1 /*
2  *  TOPPERS/ASP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Advanced Standard Profile Kernel
5  * 
6  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7  *                              Toyohashi Univ. of Technology, JAPAN
8  *  Copyright (C) 2004-2010 by Embedded and Real-Time Systems Laboratory
9  *              Graduate School of Information Science, Nagoya Univ., JAPAN
10  * 
11  *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13  *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16  *      スコード中に含まれていること.
17  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20  *      の無保証規定を掲載すること.
21  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23  *      と.
24  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
26  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27  *        報告すること.
28  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31  *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
32  *      免責すること.
33  * 
34  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
38  *  の責任を負わない.
39  * 
40  *  @(#) $Id: kernel.h 1862 2010-07-25 11:49:51Z ertl-hiro $
41  */
42
43 /*
44  *              TOPPERS/ASPカーネル 標準ヘッダファイル
45  *
46  *  TOPPERS/ASPカーネルがサポートするサービスコールの宣言と,必要なデー
47  *  タ型,定数,マクロの定義を含むヘッダファイル.
48  *
49  *  アセンブリ言語のソースファイルからこのファイルをインクルードする時
50  *  は,TOPPERS_MACRO_ONLYを定義しておく.これにより,マクロ定義以外を
51  *  除くようになっている.
52  *
53  *  このファイルをインクルードする前にインクルードしておくべきファイル
54  *  はない.
55  */
56
57 #ifndef TOPPERS_KERNEL_H
58 #define TOPPERS_KERNEL_H
59
60 #ifdef __cplusplus
61 extern "C" {
62 #endif
63
64 /*
65  *      TOPPERS共通のデータ型・定数・マクロ
66  */
67 #include <t_stddef.h>
68
69 /*
70  *  ターゲット依存部
71  */
72 #include "target_kernel.h"
73
74 #ifndef TOPPERS_MACRO_ONLY
75
76 /*
77  *  データ型の定義
78  */
79
80 /*
81  *  ビットパターンやオブジェクト番号の型定義
82  */
83 typedef uint_t          TEXPTN;         /* タスク例外要因のビットパターン */
84 typedef uint_t          FLGPTN;         /* イベントフラグのビットパターン */
85 typedef uint_t          INTNO;          /* 割込み番号 */
86 typedef uint_t          INHNO;          /* 割込みハンドラ番号 */
87 typedef uint_t          EXCNO;          /* CPU例外ハンドラ番号 */
88
89 /*
90  *  処理単位の型定義
91  */
92 typedef void    (*TASK)(intptr_t exinf);
93 typedef void    (*TEXRTN)(TEXPTN texptn, intptr_t exinf);
94 typedef void    (*CYCHDR)(intptr_t exinf);
95 typedef void    (*ALMHDR)(intptr_t exinf);
96 typedef void    (*ISR)(intptr_t exinf);
97 typedef void    (*INTHDR)(void);
98 typedef void    (*EXCHDR)(void *p_excinf);
99 typedef void    (*INIRTN)(intptr_t exinf);
100 typedef void    (*TERRTN)(intptr_t exinf);
101
102 /*
103  *  メモリ領域確保のための型定義
104  */
105 #ifndef TOPPERS_STK_T
106 #define TOPPERS_STK_T   intptr_t
107 #endif /* TOPPERS_STK_T */
108 typedef TOPPERS_STK_T   STK_T;  /* スタック領域を確保するための型 */
109
110 #ifndef TOPPERS_MPF_T
111 #define TOPPERS_MPF_T   intptr_t
112 #endif /* TOPPERS_MPF_T */
113 typedef TOPPERS_MPF_T   MPF_T;  /* 固定長メモリプール領域を確保するための型 */
114
115 /*
116  *  メッセージヘッダの型定義
117  */
118 typedef struct t_msg {                  /* メールボックスのメッセージヘッダ */
119         struct t_msg    *pk_next;
120 } T_MSG;
121
122 typedef struct t_msg_pri {              /* 優先度付きメッセージヘッダ */
123         T_MSG   msgque;                         /* メッセージヘッダ */
124         PRI             msgpri;                         /* メッセージ優先度 */
125 } T_MSG_PRI;
126
127 /*
128  *  パケット形式の定義
129  */
130 typedef struct t_rtsk {
131         STAT    tskstat;        /* タスク状態 */
132         PRI             tskpri;         /* タスクの現在優先度 */
133         PRI             tskbpri;        /* タスクのベース優先度 */
134         STAT    tskwait;        /* 待ち要因 */
135         ID              wobjid;         /* 待ち対象のオブジェクトのID */
136         TMO             lefttmo;        /* タイムアウトするまでの時間 */
137         uint_t  actcnt;         /* 起動要求キューイング数 */
138         uint_t  wupcnt;         /* 起床要求キューイング数 */
139 } T_RTSK;
140
141 typedef struct t_rtex {
142         STAT    texstat;        /* タスク例外処理の状態 */
143         TEXPTN  pndptn;         /* 保留例外要因 */
144 } T_RTEX;
145
146 typedef struct t_rsem {
147         ID              wtskid;         /* セマフォの待ち行列の先頭のタスクのID番号 */
148         uint_t  semcnt;         /* セマフォの現在の資源数 */
149 } T_RSEM;
150
151 typedef struct t_rflg {
152         ID              wtskid;         /* イベントフラグの待ち行列の先頭のタスクのID番号 */
153         FLGPTN  flgptn;         /* イベントフラグの現在のビットパターン */
154 } T_RFLG;
155
156 typedef struct t_rdtq {
157         ID              stskid;         /* データキューの送信待ち行列の先頭のタスクのID番号 */
158         ID              rtskid;         /* データキューの受信待ち行列の先頭のタスクのID番号 */
159         uint_t  sdtqcnt;        /* データキュー管理領域に格納されているデータの数 */
160 } T_RDTQ;
161
162 typedef struct t_rpdq {
163         ID              stskid;         /* 優先度データキューの送信待ち行列の先頭のタスク
164                                                    のID番号 */
165         ID              rtskid;         /* 優先度データキューの受信待ち行列の先頭のタスク
166                                                    のID番号 */
167         uint_t  spdqcnt;        /* 優先度データキュー管理領域に格納されているデー
168                                                    タの数 */
169 } T_RPDQ;
170
171 typedef struct t_rmbx {
172         ID              wtskid;         /* メールボックスの待ち行列の先頭のタスクのID番号 */
173         T_MSG   *pk_msg;        /* メッセージキューの先頭につながれたメッセージ
174                                                    の先頭番地 */
175 } T_RMBX;
176
177 typedef struct t_rmpf {
178         ID              wtskid;         /* 固定長メモリプールの待ち行列の先頭のタスクの
179                                                    ID番号 */
180         uint_t  fblkcnt;        /* 固定長メモリプール領域の空きメモリ領域に割り
181                                                    付けることができる固定長メモリブロックの数 */
182 } T_RMPF;
183
184 typedef struct t_rcyc {
185         STAT    cycstat;        /* 周期ハンドラの動作状態 */
186         RELTIM  lefttim;        /* 次に周期ハンドラを起動する時刻までの相対時間 */
187 } T_RCYC;
188
189 typedef struct t_ralm {
190         STAT    almstat;        /* アラームハンドラの動作状態 */
191         RELTIM  lefttim;        /* アラームハンドラを起動する時刻までの相対時間 */
192 } T_RALM;
193
194 /*
195  *  サービスコールの宣言
196  */
197
198 /*
199  *  タスク管理機能
200  */
201 extern ER               act_tsk(ID tskid) throw();
202 extern ER               iact_tsk(ID tskid) throw();
203 extern ER_UINT  can_act(ID tskid) throw();
204 extern ER               ext_tsk(void) throw();
205 extern ER               ter_tsk(ID tskid) throw();
206 extern ER               chg_pri(ID tskid, PRI tskpri) throw();
207 extern ER               get_pri(ID tskid, PRI *p_tskpri) throw();
208 extern ER               get_inf(intptr_t *p_exinf) throw();
209 extern ER               ref_tsk(ID tskid, T_RTSK *pk_rtsk) throw();
210
211 /*
212  *  タスク付属同期機能
213  */
214 extern ER               slp_tsk(void) throw();
215 extern ER               tslp_tsk(TMO tmout) throw();
216 extern ER               wup_tsk(ID tskid) throw();
217 extern ER               iwup_tsk(ID tskid) throw();
218 extern ER_UINT  can_wup(ID tskid) throw();
219 extern ER               rel_wai(ID tskid) throw();
220 extern ER               irel_wai(ID tskid) throw();
221 extern ER               sus_tsk(ID tskid) throw();
222 extern ER               rsm_tsk(ID tskid) throw();
223 extern ER               dly_tsk(RELTIM dlytim) throw();
224
225 /*
226  *  タスク例外処理機能
227  */
228 extern ER               ras_tex(ID tskid, TEXPTN rasptn) throw();
229 extern ER               iras_tex(ID tskid, TEXPTN rasptn) throw();
230 extern ER               dis_tex(void) throw();
231 extern ER               ena_tex(void) throw();
232 extern bool_t   sns_tex(void) throw();
233 extern ER               ref_tex(ID tskid, T_RTEX *pk_rtex) throw();
234
235 /*
236  *  同期・通信機能
237  */
238 extern ER               sig_sem(ID semid) throw();
239 extern ER               isig_sem(ID semid) throw();
240 extern ER               wai_sem(ID semid) throw();
241 extern ER               pol_sem(ID semid) throw();
242 extern ER               twai_sem(ID semid, TMO tmout) throw();
243 extern ER               ini_sem(ID semid) throw();
244 extern ER               ref_sem(ID semid, T_RSEM *pk_rsem) throw();
245
246 extern ER               set_flg(ID flgid, FLGPTN setptn) throw();
247 extern ER               iset_flg(ID flgid, FLGPTN setptn) throw();
248 extern ER               clr_flg(ID flgid, FLGPTN clrptn) throw();
249 extern ER               wai_flg(ID flgid, FLGPTN waiptn,
250                                                 MODE wfmode, FLGPTN *p_flgptn) throw();
251 extern ER               pol_flg(ID flgid, FLGPTN waiptn,
252                                                 MODE wfmode, FLGPTN *p_flgptn) throw();
253 extern ER               twai_flg(ID flgid, FLGPTN waiptn,
254                                                 MODE wfmode, FLGPTN *p_flgptn, TMO tmout) throw();
255 extern ER               ini_flg(ID flgid) throw();
256 extern ER               ref_flg(ID flgid, T_RFLG *pk_rflg) throw();
257
258 extern ER               snd_dtq(ID dtqid, intptr_t data) throw();
259 extern ER               psnd_dtq(ID dtqid, intptr_t data) throw();
260 extern ER               ipsnd_dtq(ID dtqid, intptr_t data) throw();
261 extern ER               tsnd_dtq(ID dtqid, intptr_t data, TMO tmout) throw();
262 extern ER               fsnd_dtq(ID dtqid, intptr_t data) throw();
263 extern ER               ifsnd_dtq(ID dtqid, intptr_t data) throw();
264 extern ER               rcv_dtq(ID dtqid, intptr_t *p_data) throw();
265 extern ER               prcv_dtq(ID dtqid, intptr_t *p_data) throw();
266 extern ER               trcv_dtq(ID dtqid, intptr_t *p_data, TMO tmout) throw();
267 extern ER               ini_dtq(ID dtqid) throw();
268 extern ER               ref_dtq(ID dtqid, T_RDTQ *pk_rdtq) throw();
269
270 extern ER               snd_pdq(ID pdqid, intptr_t data, PRI datapri) throw();
271 extern ER               psnd_pdq(ID pdqid, intptr_t data, PRI datapri) throw();
272 extern ER               ipsnd_pdq(ID pdqid, intptr_t data, PRI datapri) throw();
273 extern ER               tsnd_pdq(ID pdqid, intptr_t data,
274                                                                                 PRI datapri, TMO tmout) throw();
275 extern ER               rcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri) throw();
276 extern ER               prcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri) throw();
277 extern ER               trcv_pdq(ID pdqid, intptr_t *p_data,
278                                                                                 PRI *p_datapri, TMO tmout) throw();
279 extern ER               ini_pdq(ID pdqid) throw();
280 extern ER               ref_pdq(ID pdqid, T_RPDQ *pk_rpdq) throw();
281
282 extern ER               snd_mbx(ID mbxid, T_MSG *pk_msg) throw();
283 extern ER               rcv_mbx(ID mbxid, T_MSG **ppk_msg) throw();
284 extern ER               prcv_mbx(ID mbxid, T_MSG **ppk_msg) throw();
285 extern ER               trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout) throw();
286 extern ER               ini_mbx(ID mbxid) throw();
287 extern ER               ref_mbx(ID mbxid, T_RMBX *pk_rmbx) throw();
288
289 /*
290  *  メモリプール管理機能
291  */
292 extern ER               get_mpf(ID mpfid, void **p_blk) throw();
293 extern ER               pget_mpf(ID mpfid, void **p_blk) throw();
294 extern ER               tget_mpf(ID mpfid, void **p_blk, TMO tmout) throw();
295 extern ER               rel_mpf(ID mpfid, void *blk) throw();
296 extern ER               ini_mpf(ID mpfid) throw();
297 extern ER               ref_mpf(ID mpfid, T_RMPF *pk_rmpf) throw();
298
299 /*
300  *  時間管理機能
301  */
302 extern ER               get_tim(SYSTIM *p_systim) throw();
303 extern ER               get_utm(SYSUTM *p_sysutm) throw();
304
305 extern ER               sta_cyc(ID cycid) throw();
306 extern ER               stp_cyc(ID cycid) throw();
307 extern ER               ref_cyc(ID cycid, T_RCYC *pk_rcyc) throw();
308
309 extern ER               sta_alm(ID almid, RELTIM almtim) throw();
310 extern ER               ista_alm(ID almid, RELTIM almtim) throw();
311 extern ER               stp_alm(ID almid) throw();
312 extern ER               istp_alm(ID almid) throw();
313 extern ER               ref_alm(ID almid, T_RALM *pk_ralm) throw();
314
315 /*
316  *  システム状態管理機能
317  */
318 extern ER               rot_rdq(PRI tskpri) throw();
319 extern ER               irot_rdq(PRI tskpri) throw();
320 extern ER               get_tid(ID *p_tskid) throw();
321 extern ER               iget_tid(ID *p_tskid) throw();
322 extern ER               loc_cpu(void) throw();
323 extern ER               iloc_cpu(void) throw();
324 extern ER               unl_cpu(void) throw();
325 extern ER               iunl_cpu(void) throw();
326 extern ER               dis_dsp(void) throw();
327 extern ER               ena_dsp(void) throw();
328 extern bool_t   sns_ctx(void) throw();
329 extern bool_t   sns_loc(void) throw();
330 extern bool_t   sns_dsp(void) throw();
331 extern bool_t   sns_dpn(void) throw();
332 extern bool_t   sns_ker(void) throw();
333 extern ER               ext_ker(void) throw();
334
335 /*
336  *  割込み管理機能
337  */
338 extern ER               dis_int(INTNO intno) throw();
339 extern ER               ena_int(INTNO intno) throw();
340 extern ER               chg_ipm(PRI intpri) throw();
341 extern ER               get_ipm(PRI *p_intpri) throw();
342
343 /*
344  *  CPU例外管理機能
345  */
346 extern bool_t   xsns_dpn(void *p_excinf) throw();
347 extern bool_t   xsns_xpn(void *p_excinf) throw();
348
349 #endif /* TOPPERS_MACRO_ONLY */
350
351 /*
352  *  オブジェクト属性の定義
353  */
354 #define TA_ACT                  UINT_C(0x02)    /* タスクを起動された状態で生成 */
355
356 #define TA_TPRI                 UINT_C(0x01)    /* タスクの待ち行列を優先度順に */
357 #define TA_MPRI                 UINT_C(0x02)    /* メッセージキューを優先度順に */
358
359 #define TA_WMUL                 UINT_C(0x02)    /* 複数の待ちタスク */
360 #define TA_CLR                  UINT_C(0x04)    /* イベントフラグのクリア指定 */
361
362 #define TA_STA                  UINT_C(0x02)    /* 周期ハンドラを動作状態で生成 */
363
364 #define TA_NONKERNEL    UINT_C(0x02)    /* カーネル管理外の割込み */
365
366 #define TA_ENAINT               UINT_C(0x01)    /* 割込み要求禁止フラグをクリア */
367 #define TA_EDGE                 UINT_C(0x02)    /* エッジトリガ */
368
369 /*
370  *  サービスコールの動作モードの定義
371  */
372 #define TWF_ORW                 UINT_C(0x01)    /* イベントフラグのOR待ち */
373 #define TWF_ANDW                UINT_C(0x02)    /* イベントフラグのAND待ち */
374
375 /*
376  *  オブジェクトの状態の定義
377  */
378 #define TTS_RUN                 UINT_C(0x01)    /* 実行状態 */
379 #define TTS_RDY                 UINT_C(0x02)    /* 実行可能状態 */
380 #define TTS_WAI                 UINT_C(0x04)    /* 待ち状態 */
381 #define TTS_SUS                 UINT_C(0x08)    /* 強制待ち状態 */
382 #define TTS_WAS                 UINT_C(0x0c)    /* 二重待ち状態 */
383 #define TTS_DMT                 UINT_C(0x10)    /* 休止状態 */
384
385 #define TTW_SLP                 UINT_C(0x0001)  /* 起床待ち */
386 #define TTW_DLY                 UINT_C(0x0002)  /* 時間経過待ち */
387 #define TTW_SEM                 UINT_C(0x0004)  /* セマフォの資源獲得待ち */
388 #define TTW_FLG                 UINT_C(0x0008)  /* イベントフラグ待ち */
389 #define TTW_SDTQ                UINT_C(0x0010)  /* データキューへの送信待ち */
390 #define TTW_RDTQ                UINT_C(0x0020)  /* データキューからの受信待ち */
391 #define TTW_SPDQ                UINT_C(0x0100)  /* 優先度データキューへの送信待ち */
392 #define TTW_RPDQ                UINT_C(0x0200)  /* 優先度データキューからの受信待ち */
393 #define TTW_MBX                 UINT_C(0x0040)  /* メールボックスからの受信待ち */
394 #define TTW_MPF                 UINT_C(0x2000)  /* 固定長メモリブロックの獲得待ち */
395
396 #define TTEX_ENA                UINT_C(0x01)    /* タスク例外処理許可状態 */
397 #define TTEX_DIS                UINT_C(0x02)    /* タスク例外処理禁止状態 */
398
399 #define TCYC_STP                UINT_C(0x01)    /* 周期ハンドラが動作していない */
400 #define TCYC_STA                UINT_C(0x02)    /* 周期ハンドラが動作している */
401
402 #define TALM_STP                UINT_C(0x01)    /* アラームハンドラが動作していない */
403 #define TALM_STA                UINT_C(0x02)    /* アラームハンドラが動作している */
404
405 /*
406  *  その他の定数の定義
407  */
408 #define TSK_SELF                0                       /* 自タスク指定 */
409 #define TSK_NONE                0                       /* 該当するタスクがない */
410
411 #define TPRI_SELF               0                       /* 自タスクのベース優先度 */
412 #define TPRI_INI                0                       /* タスクの起動時優先度 */
413
414 #define TIPM_ENAALL             0                       /* 割込み優先度マスク全解除 */
415
416 /*
417  *  構成定数とマクロ
418  */
419
420 /*
421  *  サポートする機能
422  */
423 #ifdef TOPPERS_TARGET_SUPPORT_DIS_INT
424 #define TOPPERS_SUPPORT_DIS_INT                 /* dis_intがサポートされている */
425 #endif /* TOPPERS_TARGET_SUPPORT_DIS_INT */
426
427 #ifdef TOPPERS_TARGET_SUPPORT_ENA_INT
428 #define TOPPERS_SUPPORT_ENA_INT                 /* ena_intがサポートされている */
429 #endif /* TOPPERS_TARGET_SUPPORT_ENA_INT */
430
431 #ifdef TOPPERS_TARGET_SUPPORT_GET_UTM
432 #define TOPPERS_SUPPORT_GET_UTM                 /* get_utmがサポートされている */
433 #endif /* TOPPERS_TARGET_SUPPORT_GET_UTM */
434
435 /*
436  *  優先度の範囲
437  */
438 #define TMIN_TPRI               1                       /* タスク優先度の最小値(最高値)*/
439 #define TMAX_TPRI               16                      /* タスク優先度の最大値(最低値)*/
440 #define TMIN_DPRI               1                       /* データ優先度の最小値(最高値)*/
441 #define TMAX_DPRI               16                      /* データ優先度の最大値(最低値)*/
442 #define TMIN_MPRI               1                       /* メッセージ優先度の最小値(最高値)*/
443 #define TMAX_MPRI               16                      /* メッセージ優先度の最大値(最低値)*/
444 #define TMIN_ISRPRI             1                       /* 割込みサービスルーチン優先度の最小値 */
445 #define TMAX_ISRPRI             16                      /* 割込みサービスルーチン優先度の最大値 */
446
447 /*
448  *  バージョン情報
449  */
450 #define TKERNEL_MAKER   UINT_C(0x0118)  /* カーネルのメーカーコード */
451 #define TKERNEL_PRID    UINT_C(0x0007)  /* カーネルの識別番号 */
452 #define TKERNEL_SPVER   UINT_C(0xf512)  /* カーネル仕様のバージョン番号 */
453 #define TKERNEL_PRVER   UINT_C(0x1060)  /* カーネルのバージョン番号 */
454
455 /*
456  *  キューイング回数の最大値
457  */
458 #define TMAX_ACTCNT             UINT_C(1)               /* 起動要求キューイング数の最大値 */
459 #define TMAX_WUPCNT             UINT_C(1)               /* 起床要求キューイング数の最大値 */
460
461 /*
462  *  ビットパターンのビット数
463  */
464 #ifndef TBIT_TEXPTN                                     /* タスク例外要因のビット数 */
465 #define TBIT_TEXPTN             (sizeof(TEXPTN) * CHAR_BIT)
466 #endif /* TBIT_TEXPTN */
467
468 #ifndef TBIT_FLGPTN                                     /* イベントフラグのビット数 */
469 #define TBIT_FLGPTN             (sizeof(FLGPTN) * CHAR_BIT)
470 #endif /* TBIT_FLGPTN */
471
472 /*
473  *  メモリ領域確保のためのマクロ
474  *
475  *  以下のTOPPERS_COUNT_SZとTOPPERS_ROUND_SZの定義は,unitが2の巾乗であ
476  *  ることを仮定している.
477  */
478 #ifndef TOPPERS_COUNT_SZ
479 #define TOPPERS_COUNT_SZ(sz, unit)      (((sz) + (unit) - 1) / (unit))
480 #endif /* TOPPERS_COUNT_SZ */
481 #ifndef TOPPERS_ROUND_SZ
482 #define TOPPERS_ROUND_SZ(sz, unit)      (((sz) + (unit) - 1) & ~((unit) - 1))
483 #endif /* TOPPERS_ROUND_SZ */
484
485 #define COUNT_STK_T(sz)         TOPPERS_COUNT_SZ(sz, sizeof(STK_T))
486 #define ROUND_STK_T(sz)         TOPPERS_ROUND_SZ(sz, sizeof(STK_T))
487
488 #define COUNT_MPF_T(blksz)      TOPPERS_COUNT_SZ(blksz, sizeof(MPF_T))
489 #define ROUND_MPF_T(blksz)      TOPPERS_ROUND_SZ(blksz, sizeof(MPF_T))
490
491 /*
492  *  その他の構成定数
493  */
494 #define TMAX_MAXSEM             UINT_MAX        /* セマフォの最大資源数の最大値 */
495
496 #ifdef __cplusplus
497 }
498 #endif
499
500 #endif /* TOPPERS_KERNEL_H */