OSDN Git Service

release_3.3.0
[toppersjsp4bf/jsp.git] / jsp / include / kernel.h
1 /*
2  *  TOPPERS/JSP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Just 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 by Embedded and Real-Time Systems Laboratory
9  *              Graduate School of Information Science, Nagoya Univ., JAPAN
10  * 
11  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
12  *  によって公表されている GNU General Public License の Version 2 に記
13  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
15  *  利用と呼ぶ)することを無償で許諾する.
16  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18  *      スコード中に含まれていること.
19  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
22  *      の無保証規定を掲載すること.
23  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
25  *      と.
26  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
28  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
29  *        報告すること.
30  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
32  * 
33  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
35  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
36  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
37  * 
38  *  @(#) $Id: kernel.h,v 1.1 2009/01/31 05:27:37 suikan Exp $
39  */
40
41 /*
42  *  μITRON4.0仕様標準インクルードファイル
43  *
44  *  このファイルでは,スタンダードプロファイルで必要なものと,JSPカー
45  *  ネル独自の拡張機能で必要なものだけを定義している.データ型の定義は,
46  *  スタンダードプロファイルを満たすちょうどの長さにはしていない.
47  *
48  *  アセンブリ言語のソースファイルやシステムコンフィギュレーションファ
49  *  イルからこのファイルをインクルードする時は,_MACRO_ONLY を定義して
50  *  おくことで,マクロ定義以外の記述を除くことができる.
51  *
52  *  このインクルードファイルは,標準インクルードファイル(t_services.h 
53  *  と jsp_kernel.h)でインクルードされる.また,他の ITRON仕様OS から
54  *  ソフトウェアをポーティングする場合などには,このファイルを直接イン
55  *  クルードしてもよい.この例外を除いて,他のファイルから直接インクルー
56  *  ドされることはない.
57  *
58  *  この中でインクルードしているファイルを除いて,他のインクルードファ
59  *  イルに依存していない.
60  */
61
62 #ifndef _KERNEL_H_
63 #define _KERNEL_H_
64
65 #ifdef __cplusplus
66 extern "C" {
67 #endif
68
69 /*
70  *  カーネル・アプリケーション 共通インクルードファイル
71  */
72 #include <t_stddef.h>
73
74 /*
75  *  ITRON仕様共通規定のデータ型・定数・マクロ
76  */
77 #include <itron.h>
78
79 /*
80  *  システムやプロセッサに依存する定義
81  */
82 #include <sys_defs.h>
83 #include <cpu_defs.h>
84
85 /*
86  *  システムログサービスのための定義
87  */
88 #include <t_syslog.h>
89
90 /*
91  *  補助マクロ
92  */
93 #define TROUND_VP(sz)   (((sz) + sizeof(VP) - 1) & ~(sizeof(VP) - 1))
94 #define TCOUNT_VP(sz)   (((sz) + sizeof(VP) - 1) / sizeof(VP))
95
96 /*
97  *  データ型の定義
98  */
99 #ifndef _MACRO_ONLY
100
101 typedef UINT        TEXPTN;     /* タスク例外要因のビットパターン */
102 typedef UINT        FLGPTN;     /* イベントフラグのビットパターン */
103
104 typedef struct t_msg {          /* メールボックスのメッセージヘッダ */
105     struct t_msg    *next;
106 } T_MSG;
107
108 typedef struct t_msg_pri {      /* 優先度付きメッセージヘッダ */
109     T_MSG       msgque;     /* メッセージヘッダ */
110     PRI     msgpri;     /* メッセージ優先度 */
111 } T_MSG_PRI;
112
113 #endif /* _MACRO_ONLY */
114
115 /*
116  *  サービスコールの宣言
117  */
118 #ifndef _MACRO_ONLY
119
120 /*
121  *  タスク管理機能
122  */
123 extern ER   act_tsk(ID tskid) throw();
124 extern ER   iact_tsk(ID tskid) throw();
125 extern ER_UINT  can_act(ID tskid) throw();
126 extern void ext_tsk(void) throw();
127 extern ER   ter_tsk(ID tskid) throw();
128 extern ER   chg_pri(ID tskid, PRI tskpri) throw();
129 extern ER   get_pri(ID tskid, PRI *p_tskpri) throw();
130
131 /*
132  *  タスク付属同期機能
133  */
134 extern ER   slp_tsk(void) throw();
135 extern ER   tslp_tsk(TMO tmout) throw();
136 extern ER   wup_tsk(ID tskid) throw();
137 extern ER   iwup_tsk(ID tskid) throw();
138 extern ER_UINT  can_wup(ID tskid) throw();
139 extern ER   rel_wai(ID tskid) throw();
140 extern ER   irel_wai(ID tskid) throw();
141 extern ER   sus_tsk(ID tskid) throw();
142 extern ER   rsm_tsk(ID tskid) throw();
143 extern ER   frsm_tsk(ID tskid) throw();
144 extern ER   dly_tsk(RELTIM dlytim) throw();
145
146 /*
147  *  タスク例外処理機能
148  */
149 extern ER   ras_tex(ID tskid, TEXPTN rasptn) throw();
150 extern ER   iras_tex(ID tskid, TEXPTN rasptn) throw();
151 extern ER   dis_tex(void) throw();
152 extern ER   ena_tex(void) throw();
153 extern BOOL sns_tex(void) throw();
154
155 /*
156  *  同期・通信機能
157  */
158 extern ER   sig_sem(ID semid) throw();
159 extern ER   isig_sem(ID semid) throw();
160 extern ER   wai_sem(ID semid) throw();
161 extern ER   pol_sem(ID semid) throw();
162 extern ER   twai_sem(ID semid, TMO tmout) throw();
163
164 extern ER   set_flg(ID flgid, FLGPTN setptn) throw();
165 extern ER   iset_flg(ID flgid, FLGPTN setptn) throw();
166 extern ER   clr_flg(ID flgid, FLGPTN clrptn) throw();
167 extern ER   wai_flg(ID flgid, FLGPTN waiptn,
168             MODE wfmode, FLGPTN *p_flgptn) throw();
169 extern ER   pol_flg(ID flgid, FLGPTN waiptn,
170             MODE wfmode, FLGPTN *p_flgptn) throw();
171 extern ER   twai_flg(ID flgid, FLGPTN waiptn,
172             MODE wfmode, FLGPTN *p_flgptn, TMO tmout) throw();
173
174 extern ER   snd_dtq(ID dtqid, VP_INT data) throw();
175 extern ER   psnd_dtq(ID dtqid, VP_INT data) throw();
176 extern ER   ipsnd_dtq(ID dtqid, VP_INT data) throw();
177 extern ER   tsnd_dtq(ID dtqid, VP_INT data, TMO tmout) throw();
178 extern ER   fsnd_dtq(ID dtqid, VP_INT data) throw();
179 extern ER   ifsnd_dtq(ID dtqid, VP_INT data) throw();
180 extern ER   rcv_dtq(ID dtqid, VP_INT *p_data) throw();
181 extern ER   prcv_dtq(ID dtqid, VP_INT *p_data) throw();
182 extern ER   trcv_dtq(ID dtqid, VP_INT *p_data, TMO tmout) throw();
183
184 extern ER   snd_mbx(ID mbxid, T_MSG *pk_msg) throw();
185 extern ER   rcv_mbx(ID mbxid, T_MSG **ppk_msg) throw();
186 extern ER   prcv_mbx(ID mbxid, T_MSG **ppk_msg) throw();
187 extern ER   trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout) throw();
188
189 /*
190  *  メモリプール管理機能
191  */
192 extern ER   get_mpf(ID mpfid, VP *p_blk) throw();
193 extern ER   pget_mpf(ID mpfid, VP *p_blk) throw();
194 extern ER   tget_mpf(ID mpfid, VP *p_blk, TMO tmout) throw();
195 extern ER   rel_mpf(ID mpfid, VP blk) throw();
196
197 /*
198  *  時間管理機能
199  */
200 extern ER   set_tim(const SYSTIM *p_systim) throw();
201 extern ER   get_tim(SYSTIM *p_systim) throw();
202 extern ER   isig_tim(void) throw();
203
204 extern ER   sta_cyc(ID cycid) throw();
205 extern ER   stp_cyc(ID cycid) throw();
206
207 /*
208  *  システム状態管理機能
209  */
210 extern ER   rot_rdq(PRI tskpri) throw();
211 extern ER   irot_rdq(PRI tskpri) throw();
212 extern ER   get_tid(ID *p_tskid) throw();
213 extern ER   iget_tid(ID *p_tskid) throw();
214 extern ER   loc_cpu(void) throw();
215 extern ER   iloc_cpu(void) throw();
216 extern ER   unl_cpu(void) throw();
217 extern ER   iunl_cpu(void) throw();
218 extern ER   dis_dsp(void) throw();
219 extern ER   ena_dsp(void) throw();
220 extern BOOL sns_ctx(void) throw();
221 extern BOOL sns_loc(void) throw();
222 extern BOOL sns_dsp(void) throw();
223 extern BOOL sns_dpn(void) throw();
224
225 /*
226  *  実装独自サービスコール
227  */
228 extern BOOL vxsns_ctx(VP p_excinf) throw();
229 extern BOOL vxsns_loc(VP p_excinf) throw();
230 extern BOOL vxsns_dsp(VP p_excinf) throw();
231 extern BOOL vxsns_dpn(VP p_excinf) throw();
232 extern BOOL vxsns_tex(VP p_excinf) throw();
233 extern BOOL vsns_ini(void) throw();
234
235 #endif /* _MACRO_ONLY */
236
237 /*
238  *  オブジェクト属性の定義
239  */
240 #define TA_HLNG     0x00u       /* 高級言語用インタフェース */
241 #define TA_ASM      0x01u       /* アセンブリ言語用インタフェース */
242
243 #define TA_TFIFO    0x00u       /* タスクの待ち行列をFIFO順に */
244 #define TA_TPRI     0x01u       /* タスクの待ち行列を優先度順に */
245
246 #define TA_MFIFO    0x00u       /* メッセージキューをFIFO順に */
247 #define TA_MPRI     0x02u       /* メッセージキューを優先度順に */
248
249 #define TA_ACT      0x02u       /* タスクを起動された状態で生成 */
250
251 #define TA_WSGL     0x00u       /* イベントフラグの待ちタスクを1つに */
252 #define TA_CLR      0x04u       /* イベントフラグのクリア指定 */
253
254 #define TA_STA      0x02u       /* 周期ハンドラを動作状態で生成 */
255
256 /*
257  *  サービスコールの動作モードの定義
258  */
259 #define TWF_ANDW    0x00u       /* イベントフラグのAND待ち */
260 #define TWF_ORW     0x01u       /* イベントフラグのOR待ち */
261
262 /*
263  *  その他の定数の定義
264  */
265 #define TSK_SELF    0       /* 自タスク指定 */
266 #define TSK_NONE    0       /* 該当するタスクがない */
267 #define TPRI_SELF   0       /* 自タスクのベース優先度の指定 */
268 #define TPRI_INI    0       /* タスクの起動時優先度の指定 */
269
270 /*
271  *  構成定数とマクロ
272  */
273
274 /*
275  *  優先度の範囲
276  */
277 #define TMIN_TPRI   1       /* タスク優先度の最小値 */
278 #define TMAX_TPRI   16      /* タスク優先度の最大値 */
279 #define TMIN_MPRI   1       /* メッセージ優先度の最小値 */
280 #define TMAX_MPRI   16      /* メッセージ優先度の最大値 */
281
282 /*
283  *  バージョン情報
284  */
285 #define TKERNEL_MAKER   0x0118u     /* カーネルのメーカーコード */
286 #define TKERNEL_PRID    0x0001u     /* カーネルの識別番号 */
287 #define TKERNEL_SPVER   0x5402u     /* ITRON仕様のバージョン番号 */
288 #define TKERNEL_PRVER   0x1043u     /* カーネルのバージョン番号 */
289
290 /*
291  *  キューイング/ネスト回数の最大値
292  */
293 #define TMAX_ACTCNT 1       /* 起動要求キューイング数の最大値 */
294 #define TMAX_WUPCNT 1       /* 起床要求キューイング数の最大値 */
295 #define TMAX_SUSCNT 1       /* 強制待ち要求ネスト数の最大値 */
296
297 /*
298  *  ビットパターンのビット数
299  */
300 #define TBIT_TEXPTN (sizeof(TEXPTN) * CHAR_BIT)
301                     /* タスク例外要因のビット数 */
302 #define TBIT_FLGPTN (sizeof(FLGPTN) * CHAR_BIT)
303                     /* イベントフラグのビット数 */
304
305 #ifdef __cplusplus
306 }
307 #endif
308
309 #endif /* _KERNEL_H_ */