3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
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
11 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
12 * によって公表されている GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
26 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
28 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
30 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
35 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
36 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
38 * @(#) $Id: kernel.h,v 1.1 2009/01/31 05:27:37 suikan Exp $
42 * μITRON4.0仕様標準インクルードファイル
44 * このファイルでは,スタンダードプロファイルで必要なものと,JSPカー
45 * ネル独自の拡張機能で必要なものだけを定義している.データ型の定義は,
46 * スタンダードプロファイルを満たすちょうどの長さにはしていない.
48 * アセンブリ言語のソースファイルやシステムコンフィギュレーションファ
49 * イルからこのファイルをインクルードする時は,_MACRO_ONLY を定義して
50 * おくことで,マクロ定義以外の記述を除くことができる.
52 * このインクルードファイルは,標準インクルードファイル(t_services.h
53 * と jsp_kernel.h)でインクルードされる.また,他の ITRON仕様OS から
54 * ソフトウェアをポーティングする場合などには,このファイルを直接イン
55 * クルードしてもよい.この例外を除いて,他のファイルから直接インクルー
58 * この中でインクルードしているファイルを除いて,他のインクルードファ
70 * カーネル・アプリケーション 共通インクルードファイル
75 * ITRON仕様共通規定のデータ型・定数・マクロ
93 #define TROUND_VP(sz) (((sz) + sizeof(VP) - 1) & ~(sizeof(VP) - 1))
94 #define TCOUNT_VP(sz) (((sz) + sizeof(VP) - 1) / sizeof(VP))
101 typedef UINT TEXPTN; /* タスク例外要因のビットパターン */
102 typedef UINT FLGPTN; /* イベントフラグのビットパターン */
104 typedef struct t_msg { /* メールボックスのメッセージヘッダ */
108 typedef struct t_msg_pri { /* 優先度付きメッセージヘッダ */
109 T_MSG msgque; /* メッセージヘッダ */
110 PRI msgpri; /* メッセージ優先度 */
113 #endif /* _MACRO_ONLY */
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();
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();
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();
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();
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();
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();
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();
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();
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();
204 extern ER sta_cyc(ID cycid) throw();
205 extern ER stp_cyc(ID cycid) throw();
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();
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();
235 #endif /* _MACRO_ONLY */
240 #define TA_HLNG 0x00u /* 高級言語用インタフェース */
241 #define TA_ASM 0x01u /* アセンブリ言語用インタフェース */
243 #define TA_TFIFO 0x00u /* タスクの待ち行列をFIFO順に */
244 #define TA_TPRI 0x01u /* タスクの待ち行列を優先度順に */
246 #define TA_MFIFO 0x00u /* メッセージキューをFIFO順に */
247 #define TA_MPRI 0x02u /* メッセージキューを優先度順に */
249 #define TA_ACT 0x02u /* タスクを起動された状態で生成 */
251 #define TA_WSGL 0x00u /* イベントフラグの待ちタスクを1つに */
252 #define TA_CLR 0x04u /* イベントフラグのクリア指定 */
254 #define TA_STA 0x02u /* 周期ハンドラを動作状態で生成 */
259 #define TWF_ANDW 0x00u /* イベントフラグのAND待ち */
260 #define TWF_ORW 0x01u /* イベントフラグのOR待ち */
265 #define TSK_SELF 0 /* 自タスク指定 */
266 #define TSK_NONE 0 /* 該当するタスクがない */
267 #define TPRI_SELF 0 /* 自タスクのベース優先度の指定 */
268 #define TPRI_INI 0 /* タスクの起動時優先度の指定 */
277 #define TMIN_TPRI 1 /* タスク優先度の最小値 */
278 #define TMAX_TPRI 16 /* タスク優先度の最大値 */
279 #define TMIN_MPRI 1 /* メッセージ優先度の最小値 */
280 #define TMAX_MPRI 16 /* メッセージ優先度の最大値 */
285 #define TKERNEL_MAKER 0x0118u /* カーネルのメーカーコード */
286 #define TKERNEL_PRID 0x0001u /* カーネルの識別番号 */
287 #define TKERNEL_SPVER 0x5402u /* ITRON仕様のバージョン番号 */
288 #define TKERNEL_PRVER 0x1043u /* カーネルのバージョン番号 */
293 #define TMAX_ACTCNT 1 /* 起動要求キューイング数の最大値 */
294 #define TMAX_WUPCNT 1 /* 起床要求キューイング数の最大値 */
295 #define TMAX_SUSCNT 1 /* 強制待ち要求ネスト数の最大値 */
300 #define TBIT_TEXPTN (sizeof(TEXPTN) * CHAR_BIT)
302 #define TBIT_FLGPTN (sizeof(FLGPTN) * CHAR_BIT)
309 #endif /* _KERNEL_H_ */