メインページ | モジュール | 名前空間一覧 | クラス階層 | 構成 | ファイル一覧 | 名前空間メンバ | 構成メンバ | ファイルメンバ | 関連ページ

toppers/kernel.hpp

解説を見る。
00001 /*
00002  *  TOPPERS/C++ API Template Library
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems/
00004  *      C++ API Template Library
00005  *
00006  *  Copyright (C) 2004 by TAKAGI Nobuhisa
00007  *
00008  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
00009  *  によって公表されている GNU General Public License の Version 2 に記
00010  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
00011  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
00012  *  利用と呼ぶ)することを無償で許諾する.
00013  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00014  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00015  *      スコード中に含まれていること.
00016  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00017  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00018  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00019  *      の無保証規定を掲載すること.
00020  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00021  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00022  *      と.
00023  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00024  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00025  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00026  *        報告すること.
00027  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00028  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00029  *
00030  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00031  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
00032  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
00033  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
00034  *
00035  *  @(#) $Id: kernel.hpp,v 1.1.1.1 2004/04/14 09:30:29 takagi-n Exp $
00036  */
00037 
00060 #ifndef TOPPERS_KERNEL_HPP_
00061 #define TOPPERS_KERNEL_HPP_
00062 
00063 #include <toppers/complement.hpp>
00064 
00065 #ifndef TOPPERS_HAS_ISR
00066 #define TOPPERS_HAS_ISR     false
00067 #endif
00068 
00069 namespace toppers
00070 {
00071 
00073     enum function_code_type
00074     {
00075         tfn_cre_tsk  = -5,
00076         tfn_del_tsk  = -6,
00077         tfn_act_tsk  = -7,
00078         tfn_can_act  = -8,
00079         tfn_sta_tsk  = -9,
00080         tfn_ext_tsk  = -10,
00081         tfn_exd_tsk  = -11,
00082         tfn_ter_tsk  = -12,
00083         tfn_chg_pri  = -13,
00084         tfn_get_pri  = -14,
00085         tfn_ref_tsk  = -15,
00086         tfn_ref_tst  = -16,
00087 
00088         tfn_slp_tsk  = -17,
00089         tfn_tslp_tsk = -18,
00090         tfn_wup_tsk  = -19,
00091         tfn_can_wup  = -20,
00092         tfn_rel_wai  = -21,
00093         tfn_sus_tsk  = -22,
00094         tfn_rsm_tsk  = -23,
00095         tfn_frsm_tsk = -24,
00096         tfn_dly_tsk  = -25,
00097 
00098         tfn_def_tex  = -27,
00099         tfn_ras_tex  = -28,
00100         tfn_dis_tex  = -29,
00101         tfn_ena_tex  = -30,
00102         tfn_sns_tex  = -31,
00103         tfn_ref_tex  = -32,
00104 
00105         tfn_cre_sem  = -33,
00106         tfn_del_sem  = -34,
00107         tfn_sig_sem  = -35,
00108         tfn_wai_sem  = -37,
00109         tfn_pol_sem  = -38,
00110         tfn_twai_sem = -39,
00111         tfn_ref_sem  = -40,
00112 
00113         tfn_cre_flg  = -41,
00114         tfn_del_flg  = -42,
00115         tfn_set_flg  = -43,
00116         tfn_clr_flg  = -44,
00117         tfn_wai_flg  = -45,
00118         tfn_pol_flg  = -46,
00119         tfn_twai_flg = -47,
00120         tfn_ref_flg  = -48,
00121 
00122         tfn_cre_dtq  = -49,
00123         tfn_del_dtq  = -50,
00124         tfn_snd_dtq  = -53,
00125         tfn_psnd_dtq = -54,
00126         tfn_tsnd_dtq = -55,
00127         tfn_fsnd_dtq = -56,
00128         tfn_rcv_dtq  = -57,
00129         tfn_prcv_dtq = -58,
00130         tfn_trcv_dtq = -59,
00131         tfn_ref_dtq  = -60,
00132 
00133         tfn_cre_mbx  = -61,
00134         tfn_del_mbx  = -62,
00135         tfn_snd_mbx  = -63,
00136         tfn_rcv_mbx  = -65,
00137         tfn_prcv_mbx = -66,
00138         tfn_trcv_mbx = -67,
00139         tfn_ref_mbx  = -68,
00140 
00141         tfn_cre_mpf  = -69,
00142         tfn_del_mpf  = -70,
00143         tfn_rel_mpf  = -71,
00144         tfn_get_mpf  = -73,
00145         tfn_pget_mpf = -74,
00146         tfn_tget_mpf = -75,
00147         tfn_ref_mpf  = -76,
00148 
00149         tfn_set_tim  = -77,
00150         tfn_get_tim  = -78,
00151 
00152         tfn_cre_cyc  = -79,
00153         tfn_del_cyc  = -80,
00154         tfn_sta_cyc  = -81,
00155         tfn_stp_cyc  = -82,
00156         tfn_ref_cyc  = -83,
00157 
00158         tfn_rot_rdq  = -85,
00159         tfn_get_tid  = -86,
00160         tfn_loc_cpu  = -89,
00161         tfn_unl_cpu  = -90,
00162         tfn_dis_dsp  = -91,
00163         tfn_ena_dsp  = -92,
00164         tfn_sns_ctx  = -93,
00165         tfn_sns_loc  = -94,
00166         tfn_sns_dsp  = -95,
00167         tfn_sns_dpn  = -96,
00168         tfn_ref_sys  = -97,
00169 
00170         tfn_def_inh  = -101,
00171         tfn_cre_isr  = -102,
00172         tfn_del_isr  = -103,
00173         tfn_ref_isr  = -104,
00174         tfn_dis_int  = -105,
00175         tfn_ena_int  = -106,
00176         tfn_chg_ixx  = -107,
00177         tfn_chg_ims  = tfn_chg_ixx,
00178         tfn_get_ixx  = -108,
00179         tfn_get_ims  = tfn_get_ixx,
00180 
00181         tfn_def_svc  = -109,
00182         tfn_def_exc  = -110,
00183         tfn_ref_cfg  = -111,
00184         tfn_ref_ver  = -112,
00185 
00186         tfn_iact_tsk = -113,
00187         tfn_iwup_tsk = -114,
00188         tfn_irel_wai = -115,
00189         tfn_iras_tex = -116,
00190         tfn_isig_sem = -117,
00191         tfn_iset_flg = -118,
00192         tfn_ipsnd_dtq= -119,
00193         tfn_ifsnd_dtq= -120,
00194         tfn_irot_rdq = -121,
00195         tfn_iget_tid = -122,
00196         tfn_iloc_cpu = -123,
00197         tfn_iunl_cpu = -124,
00198         tfn_isig_tim = -125,
00199 
00200         tfn_cre_mtx  = -129,
00201         tfn_del_mtx  = -130,
00202         tfn_unl_mtx  = -131,
00203         tfn_loc_mtx  = -133,
00204         tfn_ploc_mtx = -134,
00205         tfn_tloc_mtx = -135,
00206         tfn_ref_mtx  = -136,
00207 
00208         tfn_cre_mbf  = -137,
00209         tfn_del_mbf  = -138,
00210         tfn_snd_mbf  = -141,
00211         tfn_psnd_mbf = -142,
00212         tfn_tsnd_mbf = -143,
00213         tfn_rcv_mbf  = -145,
00214         tfn_prcv_mbf = -146,
00215         tfn_trcv_mbf = -147,
00216         tfn_ref_mbf  = -148,
00217 
00218         tfn_cre_por  = -149,
00219         tfn_del_por  = -150,
00220         tfn_cal_por  = -151,
00221         tfn_tcal_por = -152,
00222         tfn_acp_por  = -153,
00223         tfn_pacp_por = -154,
00224         tfn_tacp_por = -155,
00225         tfn_fwd_por  = -156,
00226         tfn_rpl_rdv  = -157,
00227         tfn_ref_por  = -158,
00228         tfn_ref_rdv  = -159,
00229 
00230         tfn_cre_mpl  = -161,
00231         tfn_del_mpl  = -162,
00232         tfn_rel_mpl  = -163,
00233         tfn_get_mpl  = -165,
00234         tfn_pget_mpl = -166,
00235         tfn_tget_mpl = -167,
00236         tfn_ref_mpl  = -168,
00237 
00238         tfn_cre_alm  = -169,
00239         tfn_del_alm  = -170,
00240         tfn_sta_alm  = -171,
00241         tfn_stp_alm  = -172,
00242         tfn_ref_alm  = -173,
00243 
00244         tfn_def_ovr  = -177,
00245         tfn_sta_ovr  = -178,
00246         tfn_stp_ovr  = -179,
00247         tfn_ref_ovr  = -180,
00248 
00249         tfn_acre_tsk = -193,
00250         tfn_acre_sem = -194,
00251         tfn_acre_flg = -195,
00252         tfn_acre_dtq = -196,
00253         tfn_acre_mbx = -197,
00254         tfn_acre_mtx = -198,
00255         tfn_acre_mbf = -199,
00256         tfn_acre_por = -200,
00257         tfn_acre_mpf = -201,
00258         tfn_acre_mpl = -202,
00259         tfn_acre_cyc = -203,
00260         tfn_acre_alm = -204,
00261         tfn_acre_isr = -205,
00262 
00263         tfn_vxsns_ctx= -225,
00264         tfn_vxsns_loc= -226,
00265         tfn_vxsns_dsp= -227,
00266         tfn_vxsns_dpn= -228,
00267         tfn_vxsns_tex= -229,
00268         tfn_vsns_ini = -232,
00269 
00270         tfn_vxget_tim= -233,
00271 
00272         tfn_cal_svc  = -32767
00273     };
00274 
00286     template <function_code_type Fncd>
00287     struct has_svc
00288     {
00289         enum
00290         {
00292             value = true
00293         };
00294     };
00295 
00296     template <> struct has_svc<tfn_cre_tsk> { enum { value = (sizeof cre_tsk(0, 0) != sizeof(large_type)) }; };
00297     template <> struct has_svc<tfn_del_tsk> { enum { value = (sizeof del_tsk(0) != sizeof(large_type)) }; };
00298     template <> struct has_svc<tfn_sta_tsk> { enum { value = (sizeof sta_tsk(0, 0) != sizeof(large_type)) }; };
00299 #ifdef  exd_tsk
00300     template <> struct has_svc<tfn_exd_tsk> { enum { value = true }; }
00301 #else
00302     template <> struct has_svc<tfn_exd_tsk> { enum { value = (sizeof test_svc(exd_tsk) == sizeof(yes_type)) }; };
00303 #endif
00304     template <> struct has_svc<tfn_ref_tsk> { enum { value = (sizeof ref_tsk(0, 0) != sizeof(large_type)) }; };
00305     template <> struct has_svc<tfn_ref_tst> { enum { value = (sizeof ref_tst(0, 0) != sizeof(large_type)) }; };
00306 
00307     template <> struct has_svc<tfn_def_tex> { enum { value = (sizeof def_tex(0, 0) != sizeof(large_type)) }; };
00308     template <> struct has_svc<tfn_ref_tex> { enum { value = (sizeof ref_tex(0, 0) != sizeof(large_type)) }; };
00309 
00310     template <> struct has_svc<tfn_cre_sem> { enum { value = (sizeof cre_sem(0, 0) != sizeof(large_type)) }; };
00311     template <> struct has_svc<tfn_del_sem> { enum { value = (sizeof del_sem(0) != sizeof(large_type)) }; };
00312     template <> struct has_svc<tfn_ref_sem> { enum { value = (sizeof ref_sem(0, 0) != sizeof(large_type)) }; };
00313 
00314     template <> struct has_svc<tfn_cre_flg> { enum { value = (sizeof cre_flg(0, 0) != sizeof(large_type)) }; };
00315     template <> struct has_svc<tfn_del_flg> { enum { value = (sizeof del_flg(0) != sizeof(large_type)) }; };
00316     template <> struct has_svc<tfn_ref_flg> { enum { value = (sizeof ref_flg(0, 0) != sizeof(large_type)) }; };
00317 
00318     template <> struct has_svc<tfn_cre_dtq> { enum { value = (sizeof cre_dtq(0, 0) != sizeof(large_type)) }; };
00319     template <> struct has_svc<tfn_del_dtq> { enum { value = (sizeof del_dtq(0) != sizeof(large_type)) }; };
00320     template <> struct has_svc<tfn_ref_dtq> { enum { value = (sizeof ref_dtq(0, 0) != sizeof(large_type)) }; };
00321 
00322     template <> struct has_svc<tfn_cre_mbx> { enum { value = (sizeof cre_mbx(0, 0) != sizeof(large_type)) }; };
00323     template <> struct has_svc<tfn_del_mbx> { enum { value = (sizeof del_mbx(0) != sizeof(large_type)) }; };
00324     template <> struct has_svc<tfn_ref_mbx> { enum { value = (sizeof ref_mbx(0, 0) != sizeof(large_type)) }; };
00325 
00326     template <> struct has_svc<tfn_cre_mpf> { enum { value = (sizeof cre_mpf(0, 0) != sizeof(large_type)) }; };
00327     template <> struct has_svc<tfn_del_mpf> { enum { value = (sizeof del_mpf(0) != sizeof(large_type)) }; };
00328     template <> struct has_svc<tfn_ref_mpf> { enum { value = (sizeof ref_mpf(0, 0) != sizeof(large_type)) }; };
00329 
00330     template <> struct has_svc<tfn_cre_cyc> { enum { value = (sizeof cre_cyc(0, 0) != sizeof(large_type)) }; };
00331     template <> struct has_svc<tfn_del_cyc> { enum { value = (sizeof del_cyc(0) != sizeof(large_type)) }; };
00332     template <> struct has_svc<tfn_ref_cyc> { enum { value = (sizeof ref_cyc(0, 0) != sizeof(large_type)) }; };
00333 
00334     template <> struct has_svc<tfn_ref_sys> { enum { value = (sizeof ref_sys(0) != sizeof(large_type)) }; };
00335 
00336     template <> struct has_svc<tfn_def_inh> { enum { value = (sizeof def_inh(0, 0) != sizeof(large_type)) }; };
00337     template <> struct has_svc<tfn_cre_isr> { enum { value = (sizeof cre_isr(0, 0) != sizeof(large_type)) }; };
00338     template <> struct has_svc<tfn_del_isr> { enum { value = (sizeof del_isr(0) != sizeof(large_type)) }; };
00339     template <> struct has_svc<tfn_ref_isr> { enum { value = (sizeof ref_isr(0, 0) != sizeof(large_type)) }; };
00340     template <> struct has_svc<tfn_dis_int> { enum { value = (sizeof dis_int(0) != sizeof(large_type)) }; };
00341     template <> struct has_svc<tfn_ena_int> { enum { value = (sizeof ena_int(0) != sizeof(large_type)) }; };
00342     template <> struct has_svc<tfn_chg_ixx> { enum { value = (sizeof chg_ims(0) != sizeof(large_type)) }; };
00343     template <> struct has_svc<tfn_get_ixx> { enum { value = (sizeof chg_ims(0) != sizeof(large_type)) }; };
00344     template <> struct has_svc<tfn_def_svc> { enum { value = (sizeof def_svc(0, 0) != sizeof(large_type)) }; };
00345     template <> struct has_svc<tfn_def_exc> { enum { value = (sizeof def_exc(0, 0) != sizeof(large_type)) }; };
00346     template <> struct has_svc<tfn_ref_cfg> { enum { value = (sizeof ref_cfg(0) != sizeof(large_type)) }; };
00347     template <> struct has_svc<tfn_ref_ver> { enum { value = (sizeof ref_ver(0) != sizeof(large_type)) }; };
00348 
00349     template <> struct has_svc<tfn_cre_mtx> { enum { value = (sizeof cre_mtx(0, 0) != sizeof(large_type)) }; };
00350     template <> struct has_svc<tfn_del_mtx> { enum { value = (sizeof del_mtx(0) != sizeof(large_type)) }; };
00351     template <> struct has_svc<tfn_unl_mtx> { enum { value = (sizeof unl_mtx(0) != sizeof(large_type)) }; };
00352     template <> struct has_svc<tfn_loc_mtx> { enum { value = (sizeof loc_mtx(0) != sizeof(large_type)) }; };
00353     template <> struct has_svc<tfn_ploc_mtx> { enum { value = (sizeof ploc_mtx(0) != sizeof(large_type)) }; };
00354     template <> struct has_svc<tfn_tloc_mtx> { enum { value = (sizeof tloc_mtx(0, 0) != sizeof(large_type)) }; };
00355     template <> struct has_svc<tfn_ref_mtx> { enum { value = (sizeof ref_mtx(0, 0) != sizeof(large_type)) }; };
00356 
00357     template <> struct has_svc<tfn_cre_mbf> { enum { value = (sizeof cre_mbf(0, 0) != sizeof(large_type)) }; };
00358     template <> struct has_svc<tfn_del_mbf> { enum { value = (sizeof del_mbf(0) != sizeof(large_type)) }; };
00359     template <> struct has_svc<tfn_snd_mbf> { enum { value = (sizeof snd_mbf(0, 0, 0) != sizeof(large_type)) }; };
00360     template <> struct has_svc<tfn_psnd_mbf> { enum { value = (sizeof psnd_mbf(0, 0, 0) != sizeof(large_type)) }; };
00361     template <> struct has_svc<tfn_tsnd_mbf> { enum { value = (sizeof tsnd_mbf(0, 0, 0, 0) != sizeof(large_type)) }; };
00362     template <> struct has_svc<tfn_rcv_mbf> { enum { value = (sizeof rcv_mbf(0, 0) != sizeof(large_type)) }; };
00363     template <> struct has_svc<tfn_prcv_mbf> { enum { value = (sizeof prcv_mbf(0, 0) != sizeof(large_type)) }; };
00364     template <> struct has_svc<tfn_trcv_mbf> { enum { value = (sizeof trcv_mbf(0, 0, 0) != sizeof(large_type)) }; };
00365     template <> struct has_svc<tfn_ref_mbf> { enum { value = (sizeof ref_mbf(0, 0) != sizeof(large_type)) }; };
00366 
00367     template <> struct has_svc<tfn_cre_por> { enum { value = (sizeof cre_por(0, 0) != sizeof(large_type)) }; };
00368     template <> struct has_svc<tfn_del_por> { enum { value = (sizeof del_por(0) != sizeof(large_type)) }; };
00369     template <> struct has_svc<tfn_cal_por> { enum { value = (sizeof cal_por(0, 0, 0, 0) != sizeof(large_type)) }; };
00370     template <> struct has_svc<tfn_tcal_por> { enum { value = (sizeof tcal_por(0, 0, 0, 0, 0) != sizeof(large_type)) }; };
00371     template <> struct has_svc<tfn_acp_por> { enum { value = (sizeof acp_por(0, 0, 0, 0) != sizeof(large_type)) }; };
00372     template <> struct has_svc<tfn_pacp_por> { enum { value = (sizeof pacp_por(0, 0, 0, 0) != sizeof(large_type)) }; };
00373     template <> struct has_svc<tfn_tacp_por> { enum { value = (sizeof tacp_por(0, 0, 0, 0, 0) != sizeof(large_type)) }; };
00374     template <> struct has_svc<tfn_fwd_por> { enum { value = (sizeof fwd_por(0, 0, 0, 0, 0) != sizeof(large_type)) }; };
00375     template <> struct has_svc<tfn_rpl_rdv> { enum { value = (sizeof rpl_rdv(0, 0, 0) != sizeof(large_type)) }; };
00376     template <> struct has_svc<tfn_ref_por> { enum { value = (sizeof ref_por(0, 0) != sizeof(large_type)) }; };
00377     template <> struct has_svc<tfn_ref_rdv> { enum { value = (sizeof ref_rdv(0, 0) != sizeof(large_type)) }; };
00378 
00379     template <> struct has_svc<tfn_cre_mpl> { enum { value = (sizeof cre_mpl(0, 0) != sizeof(large_type)) }; };
00380     template <> struct has_svc<tfn_del_mpl> { enum { value = (sizeof del_mpl(0) != sizeof(large_type)) }; };
00381     template <> struct has_svc<tfn_rel_mpl> { enum { value = (sizeof rel_mpl(0, 0) != sizeof(large_type)) }; };
00382     template <> struct has_svc<tfn_get_mpl> { enum { value = (sizeof get_mpl(0, 0, 0) != sizeof(large_type)) }; };
00383     template <> struct has_svc<tfn_pget_mpl> { enum { value = (sizeof pget_mpl(0, 0, 0) != sizeof(large_type)) }; };
00384     template <> struct has_svc<tfn_tget_mpl> { enum { value = (sizeof tget_mpl(0, 0, 0, 0) != sizeof(large_type)) }; };
00385     template <> struct has_svc<tfn_ref_mpl> { enum { value = (sizeof ref_mpl(0, 0) != sizeof(large_type)) }; };
00386 
00387     template <> struct has_svc<tfn_cre_alm> { enum { value = (sizeof cre_alm(0, 0) != sizeof(large_type)) }; };
00388     template <> struct has_svc<tfn_del_alm> { enum { value = (sizeof del_alm(0) != sizeof(large_type)) }; };
00389     template <> struct has_svc<tfn_sta_alm> { enum { value = (sizeof sta_alm(0, 0) != sizeof(large_type)) }; };
00390     template <> struct has_svc<tfn_stp_alm> { enum { value = (sizeof stp_alm(0) != sizeof(large_type)) }; };
00391     template <> struct has_svc<tfn_ref_alm> { enum { value = (sizeof ref_alm(0, 0) != sizeof(large_type)) }; };
00392 
00393     template <> struct has_svc<tfn_def_ovr> { enum { value = (sizeof def_ovr(0) != sizeof(large_type)) }; };
00394     template <> struct has_svc<tfn_sta_ovr> { enum { value = (sizeof sta_ovr(0, 0) != sizeof(large_type)) }; };
00395     template <> struct has_svc<tfn_stp_ovr> { enum { value = (sizeof stp_ovr(0) != sizeof(large_type)) }; };
00396     template <> struct has_svc<tfn_ref_ovr> { enum { value = (sizeof ref_ovr(0, 0) != sizeof(large_type)) }; };
00397 
00398     template <> struct has_svc<tfn_acre_tsk> { enum { value = (sizeof acre_tsk(0) != sizeof(large_type)) }; };
00399     template <> struct has_svc<tfn_acre_sem> { enum { value = (sizeof acre_sem(0) != sizeof(large_type)) }; };
00400     template <> struct has_svc<tfn_acre_flg> { enum { value = (sizeof acre_flg(0) != sizeof(large_type)) }; };
00401     template <> struct has_svc<tfn_acre_dtq> { enum { value = (sizeof acre_dtq(0) != sizeof(large_type)) }; };
00402     template <> struct has_svc<tfn_acre_mbx> { enum { value = (sizeof acre_mbx(0) != sizeof(large_type)) }; };
00403     template <> struct has_svc<tfn_acre_mtx> { enum { value = (sizeof acre_mtx(0) != sizeof(large_type)) }; };
00404     template <> struct has_svc<tfn_acre_mbf> { enum { value = (sizeof acre_mbf(0) != sizeof(large_type)) }; };
00405     template <> struct has_svc<tfn_acre_por> { enum { value = (sizeof acre_por(0) != sizeof(large_type)) }; };
00406     template <> struct has_svc<tfn_acre_mpf> { enum { value = (sizeof acre_mpf(0) != sizeof(large_type)) }; };
00407     template <> struct has_svc<tfn_acre_mpl> { enum { value = (sizeof acre_mpl(0) != sizeof(large_type)) }; };
00408     template <> struct has_svc<tfn_acre_cyc> { enum { value = (sizeof acre_cyc(0) != sizeof(large_type)) }; };
00409     template <> struct has_svc<tfn_acre_alm> { enum { value = (sizeof acre_alm(0) != sizeof(large_type)) }; };
00410     template <> struct has_svc<tfn_acre_isr> { enum { value = (sizeof acre_isr(0) != sizeof(large_type)) }; };
00411 
00412     template <> struct has_svc<tfn_vxget_tim> { enum { value = (sizeof vxget_tim(0) != sizeof(large_type)) }; };
00413 
00414     template <> struct has_svc<tfn_cal_svc> { enum { value = (sizeof cal_svc(0, 0, 0, 0, 0, 0) != sizeof(large_type)) }; };
00415 
00417     enum object_type
00418     {
00419         obj_semaphore      = 128,
00420         obj_eventflag      = 129,
00421         obj_dataqueue      = 130,
00422         obj_mailbox        = 131,
00423         obj_mutex          = 132,
00424         obj_messagebuffer  = 133,
00425         obj_rendezvousport = 135,
00426         obj_rendezvous     = 136,
00427         obj_fmempool       = 137,
00428         obj_vmempool       = 138,
00429         obj_task           = 139,
00430         obj_readyqueue     = 141,
00431         obj_timerqueue     = 142,
00432         obj_cyclichandler  = 144,
00433         obj_alarmhandler   = 145,
00434         obj_overrunhandler = 146,
00435         obj_isr            = 147,
00436         obj_kernelstatus   = 148,
00437         obj_taskexception  = 149,
00438         obj_cpuexception   = 150,
00439         obj_all            = -1,
00440         obj_none           = 0
00441     };
00442 
00453     template <object_type ObjType>
00454     struct has_obj
00455     {
00456         enum
00457         {
00459             value = true
00460         };
00461     };
00462 
00463     template <> struct has_obj<obj_mutex> { enum { value = has_svc<tfn_loc_mtx>::value }; };
00464     template <> struct has_obj<obj_messagebuffer> { enum { value = has_svc<tfn_snd_mbf>::value }; };
00465     template <> struct has_obj<obj_rendezvousport> { enum { value = has_svc<tfn_cal_por>::value }; };
00466     template <> struct has_obj<obj_rendezvous> { enum { value = has_svc<tfn_rpl_rdv>::value }; };
00467     template <> struct has_obj<obj_vmempool> { enum { value = has_svc<tfn_get_mpl>::value }; };
00468     template <> struct has_obj<obj_alarmhandler> { enum { value = has_svc<tfn_sta_alm>::value }; };
00469     template <> struct has_obj<obj_overrunhandler> { enum { value = has_svc<tfn_sta_ovr>::value }; };
00470     template <> struct has_obj<obj_isr> { enum { value = has_svc<tfn_cre_isr>::value || TOPPERS_HAS_ISR }; };
00471 
00473     enum task_context_tag
00474     {
00476         task_context = 1
00477     };
00478 
00480     enum non_task_context_tag
00481     {
00483         non_task_context = 2
00484     };
00485 
00487     enum context_independent_tag
00488     {
00490         context_independent = 0
00491     };
00492 
00494     enum forever_tag
00495     {
00497         forever = TMO_FEVR
00498     };
00499 
00501     enum polling_tag
00502     {
00504         polling = TMO_POL
00505     };
00506 
00508     enum normal_tag
00509     {
00511         normal = 0
00512     };
00513 
00515     enum forced_tag
00516     {
00518         forced = -3
00519     };
00520 
00529     template <bool Sense>
00530     inline bool sense_kernel()
00531     {
00532         return vsns_ini();
00533     }
00534 
00535     template <>
00536     inline bool sense_kernel<false>()
00537     {
00538         return false;
00539     }
00540 
00541 }
00542 
00543 #endif  // ! TOPPERS_KERNEL_HPP_