OSDN Git Service

カーネルのターゲット非依存部1.7.0およびCFGをマージ
[toppersasp4lpc/asp.git] / asp / extension / dcre / 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 1966 2010-11-20 07:23:56Z 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_ctsk {
131         ATR                     tskatr;         /* タスク属性 */
132         intptr_t        exinf;          /* タスクの拡張情報 */
133         TASK            task;           /* タスクのメインルーチンの先頭番地 */
134         PRI                     itskpri;        /* タスクの起動時優先度 */
135         SIZE            stksz;          /* タスクのスタック領域のサイズ */
136         STK_T           *stk;           /* タスクのスタック領域の先頭番地 */
137 } T_CTSK;
138
139 typedef struct t_rtsk {
140         STAT    tskstat;        /* タスク状態 */
141         PRI             tskpri;         /* タスクの現在優先度 */
142         PRI             tskbpri;        /* タスクのベース優先度 */
143         STAT    tskwait;        /* 待ち要因 */
144         ID              wobjid;         /* 待ち対象のオブジェクトのID */
145         TMO             lefttmo;        /* タイムアウトするまでの時間 */
146         uint_t  actcnt;         /* 起動要求キューイング数 */
147         uint_t  wupcnt;         /* 起床要求キューイング数 */
148 } T_RTSK;
149
150 typedef struct t_dtex {
151         ATR             texatr;         /* タスク例外処理ルーチン属性 */
152         TEXRTN  texrtn;         /* タスク例外処理ルーチンの先頭番地 */
153 } T_DTEX;
154
155 typedef struct t_rtex {
156         STAT    texstat;        /* タスク例外処理の状態 */
157         TEXPTN  pndptn;         /* 保留例外要因 */
158 } T_RTEX;
159
160 typedef struct t_csem {
161         ATR             sematr;         /* セマフォ属性 */
162         uint_t  isemcnt;        /* セマフォの初期資源数 */
163         uint_t  maxsem;         /* セマフォの最大資源数 */
164 } T_CSEM;
165
166 typedef struct t_rsem {
167         ID              wtskid;         /* セマフォの待ち行列の先頭のタスクのID番号 */
168         uint_t  semcnt;         /* セマフォの現在の資源数 */
169 } T_RSEM;
170
171 typedef struct t_cflg {
172         ATR             flgatr;         /* イベントフラグ属性 */
173         FLGPTN  iflgptn;        /* イベントフラグの初期ビットパターン */
174 } T_CFLG;
175
176 typedef struct t_rflg {
177         ID              wtskid;         /* イベントフラグの待ち行列の先頭のタスクのID番号 */
178         FLGPTN  flgptn;         /* イベントフラグの現在のビットパターン */
179 } T_RFLG;
180
181 typedef struct t_cdtq {
182         ATR             dtqatr;         /* データキュー属性 */
183         uint_t  dtqcnt;         /* データキュー管理領域に格納できるデータ数 */
184         void    *dtqmb;         /* データキュー管理領域の先頭番地 */
185 } T_CDTQ;
186
187 typedef struct t_rdtq {
188         ID              stskid;         /* データキューの送信待ち行列の先頭のタスクのID番号 */
189         ID              rtskid;         /* データキューの受信待ち行列の先頭のタスクのID番号 */
190         uint_t  sdtqcnt;        /* データキュー管理領域に格納されているデータの数 */
191 } T_RDTQ;
192
193 typedef struct t_cpdq {
194         ATR             pdqatr;         /* 優先度データキュー属性 */
195         uint_t  pdqcnt;         /* 優先度データキュー管理領域に格納できるデータ数 */
196         PRI             maxdpri;        /* 優先度データキューに送信できるデータ優先度の最
197                                                    大値 */
198         void    *pdqmb;         /* 優先度データキュー管理領域の先頭番地 */
199 } T_CPDQ;
200
201 typedef struct t_rpdq {
202         ID              stskid;         /* 優先度データキューの送信待ち行列の先頭のタスク
203                                                    のID番号 */
204         ID              rtskid;         /* 優先度データキューの受信待ち行列の先頭のタスク
205                                                    のID番号 */
206         uint_t  spdqcnt;        /* 優先度データキュー管理領域に格納されているデー
207                                                    タの数 */
208 } T_RPDQ;
209
210 typedef struct t_cmbx {
211         ATR             mbxatr;         /* メールボックス属性 */
212         PRI             maxmpri;        /* 優先度メールボックスに送信できるメッセージ優先
213                                                    度の最大値 */
214         void    *mprihd;        /* 優先度別のメッセージキューヘッダ領域の先頭番地 */
215 } T_CMBX;
216
217 typedef struct t_rmbx {
218         ID              wtskid;         /* メールボックスの待ち行列の先頭のタスクのID番号 */
219         T_MSG   *pk_msg;        /* メッセージキューの先頭につながれたメッセージ
220                                                    の先頭番地 */
221 } T_RMBX;
222
223 typedef struct t_cmpf {
224         ATR             mpfatr;         /* 固定長メモリプール属性 */
225         uint_t  blkcnt;         /* 獲得できる固定長メモリブロックの数 */
226         uint_t  blksz;          /* 固定長メモリブロックのサイズ */
227         MPF_T   *mpf;           /* 固定長メモリプール領域の先頭番地 */
228         void    *mpfmb;         /* 固定長メモリプール管理領域の先頭番地 */
229 } T_CMPF;
230
231 typedef struct t_rmpf {
232         ID              wtskid;         /* 固定長メモリプールの待ち行列の先頭のタスクの
233                                                    ID番号 */
234         uint_t  fblkcnt;        /* 固定長メモリプール領域の空きメモリ領域に割り
235                                                    付けることができる固定長メモリブロックの数 */
236 } T_RMPF;
237
238 typedef struct t_ccyc {
239         ATR                     cycatr;         /* 周期ハンドラ属性 */
240         intptr_t        exinf;          /* 周期ハンドラの拡張情報 */
241         CYCHDR          cychdr;         /* 周期ハンドラの先頭番地 */
242         RELTIM          cyctim;         /* 周期ハンドラの起動周期 */
243         RELTIM          cycphs;         /* 周期ハンドラの起動位相 */
244 } T_CCYC;
245
246 typedef struct t_rcyc {
247         STAT    cycstat;        /* 周期ハンドラの動作状態 */
248         RELTIM  lefttim;        /* 次に周期ハンドラを起動する時刻までの相対時間 */
249 } T_RCYC;
250
251 typedef struct t_calm {
252         ATR                     almatr;         /* アラームハンドラ属性 */
253         intptr_t        exinf;          /* アラームハンドラの拡張情報 */
254         ALMHDR          almhdr;         /* アラームハンドラの先頭番地 */
255 } T_CALM;
256
257 typedef struct t_ralm {
258         STAT    almstat;        /* アラームハンドラの動作状態 */
259         RELTIM  lefttim;        /* アラームハンドラを起動する時刻までの相対時間 */
260 } T_RALM;
261
262 typedef struct t_cisr {
263         ATR                     isratr;         /* 割込みサービスルーチン属性 */
264         intptr_t        exinf;          /* 割込みサービスルーチンの拡張情報 */
265         INTNO           intno;          /* 割込みサービスルーチンを登録する割込み番号 */
266         ISR                     isr;            /* 割込みサービスルーチンの先頭番地 */
267         PRI                     isrpri;         /* 割込みサービスルーチン優先度 */
268 } T_CISR;
269
270 /*
271  *  サービスコールの宣言
272  */
273
274 /*
275  *  タスク管理機能
276  */
277 extern ER_UINT  acre_tsk(const T_CTSK *pk_ctsk) throw();
278 extern ER               del_tsk(ID tskid) throw();
279 extern ER               act_tsk(ID tskid) throw();
280 extern ER               iact_tsk(ID tskid) throw();
281 extern ER_UINT  can_act(ID tskid) throw();
282 extern ER               ext_tsk(void) throw();
283 extern ER               ter_tsk(ID tskid) throw();
284 extern ER               chg_pri(ID tskid, PRI tskpri) throw();
285 extern ER               get_pri(ID tskid, PRI *p_tskpri) throw();
286 extern ER               get_inf(intptr_t *p_exinf) throw();
287 extern ER               ref_tsk(ID tskid, T_RTSK *pk_rtsk) throw();
288
289 /*
290  *  タスク付属同期機能
291  */
292 extern ER               slp_tsk(void) throw();
293 extern ER               tslp_tsk(TMO tmout) throw();
294 extern ER               wup_tsk(ID tskid) throw();
295 extern ER               iwup_tsk(ID tskid) throw();
296 extern ER_UINT  can_wup(ID tskid) throw();
297 extern ER               rel_wai(ID tskid) throw();
298 extern ER               irel_wai(ID tskid) throw();
299 extern ER               sus_tsk(ID tskid) throw();
300 extern ER               rsm_tsk(ID tskid) throw();
301 extern ER               dly_tsk(RELTIM dlytim) throw();
302
303 /*
304  *  タスク例外処理機能
305  */
306 extern ER               def_tex(ID tskid, const T_DTEX *pk_dtex) throw();
307 extern ER               ras_tex(ID tskid, TEXPTN rasptn) throw();
308 extern ER               iras_tex(ID tskid, TEXPTN rasptn) throw();
309 extern ER               dis_tex(void) throw();
310 extern ER               ena_tex(void) throw();
311 extern bool_t   sns_tex(void) throw();
312 extern ER               ref_tex(ID tskid, T_RTEX *pk_rtex) throw();
313
314 /*
315  *  同期・通信機能
316  */
317 extern ER_ID    acre_sem(const T_CSEM *pk_csem) throw();
318 extern ER               del_sem(ID semid) throw();
319 extern ER               sig_sem(ID semid) throw();
320 extern ER               isig_sem(ID semid) throw();
321 extern ER               wai_sem(ID semid) throw();
322 extern ER               pol_sem(ID semid) throw();
323 extern ER               twai_sem(ID semid, TMO tmout) throw();
324 extern ER               ini_sem(ID semid) throw();
325 extern ER               ref_sem(ID semid, T_RSEM *pk_rsem) throw();
326
327 extern ER_ID    acre_flg(const T_CFLG *pk_cflg) throw();
328 extern ER               del_flg(ID flgid) throw();
329 extern ER               set_flg(ID flgid, FLGPTN setptn) throw();
330 extern ER               iset_flg(ID flgid, FLGPTN setptn) throw();
331 extern ER               clr_flg(ID flgid, FLGPTN clrptn) throw();
332 extern ER               wai_flg(ID flgid, FLGPTN waiptn,
333                                                 MODE wfmode, FLGPTN *p_flgptn) throw();
334 extern ER               pol_flg(ID flgid, FLGPTN waiptn,
335                                                 MODE wfmode, FLGPTN *p_flgptn) throw();
336 extern ER               twai_flg(ID flgid, FLGPTN waiptn,
337                                                 MODE wfmode, FLGPTN *p_flgptn, TMO tmout) throw();
338 extern ER               ini_flg(ID flgid) throw();
339 extern ER               ref_flg(ID flgid, T_RFLG *pk_rflg) throw();
340
341 extern ER_ID    acre_dtq(const T_CDTQ *pk_cdtq) throw();
342 extern ER               del_dtq(ID dtqid) throw();
343 extern ER               snd_dtq(ID dtqid, intptr_t data) throw();
344 extern ER               psnd_dtq(ID dtqid, intptr_t data) throw();
345 extern ER               ipsnd_dtq(ID dtqid, intptr_t data) throw();
346 extern ER               tsnd_dtq(ID dtqid, intptr_t data, TMO tmout) throw();
347 extern ER               fsnd_dtq(ID dtqid, intptr_t data) throw();
348 extern ER               ifsnd_dtq(ID dtqid, intptr_t data) throw();
349 extern ER               rcv_dtq(ID dtqid, intptr_t *p_data) throw();
350 extern ER               prcv_dtq(ID dtqid, intptr_t *p_data) throw();
351 extern ER               trcv_dtq(ID dtqid, intptr_t *p_data, TMO tmout) throw();
352 extern ER               ini_dtq(ID dtqid) throw();
353 extern ER               ref_dtq(ID dtqid, T_RDTQ *pk_rdtq) throw();
354
355 extern ER_ID    acre_pdq(const T_CPDQ *pk_cpdq) throw();
356 extern ER               del_pdq(ID pdqid) throw();
357 extern ER               snd_pdq(ID pdqid, intptr_t data, PRI datapri) throw();
358 extern ER               psnd_pdq(ID pdqid, intptr_t data, PRI datapri) throw();
359 extern ER               ipsnd_pdq(ID pdqid, intptr_t data, PRI datapri) throw();
360 extern ER               tsnd_pdq(ID pdqid, intptr_t data,
361                                                                                 PRI datapri, TMO tmout) throw();
362 extern ER               rcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri) throw();
363 extern ER               prcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri) throw();
364 extern ER               trcv_pdq(ID pdqid, intptr_t *p_data,
365                                                                                 PRI *p_datapri, TMO tmout) throw();
366 extern ER               ini_pdq(ID pdqid) throw();
367 extern ER               ref_pdq(ID pdqid, T_RPDQ *pk_rpdq) throw();
368
369 extern ER_ID    acre_mbx(const T_CMBX *pk_cmbx) throw();
370 extern ER               del_mbx(ID mbxid) throw();
371 extern ER               snd_mbx(ID mbxid, T_MSG *pk_msg) throw();
372 extern ER               rcv_mbx(ID mbxid, T_MSG **ppk_msg) throw();
373 extern ER               prcv_mbx(ID mbxid, T_MSG **ppk_msg) throw();
374 extern ER               trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout) throw();
375 extern ER               ini_mbx(ID mbxid) throw();
376 extern ER               ref_mbx(ID mbxid, T_RMBX *pk_rmbx) throw();
377
378 /*
379  *  メモリプール管理機能
380  */
381 extern ER_ID    acre_mpf(const T_CMPF *pk_cmpf) throw();
382 extern ER               del_mpf(ID mpfid) throw();
383 extern ER               get_mpf(ID mpfid, void **p_blk) throw();
384 extern ER               pget_mpf(ID mpfid, void **p_blk) throw();
385 extern ER               tget_mpf(ID mpfid, void **p_blk, TMO tmout) throw();
386 extern ER               rel_mpf(ID mpfid, void *blk) throw();
387 extern ER               ini_mpf(ID mpfid) throw();
388 extern ER               ref_mpf(ID mpfid, T_RMPF *pk_rmpf) throw();
389
390 /*
391  *  時間管理機能
392  */
393 extern ER               get_tim(SYSTIM *p_systim) throw();
394 extern ER               get_utm(SYSUTM *p_sysutm) throw();
395
396 extern ER_ID    acre_cyc(const T_CCYC *pk_ccyc) throw();
397 extern ER               del_cyc(ID cycid) throw();
398 extern ER               sta_cyc(ID cycid) throw();
399 extern ER               stp_cyc(ID cycid) throw();
400 extern ER               ref_cyc(ID cycid, T_RCYC *pk_rcyc) throw();
401
402 extern ER_ID    acre_alm(const T_CALM *pk_calm) throw();
403 extern ER               del_alm(ID almid) throw();
404 extern ER               sta_alm(ID almid, RELTIM almtim) throw();
405 extern ER               ista_alm(ID almid, RELTIM almtim) throw();
406 extern ER               stp_alm(ID almid) throw();
407 extern ER               istp_alm(ID almid) throw();
408 extern ER               ref_alm(ID almid, T_RALM *pk_ralm) throw();
409
410 /*
411  *  システム状態管理機能
412  */
413 extern ER               rot_rdq(PRI tskpri) throw();
414 extern ER               irot_rdq(PRI tskpri) throw();
415 extern ER               get_tid(ID *p_tskid) throw();
416 extern ER               iget_tid(ID *p_tskid) throw();
417 extern ER               loc_cpu(void) throw();
418 extern ER               iloc_cpu(void) throw();
419 extern ER               unl_cpu(void) throw();
420 extern ER               iunl_cpu(void) throw();
421 extern ER               dis_dsp(void) throw();
422 extern ER               ena_dsp(void) throw();
423 extern bool_t   sns_ctx(void) throw();
424 extern bool_t   sns_loc(void) throw();
425 extern bool_t   sns_dsp(void) throw();
426 extern bool_t   sns_dpn(void) throw();
427 extern bool_t   sns_ker(void) throw();
428 extern ER               ext_ker(void) throw();
429
430 /*
431  *  割込み管理機能
432  */
433 extern ER_ID    acre_isr(const T_CISR *pk_cisr) throw();
434 extern ER               del_isr(ID isrid) throw();
435 extern ER               dis_int(INTNO intno) throw();
436 extern ER               ena_int(INTNO intno) throw();
437 extern ER               chg_ipm(PRI intpri) throw();
438 extern ER               get_ipm(PRI *p_intpri) throw();
439
440 /*
441  *  CPU例外管理機能
442  */
443 extern bool_t   xsns_dpn(void *p_excinf) throw();
444 extern bool_t   xsns_xpn(void *p_excinf) throw();
445
446 #endif /* TOPPERS_MACRO_ONLY */
447
448 /*
449  *  オブジェクト属性の定義
450  */
451 #define TA_ACT                  UINT_C(0x02)    /* タスクを起動された状態で生成 */
452
453 #define TA_TPRI                 UINT_C(0x01)    /* タスクの待ち行列を優先度順に */
454 #define TA_MPRI                 UINT_C(0x02)    /* メッセージキューを優先度順に */
455
456 #define TA_WMUL                 UINT_C(0x02)    /* 複数の待ちタスク */
457 #define TA_CLR                  UINT_C(0x04)    /* イベントフラグのクリア指定 */
458
459 #define TA_STA                  UINT_C(0x02)    /* 周期ハンドラを動作状態で生成 */
460
461 #define TA_NONKERNEL    UINT_C(0x02)    /* カーネル管理外の割込み */
462
463 #define TA_ENAINT               UINT_C(0x01)    /* 割込み要求禁止フラグをクリア */
464 #define TA_EDGE                 UINT_C(0x02)    /* エッジトリガ */
465
466 /*
467  *  サービスコールの動作モードの定義
468  */
469 #define TWF_ORW                 UINT_C(0x01)    /* イベントフラグのOR待ち */
470 #define TWF_ANDW                UINT_C(0x02)    /* イベントフラグのAND待ち */
471
472 /*
473  *  オブジェクトの状態の定義
474  */
475 #define TTS_RUN                 UINT_C(0x01)    /* 実行状態 */
476 #define TTS_RDY                 UINT_C(0x02)    /* 実行可能状態 */
477 #define TTS_WAI                 UINT_C(0x04)    /* 待ち状態 */
478 #define TTS_SUS                 UINT_C(0x08)    /* 強制待ち状態 */
479 #define TTS_WAS                 UINT_C(0x0c)    /* 二重待ち状態 */
480 #define TTS_DMT                 UINT_C(0x10)    /* 休止状態 */
481
482 #define TTW_SLP                 UINT_C(0x0001)  /* 起床待ち */
483 #define TTW_DLY                 UINT_C(0x0002)  /* 時間経過待ち */
484 #define TTW_SEM                 UINT_C(0x0004)  /* セマフォの資源獲得待ち */
485 #define TTW_FLG                 UINT_C(0x0008)  /* イベントフラグ待ち */
486 #define TTW_SDTQ                UINT_C(0x0010)  /* データキューへの送信待ち */
487 #define TTW_RDTQ                UINT_C(0x0020)  /* データキューからの受信待ち */
488 #define TTW_SPDQ                UINT_C(0x0100)  /* 優先度データキューへの送信待ち */
489 #define TTW_RPDQ                UINT_C(0x0200)  /* 優先度データキューからの受信待ち */
490 #define TTW_MBX                 UINT_C(0x0040)  /* メールボックスからの受信待ち */
491 #define TTW_MPF                 UINT_C(0x2000)  /* 固定長メモリブロックの獲得待ち */
492
493 #define TTEX_ENA                UINT_C(0x01)    /* タスク例外処理許可状態 */
494 #define TTEX_DIS                UINT_C(0x02)    /* タスク例外処理禁止状態 */
495
496 #define TCYC_STP                UINT_C(0x01)    /* 周期ハンドラが動作していない */
497 #define TCYC_STA                UINT_C(0x02)    /* 周期ハンドラが動作している */
498
499 #define TALM_STP                UINT_C(0x01)    /* アラームハンドラが動作していない */
500 #define TALM_STA                UINT_C(0x02)    /* アラームハンドラが動作している */
501
502 /*
503  *  その他の定数の定義
504  */
505 #define TSK_SELF                0                       /* 自タスク指定 */
506 #define TSK_NONE                0                       /* 該当するタスクがない */
507
508 #define TPRI_SELF               0                       /* 自タスクのベース優先度 */
509 #define TPRI_INI                0                       /* タスクの起動時優先度 */
510
511 #define TIPM_ENAALL             0                       /* 割込み優先度マスク全解除 */
512
513 /*
514  *  構成定数とマクロ
515  */
516
517 /*
518  *  サポートする機能
519  */
520 #ifdef TOPPERS_TARGET_SUPPORT_DIS_INT
521 #define TOPPERS_SUPPORT_DIS_INT                 /* dis_intがサポートされている */
522 #endif /* TOPPERS_TARGET_SUPPORT_DIS_INT */
523
524 #ifdef TOPPERS_TARGET_SUPPORT_ENA_INT
525 #define TOPPERS_SUPPORT_ENA_INT                 /* ena_intがサポートされている */
526 #endif /* TOPPERS_TARGET_SUPPORT_ENA_INT */
527
528 #ifdef TOPPERS_TARGET_SUPPORT_GET_UTM
529 #define TOPPERS_SUPPORT_GET_UTM                 /* get_utmがサポートされている */
530 #endif /* TOPPERS_TARGET_SUPPORT_GET_UTM */
531
532 #define TOPPERS_SUPPORT_DYNAMIC_CRE             /* 動的生成機能拡張 */
533
534 /*
535  *  優先度の範囲
536  */
537 #define TMIN_TPRI               1                       /* タスク優先度の最小値(最高値)*/
538 #define TMAX_TPRI               16                      /* タスク優先度の最大値(最低値)*/
539 #define TMIN_DPRI               1                       /* データ優先度の最小値(最高値)*/
540 #define TMAX_DPRI               16                      /* データ優先度の最大値(最低値)*/
541 #define TMIN_MPRI               1                       /* メッセージ優先度の最小値(最高値)*/
542 #define TMAX_MPRI               16                      /* メッセージ優先度の最大値(最低値)*/
543 #define TMIN_ISRPRI             1                       /* 割込みサービスルーチン優先度の最小値 */
544 #define TMAX_ISRPRI             16                      /* 割込みサービスルーチン優先度の最大値 */
545
546 /*
547  *  バージョン情報
548  */
549 #define TKERNEL_MAKER   UINT_C(0x0118)  /* カーネルのメーカーコード */
550 #define TKERNEL_PRID    UINT_C(0x0007)  /* カーネルの識別番号 */
551 #define TKERNEL_SPVER   UINT_C(0xf513)  /* カーネル仕様のバージョン番号 */
552 #define TKERNEL_PRVER   UINT_C(0x1070)  /* カーネルのバージョン番号 */
553
554 /*
555  *  キューイング回数の最大値
556  */
557 #define TMAX_ACTCNT             UINT_C(1)               /* 起動要求キューイング数の最大値 */
558 #define TMAX_WUPCNT             UINT_C(1)               /* 起床要求キューイング数の最大値 */
559
560 /*
561  *  ビットパターンのビット数
562  */
563 #ifndef TBIT_TEXPTN                                     /* タスク例外要因のビット数 */
564 #define TBIT_TEXPTN             (sizeof(TEXPTN) * CHAR_BIT)
565 #endif /* TBIT_TEXPTN */
566
567 #ifndef TBIT_FLGPTN                                     /* イベントフラグのビット数 */
568 #define TBIT_FLGPTN             (sizeof(FLGPTN) * CHAR_BIT)
569 #endif /* TBIT_FLGPTN */
570
571 /*
572  *  メモリ領域確保のためのマクロ
573  *
574  *  以下のTOPPERS_COUNT_SZとTOPPERS_ROUND_SZの定義は,unitが2の巾乗であ
575  *  ることを仮定している.
576  */
577 #ifndef TOPPERS_COUNT_SZ
578 #define TOPPERS_COUNT_SZ(sz, unit)      (((sz) + (unit) - 1) / (unit))
579 #endif /* TOPPERS_COUNT_SZ */
580 #ifndef TOPPERS_ROUND_SZ
581 #define TOPPERS_ROUND_SZ(sz, unit)      (((sz) + (unit) - 1) & ~((unit) - 1))
582 #endif /* TOPPERS_ROUND_SZ */
583
584 #define COUNT_STK_T(sz)         TOPPERS_COUNT_SZ(sz, sizeof(STK_T))
585 #define ROUND_STK_T(sz)         TOPPERS_ROUND_SZ(sz, sizeof(STK_T))
586
587 #define COUNT_MPF_T(blksz)      TOPPERS_COUNT_SZ(blksz, sizeof(MPF_T))
588 #define ROUND_MPF_T(blksz)      TOPPERS_ROUND_SZ(blksz, sizeof(MPF_T))
589
590 #define TSZ_DTQMB(dtqcnt)       (sizeof(intptr_t) * (dtqcnt))
591 #define TCNT_DTQMB(dtqcnt)      TOPPERS_COUNT_SZ(TSZ_DTQMB(dtqcnt), sizeof(MB_T))
592
593 #ifndef TSZ_PDQMB
594 #define TSZ_PDQMB(pdqcnt)       (sizeof(intptr_t) * 3 * (pdqcnt))
595 #endif /* TSZ_PDQMB */
596 #define TCNT_PDQMB(pdqcnt)      TOPPERS_COUNT_SZ(TSZ_PDQMB(pdqcnt), sizeof(MB_T))
597
598 #define TSZ_MPFMB(blkcnt)       (sizeof(uint_t) * (blkcnt))
599 #define TCNT_MPFMB(blkcnt)      TOPPERS_COUNT_SZ(TSZ_MPFMB(blkcnt), sizeof(MB_T))
600
601 /*
602  *  その他の構成定数
603  */
604 #define TMAX_MAXSEM             UINT_MAX        /* セマフォの最大資源数の最大値 */
605
606 #ifdef __cplusplus
607 }
608 #endif
609
610 #endif /* TOPPERS_KERNEL_H */