kernel.h

説明を見る。
00001 /*
00002  *  TOPPERS/FDMP Kernel
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems/
00004  *      Function Distributed Multiprocessor Kernel
00005  * 
00006  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
00007  *                              Toyohashi Univ. of Technology, JAPAN
00008  *  Copyright (C) 2004 by Embedded and Real-Time Systems Laboratory
00009  *              Graduate School of Information Science, Nagoya Univ., JAPAN
00010  * 
00011  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
00012  *  によって公表されている GNU General Public License の Version 2 に記
00013  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
00014  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
00015  *  利用と呼ぶ)することを無償で許諾する.
00016  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00017  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00018  *      スコード中に含まれていること.
00019  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00020  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00021  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00022  *      の無保証規定を掲載すること.
00023  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00024  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00025  *      と.
00026  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00027  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00028  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00029  *        報告すること.
00030  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00031  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00032  * 
00033  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00034  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
00035  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
00036  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
00037  * 
00038  *  @(#) $Id: kernel.h,v 1.7 2006/03/21 09:48:03 honda Exp $
00039  */
00040 
00065 #ifndef _KERNEL_H_
00066 #define _KERNEL_H_
00067 
00068 #ifdef __cplusplus
00069 extern "C" {
00070 #endif
00071 
00072 /*
00073  *  カーネル・アプリケーション 共通インクルードファイル
00074  */
00075 #include <t_stddef.h>
00076 
00077 /*
00078  *  ITRON仕様共通規定のデータ型・定数・マクロ
00079  */
00080 #include <itron.h>
00081 
00082 /*
00083  *  システムやプロセッサに依存する定義
00084  */
00085 #include <sys_defs.h>
00086 #include <cpu_defs.h>
00087 
00088 /*
00089  *  システムログサービスのための定義
00090  */
00091 #include <t_syslog.h>
00092 
00093 /*
00094  *  補助マクロ
00095  */
00096 #define TROUND_VP(sz)   (((sz) + sizeof(VP) - 1) & ~(sizeof(VP) - 1))
00097 #define TCOUNT_VP(sz)   (((sz) + sizeof(VP) - 1) / sizeof(VP))
00098 
00099 /*
00100  *  データ型の定義
00101  */
00102 #ifndef _MACRO_ONLY
00103 
00104 typedef UINT        TEXPTN;     /* タスク例外要因のビットパターン */
00105 typedef UINT        FLGPTN;     /* イベントフラグのビットパターン */
00106 
00107 typedef struct t_msg {          /* メールボックスのメッセージヘッダ */
00108     struct t_msg    *next;
00109 } T_MSG;
00110 
00111 typedef struct t_msg_pri {      /* 優先度付きメッセージヘッダ */
00112     T_MSG       msgque;     /* メッセージヘッダ */
00113     PRI     msgpri;     /* メッセージ優先度 */
00114 } T_MSG_PRI;
00115 
00116 #endif /* _MACRO_ONLY */
00117 
00118 /*
00119  *  サービスコールの宣言
00120  */
00121 #ifndef _MACRO_ONLY
00122 
00123 /*
00124  *  タスク管理機能
00125  */
00126 extern ER   act_tsk(ID tskid) throw();
00127 extern ER   iact_tsk(ID tskid) throw();
00128 extern ER_UINT  can_act(ID tskid) throw();
00129 extern void ext_tsk(void) throw();
00130 extern ER   ter_tsk(ID tskid) throw();
00131 extern ER   chg_pri(ID tskid, PRI tskpri) throw();
00132 extern ER   get_pri(ID tskid, PRI *p_tskpri) throw();
00133 
00134 /*
00135  *  タスク付属同期機能
00136  */
00137 extern ER   slp_tsk(void) throw();
00138 extern ER   tslp_tsk(TMO tmout) throw();
00139 extern ER   wup_tsk(ID tskid) throw();
00140 extern ER   iwup_tsk(ID tskid) throw();
00141 extern ER_UINT  can_wup(ID tskid) throw();
00142 extern ER   rel_wai(ID tskid) throw();
00143 extern ER   irel_wai(ID tskid) throw();
00144 extern ER   sus_tsk(ID tskid) throw();
00145 extern ER   rsm_tsk(ID tskid) throw();
00146 extern ER   frsm_tsk(ID tskid) throw();
00147 extern ER   dly_tsk(RELTIM dlytim) throw();
00148 
00149 /*
00150  *  タスク例外処理機能
00151  */
00152 extern ER   ras_tex(ID tskid, TEXPTN rasptn) throw();
00153 extern ER   iras_tex(ID tskid, TEXPTN rasptn) throw();
00154 extern ER   dis_tex(void) throw();
00155 extern ER   ena_tex(void) throw();
00156 extern BOOL sns_tex(void) throw();
00157 
00158 /*
00159  *  同期・通信機能
00160  */
00161 extern ER   sig_sem(ID semid) throw();
00162 extern ER   isig_sem(ID semid) throw();
00163 extern ER   wai_sem(ID semid) throw();
00164 extern ER   pol_sem(ID semid) throw();
00165 extern ER   twai_sem(ID semid, TMO tmout) throw();
00166 
00167 extern ER   set_flg(ID flgid, FLGPTN setptn) throw();
00168 extern ER   iset_flg(ID flgid, FLGPTN setptn) throw();
00169 extern ER   clr_flg(ID flgid, FLGPTN clrptn) throw();
00170 extern ER   wai_flg(ID flgid, FLGPTN waiptn,
00171             MODE wfmode, FLGPTN *p_flgptn) throw();
00172 extern ER   pol_flg(ID flgid, FLGPTN waiptn,
00173             MODE wfmode, FLGPTN *p_flgptn) throw();
00174 extern ER   twai_flg(ID flgid, FLGPTN waiptn,
00175             MODE wfmode, FLGPTN *p_flgptn, TMO tmout) throw();
00176 
00177 extern ER   snd_dtq(ID dtqid, VP_INT data) throw();
00178 extern ER   psnd_dtq(ID dtqid, VP_INT data) throw();
00179 extern ER   ipsnd_dtq(ID dtqid, VP_INT data) throw();
00180 extern ER   tsnd_dtq(ID dtqid, VP_INT data, TMO tmout) throw();
00181 extern ER   fsnd_dtq(ID dtqid, VP_INT data) throw();
00182 extern ER   ifsnd_dtq(ID dtqid, VP_INT data) throw();
00183 extern ER   rcv_dtq(ID dtqid, VP_INT *p_data) throw();
00184 extern ER   prcv_dtq(ID dtqid, VP_INT *p_data) throw();
00185 extern ER   trcv_dtq(ID dtqid, VP_INT *p_data, TMO tmout) throw();
00186 
00187 extern ER   snd_mbx(ID mbxid, T_MSG *pk_msg) throw();
00188 extern ER   rcv_mbx(ID mbxid, T_MSG **ppk_msg) throw();
00189 extern ER   prcv_mbx(ID mbxid, T_MSG **ppk_msg) throw();
00190 extern ER   trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout) throw();
00191 
00192 /*
00193  *  メモリプール管理機能
00194  */
00195 extern ER   get_mpf(ID mpfid, VP *p_blk) throw();
00196 extern ER   pget_mpf(ID mpfid, VP *p_blk) throw();
00197 extern ER   tget_mpf(ID mpfid, VP *p_blk, TMO tmout) throw();
00198 extern ER   rel_mpf(ID mpfid, VP blk) throw();
00199 
00200 /*
00201  *  時間管理機能
00202  */
00203 extern ER   set_tim(const SYSTIM *p_systim) throw();
00204 extern ER   get_tim(SYSTIM *p_systim) throw();
00205 extern ER   isig_tim(void) throw();
00206 
00207 extern ER   sta_cyc(ID cycid) throw();
00208 extern ER   stp_cyc(ID cycid) throw();
00209 
00210 /*
00211  *  システム状態管理機能
00212  */
00213 extern ER   mrot_rdq(ID clsid, PRI tskpri) throw();
00214 extern ER   rot_rdq(PRI tskpri) throw();
00215 extern ER   imrot_rdq(ID clsid, PRI tskpri) throw();
00216 extern ER   irot_rdq(PRI tskpri) throw();
00217 extern ER   get_tid(ID *p_tskid) throw();
00218 extern ER   mget_tid(ID clsid, ID *p_tskid) throw();
00219 extern ER   imget_tid(ID clsid, ID *p_tskid) throw();
00220 extern ER   iget_tid(ID *p_tskid) throw();
00221 extern ER   loc_cpu(void) throw();
00222 extern ER   iloc_cpu(void) throw();
00223 extern ER   unl_cpu(void) throw();
00224 extern ER   iunl_cpu(void) throw();
00225 extern ER   dis_dsp(void) throw();
00226 extern ER   ena_dsp(void) throw();
00227 extern BOOL sns_ctx(void) throw();
00228 extern BOOL sns_loc(void) throw();
00229 extern BOOL sns_dsp(void) throw();
00230 extern BOOL sns_dpn(void) throw();
00231 
00232 /*
00233  *  実装独自サービスコール
00234  */
00235 extern BOOL vxsns_ctx(VP p_excinf) throw();
00236 extern BOOL vxsns_loc(VP p_excinf) throw();
00237 extern BOOL vxsns_dsp(VP p_excinf) throw();
00238 extern BOOL vxsns_dpn(VP p_excinf) throw();
00239 extern BOOL vxsns_tex(VP p_excinf) throw();
00240 extern BOOL vsns_ini(void) throw();
00241 
00242 #endif /* _MACRO_ONLY */
00243 
00244 /*
00245  *  オブジェクト属性の定義
00246  */
00247 #define TA_HLNG     0x00u       /* 高級言語用インタフェース */
00248 #define TA_ASM      0x01u       /* アセンブリ言語用インタフェース */
00249 
00250 #define TA_TFIFO    0x00u       /* タスクの待ち行列をFIFO順に */
00251 #define TA_TPRI     0x01u       /* タスクの待ち行列を優先度順に */
00252 
00253 #define TA_MFIFO    0x00u       /* メッセージキューをFIFO順に */
00254 #define TA_MPRI     0x02u       /* メッセージキューを優先度順に */
00255 
00256 #define TA_ACT      0x02u       /* タスクを起動された状態で生成 */
00257 
00258 #define TA_WSGL     0x00u       /* イベントフラグの待ちタスクを1つに */
00259 #define TA_CLR      0x04u       /* イベントフラグのクリア指定 */
00260 
00261 #define TA_STA      0x02u       /* 周期ハンドラを動作状態で生成 */
00262 
00263 /*
00264  *  サービスコールの動作モードの定義
00265  */
00266 #define TWF_ANDW    0x00u       /* イベントフラグのAND待ち */
00267 #define TWF_ORW     0x01u       /* イベントフラグのOR待ち */
00268 
00269 /*
00270  *  その他の定数の定義
00271  */
00272 #define TSK_SELF    0       /* 自タスク指定 */
00273 #define TSK_NONE    0       /* 該当するタスクがない */
00274 #define TPRI_SELF   0       /* 自タスクのベース優先度の指定 */
00275 #define TPRI_INI    0       /* タスクの起動時優先度の指定 */
00276 #define TCLS_SELF   0       /* 自クラス指定 */
00277 /*
00278  *  構成定数とマクロ
00279  */
00280 
00281 /*
00282  *  優先度の範囲
00283  */
00284 #define TMIN_TPRI   1       /* タスク優先度の最小値 */
00285 #define TMAX_TPRI   16      /* タスク優先度の最大値 */
00286 #define TMIN_MPRI   1       /* メッセージ優先度の最小値 */
00287 #define TMAX_MPRI   16      /* メッセージ優先度の最大値 */
00288 
00289 /*
00290  *  バージョン情報
00291  */
00292 #define TKERNEL_MAKER   0x0118u     /* カーネルのメーカーコード */
00293 #define TKERNEL_PRID    0x0005u     /* カーネルの識別番号 */
00294 #define TKERNEL_SPVER   0x5402u     /* ITRON仕様のバージョン番号 */
00295 #define TKERNEL_PRVER   0x1010u     /* カーネルのバージョン番号 */
00296 
00297 /*
00298  *  キューイング/ネスト回数の最大値
00299  */
00300 #define TMAX_ACTCNT 1       /* 起動要求キューイング数の最大値 */
00301 #define TMAX_WUPCNT 1       /* 起床要求キューイング数の最大値 */
00302 #define TMAX_SUSCNT 1       /* 強制待ち要求ネスト数の最大値 */
00303 
00304 /*
00305  *  ビットパターンのビット数
00306  */
00307 #define TBIT_TEXPTN (sizeof(TEXPTN) * CHAR_BIT)
00308                     /* タスク例外要因のビット数 */
00309 #define TBIT_FLGPTN (sizeof(FLGPTN) * CHAR_BIT)
00310                     /* イベントフラグのビット数 */
00311 
00312 #ifdef __cplusplus
00313 }
00314 #endif
00315 
00316 #endif /* _KERNEL_H_ */

Copyright © 2006 by TAKAGI Nobuhisa.
このページは Mon Apr 3 23:49:12 2006 に Doxygen によって生成されました。