OSDN Git Service

(none)
authorryuz <ryuz>
Tue, 4 Mar 2008 15:08:19 +0000 (15:08 +0000)
committerryuz <ryuz>
Tue, 4 Mar 2008 15:08:19 +0000 (15:08 +0000)
27 files changed:
kernel/build/common/gmake/knldep.inc
kernel/build/common/gmake/knlsrc.inc
kernel/build/common/nmake/knldep.inc
kernel/build/common/nmake/knlsrc.inc
kernel/build/common/tmp_mkinc/mk_inc.pl
kernel/include/config/cfgerr.h
kernel/include/config/cfgknl.h
kernel/include/core/toq.h
kernel/include/object/cycobj.h
kernel/include/object/dtqobj.h
kernel/include/object/texobj.h [deleted file]
kernel/include/object/tskobj.h
kernel/include/parser/parserr.h
kernel/include/parser/parsknl.h
kernel/source/arch/proc/mn103/mn1030/cc103/kint_hdr.as
kernel/source/arch/proc/mn103/mn1030/gcc/kcre_ctx.S
kernel/source/arch/proc/mn103/mn1030/gcc/kint_hdr.S
kernel/source/core/dsp/dsp_tsk.c
kernel/source/object/cyc/kcre_cyc.c
kernel/source/object/dtq/del_dtq.c [new file with mode: 0755]
kernel/source/object/sys/sta_knl.c
kernel/source/object/tex/def_tex.c [deleted file]
kernel/source/object/tex/ras_tex.c [deleted file]
kernel/source/object/tsk/def_tex.c [new file with mode: 0755]
kernel/source/object/tsk/kcre_tsk.c
kernel/source/object/tsk/kexe_tex.c [new file with mode: 0755]
kernel/source/object/tsk/ras_tex.c [new file with mode: 0755]

index 431511a..a1d3f97 100755 (executable)
@@ -84,6 +84,9 @@ $(OBJS_DIR)/rsm_tsk.$(EXT_OBJ):       $(TSKOBJ_DIR)/rsm_tsk.c $(COMMON_HEADERS)
 $(OBJS_DIR)/dly_tsk.$(EXT_OBJ):        $(TSKOBJ_DIR)/dly_tsk.c $(COMMON_HEADERS)
 $(OBJS_DIR)/ref_tsk.$(EXT_OBJ):        $(TSKOBJ_DIR)/ref_tsk.c $(COMMON_HEADERS)
 $(OBJS_DIR)/ref_tst.$(EXT_OBJ):        $(TSKOBJ_DIR)/ref_tst.c $(COMMON_HEADERS)
+$(OBJS_DIR)/def_tex.$(EXT_OBJ):        $(TSKOBJ_DIR)/def_tex.c $(COMMON_HEADERS)
+$(OBJS_DIR)/ras_tex.$(EXT_OBJ):        $(TSKOBJ_DIR)/ras_tex.c $(COMMON_HEADERS)
+$(OBJS_DIR)/exe_tex.$(EXT_OBJ):        $(TSKOBJ_DIR)/exe_tex.c $(COMMON_HEADERS)
 
 $(OBJS_DIR)/cre_sem.$(EXT_OBJ):        $(SEMOBJ_DIR)/cre_sem.c $(COMMON_HEADERS) $(SEMOBJ_HEADERS)
 $(OBJS_DIR)/acre_sem.$(EXT_OBJ):       $(SEMOBJ_DIR)/acre_sem.c        $(COMMON_HEADERS) $(SEMOBJ_HEADERS)
@@ -112,6 +115,7 @@ $(OBJS_DIR)/ref_flg.$(EXT_OBJ):     $(FLGOBJ_DIR)/ref_flg.c $(COMMON_HEADERS) $(FLGO
 $(OBJS_DIR)/cre_dtq.$(EXT_OBJ):        $(DTQOBJ_DIR)/cre_dtq.c $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
 $(OBJS_DIR)/acre_dtq.$(EXT_OBJ):       $(DTQOBJ_DIR)/acre_dtq.c        $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
 $(OBJS_DIR)/kcre_dtq.$(EXT_OBJ):       $(DTQOBJ_DIR)/kcre_dtq.c        $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
+$(OBJS_DIR)/del_dtq.$(EXT_OBJ):        $(DTQOBJ_DIR)/del_dtq.c $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
 $(OBJS_DIR)/snd_dtq.$(EXT_OBJ):        $(DTQOBJ_DIR)/snd_dtq.c $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
 $(OBJS_DIR)/fsnd_dtq.$(EXT_OBJ):       $(DTQOBJ_DIR)/fsnd_dtq.c        $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
 $(OBJS_DIR)/rcv_dtq.$(EXT_OBJ):        $(DTQOBJ_DIR)/rcv_dtq.c $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
index 32af514..5e01caa 100755 (executable)
@@ -200,6 +200,9 @@ CSRCS += $(TSKOBJ_DIR)/rsm_tsk.c
 CSRCS += $(TSKOBJ_DIR)/dly_tsk.c
 CSRCS += $(TSKOBJ_DIR)/ref_tsk.c
 CSRCS += $(TSKOBJ_DIR)/ref_tst.c
+CSRCS += $(TSKOBJ_DIR)/def_tex.c
+CSRCS += $(TSKOBJ_DIR)/ras_tex.c
+CSRCS += $(TSKOBJ_DIR)/exe_tex.c
 
 
 # Semaphores
@@ -240,6 +243,7 @@ SRC_DIRS += $(DTQOBJ_DIR)
 CSRCS += $(DTQOBJ_DIR)/cre_dtq.c
 CSRCS += $(DTQOBJ_DIR)/acre_dtq.c
 CSRCS += $(DTQOBJ_DIR)/kcre_dtq.c
+CSRCS += $(DTQOBJ_DIR)/del_dtq.c
 CSRCS += $(DTQOBJ_DIR)/snd_dtq.c
 CSRCS += $(DTQOBJ_DIR)/fsnd_dtq.c
 CSRCS += $(DTQOBJ_DIR)/rcv_dtq.c
index 0cae6cc..ddebc60 100755 (executable)
@@ -220,6 +220,15 @@ $(OBJS_DIR)\ref_tsk.c : $(TSKOBJ_DIR)\ref_tsk.c
 $(OBJS_DIR)\ref_tst.c : $(TSKOBJ_DIR)\ref_tst.c
        $(CMD_CP) $(TSKOBJ_DIR)\ref_tst.c $(OBJS_DIR)\
 
+$(OBJS_DIR)\def_tex.c : $(TSKOBJ_DIR)\def_tex.c
+       $(CMD_CP) $(TSKOBJ_DIR)\def_tex.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\ras_tex.c : $(TSKOBJ_DIR)\ras_tex.c
+       $(CMD_CP) $(TSKOBJ_DIR)\ras_tex.c $(OBJS_DIR)\
+
+$(OBJS_DIR)\exe_tex.c : $(TSKOBJ_DIR)\exe_tex.c
+       $(CMD_CP) $(TSKOBJ_DIR)\exe_tex.c $(OBJS_DIR)\
+
 
 $(OBJS_DIR)\cre_sem.c : $(SEMOBJ_DIR)\cre_sem.c
        $(CMD_CP) $(SEMOBJ_DIR)\cre_sem.c $(OBJS_DIR)\
@@ -298,6 +307,9 @@ $(OBJS_DIR)\acre_dtq.c : $(DTQOBJ_DIR)\acre_dtq.c
 $(OBJS_DIR)\kcre_dtq.c : $(DTQOBJ_DIR)\kcre_dtq.c
        $(CMD_CP) $(DTQOBJ_DIR)\kcre_dtq.c $(OBJS_DIR)\
 
+$(OBJS_DIR)\del_dtq.c : $(DTQOBJ_DIR)\del_dtq.c
+       $(CMD_CP) $(DTQOBJ_DIR)\del_dtq.c $(OBJS_DIR)\
+
 $(OBJS_DIR)\snd_dtq.c : $(DTQOBJ_DIR)\snd_dtq.c
        $(CMD_CP) $(DTQOBJ_DIR)\snd_dtq.c $(OBJS_DIR)\
 
@@ -503,6 +515,9 @@ $(OBJS_DIR)\exe_isr..$(EXT_OBJ):    $(OBJS_DIR)\rsm_tsk.c   $(COMMON_HEADERS)
 $(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\dly_tsk.c   $(COMMON_HEADERS)
 $(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\ref_tsk.c   $(COMMON_HEADERS)
 $(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\ref_tst.c   $(COMMON_HEADERS)
+$(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\def_tex.c   $(COMMON_HEADERS)
+$(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\ras_tex.c   $(COMMON_HEADERS)
+$(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\exe_tex.c   $(COMMON_HEADERS)
 
 $(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\cre_sem.c   $(COMMON_HEADERS) $(SEMOBJ_HEADERS)
 $(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\acre_sem.c  $(COMMON_HEADERS) $(SEMOBJ_HEADERS)
@@ -531,6 +546,7 @@ $(OBJS_DIR)\exe_isr..$(EXT_OBJ):    $(OBJS_DIR)\ref_flg.c   $(COMMON_HEADERS) $(FLGOB
 $(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\cre_dtq.c   $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
 $(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\acre_dtq.c  $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
 $(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\kcre_dtq.c  $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
+$(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\del_dtq.c   $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
 $(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\snd_dtq.c   $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
 $(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\fsnd_dtq.c  $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
 $(OBJS_DIR)\exe_isr..$(EXT_OBJ):       $(OBJS_DIR)\rcv_dtq.c   $(COMMON_HEADERS) $(DTQOBJ_HEADERS)
index 9f0b1db..4dbb59f 100755 (executable)
@@ -239,6 +239,9 @@ CSRCS = $(CSRCS) $(TSKOBJ_DIR)\rsm_tsk.c
 CSRCS = $(CSRCS) $(TSKOBJ_DIR)\dly_tsk.c
 CSRCS = $(CSRCS) $(TSKOBJ_DIR)\ref_tsk.c
 CSRCS = $(CSRCS) $(TSKOBJ_DIR)\ref_tst.c
+CSRCS = $(CSRCS) $(TSKOBJ_DIR)\def_tex.c
+CSRCS = $(CSRCS) $(TSKOBJ_DIR)\ras_tex.c
+CSRCS = $(CSRCS) $(TSKOBJ_DIR)\exe_tex.c
 OBJS = $(OBJS) $(OBJS_DIR)\acre_tsk.$(EXT_OBJ)
 OBJS = $(OBJS) $(OBJS_DIR)\kcre_tsk.$(EXT_OBJ)
 OBJS = $(OBJS) $(OBJS_DIR)\del_tsk.$(EXT_OBJ)
@@ -254,6 +257,9 @@ OBJS = $(OBJS) $(OBJS_DIR)\rsm_tsk.$(EXT_OBJ)
 OBJS = $(OBJS) $(OBJS_DIR)\dly_tsk.$(EXT_OBJ)
 OBJS = $(OBJS) $(OBJS_DIR)\ref_tsk.$(EXT_OBJ)
 OBJS = $(OBJS) $(OBJS_DIR)\ref_tst.$(EXT_OBJ)
+OBJS = $(OBJS) $(OBJS_DIR)\def_tex.$(EXT_OBJ)
+OBJS = $(OBJS) $(OBJS_DIR)\ras_tex.$(EXT_OBJ)
+OBJS = $(OBJS) $(OBJS_DIR)\exe_tex.$(EXT_OBJ)
 
 
 # Semaphores
@@ -313,6 +319,7 @@ DTQOBJ_DIR = $(KERNEL_OBJ_DIR)\dtq
 CSRCS = $(CSRCS) $(DTQOBJ_DIR)\cre_dtq.c
 CSRCS = $(CSRCS) $(DTQOBJ_DIR)\acre_dtq.c
 CSRCS = $(CSRCS) $(DTQOBJ_DIR)\kcre_dtq.c
+CSRCS = $(CSRCS) $(DTQOBJ_DIR)\del_dtq.c
 CSRCS = $(CSRCS) $(DTQOBJ_DIR)\snd_dtq.c
 CSRCS = $(CSRCS) $(DTQOBJ_DIR)\fsnd_dtq.c
 CSRCS = $(CSRCS) $(DTQOBJ_DIR)\rcv_dtq.c
@@ -321,6 +328,7 @@ CSRCS = $(CSRCS) $(DTQOBJ_DIR)\trcv_dtq.c
 OBJS = $(OBJS) $(OBJS_DIR)\cre_dtq.$(EXT_OBJ)
 OBJS = $(OBJS) $(OBJS_DIR)\acre_dtq.$(EXT_OBJ)
 OBJS = $(OBJS) $(OBJS_DIR)\kcre_dtq.$(EXT_OBJ)
+OBJS = $(OBJS) $(OBJS_DIR)\del_dtq.$(EXT_OBJ)
 OBJS = $(OBJS) $(OBJS_DIR)\snd_dtq.$(EXT_OBJ)
 OBJS = $(OBJS) $(OBJS_DIR)\fsnd_dtq.$(EXT_OBJ)
 OBJS = $(OBJS) $(OBJS_DIR)\rcv_dtq.$(EXT_OBJ)
index 2dbcb9a..99d2951 100755 (executable)
                "dly_tsk.c",
                "ref_tsk.c",
                "ref_tst.c",
+               "def_tex.c",
+               "ras_tex.c",
+               "exe_tex.c",
        ],
        [
                "Semaphores",
                "cre_dtq.c",
                "acre_dtq.c",
                "kcre_dtq.c",
+               "del_dtq.c",
                "snd_dtq.c",
                "fsnd_dtq.c",
                "rcv_dtq.c",
index 483ad41..397cfdc 100755 (executable)
@@ -71,8 +71,12 @@ C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ
 /* ref_tsk */
 #define _KERNEL_CFG_REF_TSK_E_ID               TRUE
 #define _KERNEL_CFG_REF_TSK_E_NOEXS            TRUE
+#define _KERNEL_CFG_REF_TSK_E_NOSPT            FALSE
 
 /* ref_tst */
+#define _KERNEL_CFG_REF_TST_E_ID               TRUE
+#define _KERNEL_CFG_REF_TST_E_NOEXS            TRUE
+#define _KERNEL_CFG_REF_TST_E_NOSPT            FALSE
 
 /* slp_tsk */
 /* tslp_tsk */
@@ -267,6 +271,10 @@ C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ
 #define _KERNEL_CFG_ACRE_DTQ_E_NOSPT   FALSE
 
 /* del_dtq */
+#define _KERNEL_CFG_DEL_DTQ_E_ID               TRUE
+#define _KERNEL_CFG_DEL_DTQ_E_NOEXS            TRUE
+#define _KERNEL_CFG_DEL_DTQ_E_NOSPT            FALSE
+
 /* snd_dtq */
 #define _KERNEL_CFG_SND_DTQ_E_CTX              TRUE
 #define _KERNEL_CFG_SND_DTQ_E_ID               TRUE
index 3175f1c..f9f69a4 100755 (executable)
@@ -291,6 +291,32 @@ C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ
 
 
 
+/* ------------------------------------------------------------------ */
+/*  System Time Management                                            */
+/* ------------------------------------------------------------------ */
+
+/* %jp{タイムティックの周期}%en{Time Tick Period} */
+#define _KERNEL_CFG_FRACTIONAL_TIMTIC  TRUE                            /**< %jp{コンフィギュレータでタイムティックの分数指定を許す} */
+#define _KERNEL_CFG_TIC_NUME                   1                                       /**< %jp{デフォルトのタイムティック周期の分子} */
+#define _KERNEL_CFG_TIC_DENO                   1                                       /**< %jp{デフォルトのタイムティック周期の分母} */
+
+
+
+/* ------------------------------------------------------------------ */
+/*  Cyclic Handlers                                                   */
+/* ------------------------------------------------------------------ */
+
+/* Attribute */
+#define _KERNEL_CFG_CYC_TA_STA                 TRUE                            /**< %jp{TA_STA属性に対応する} */
+#define _KERNEL_CFG_CYC_TA_PHS                 TRUE                            /**< %jp{TA_PHS属性に対応する} */
+
+/* Control block */
+#define _KERNEL_CFG_CYCCB_ALGORITHM            _KERNEL_CYCCB_ALG_PTRARRAY
+#define _KERNEL_CFG_CYCCB_SPLIT_RO             FALSE                           /**< %jp{CYCCBの不変部を分割してROM部配置とするか} */
+#define _KERNEL_CFG_CYCCB_BITFIELD             FALSE                           /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */
+
+
+
 /* ---------------------------------------------- */
 /*  Interrupt Service Routines                    */
 /* ---------------------------------------------- */
@@ -303,15 +329,6 @@ C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ
 
 
 
-/* ------------------------------------------------------------------ */
-/*  System Time Management                                            */
-/* ------------------------------------------------------------------ */
-
-/* %jp{タイムティックの周期}%en{Time Tick Period} */
-#define _KERNEL_CFG_FRACTIONAL_TIMTIC  TRUE                            /**< %jp{コンフィギュレータでタイムティックの分数指定を許す} */
-#define _KERNEL_CFG_TIC_NUME                   1                                       /**< %jp{デフォルトのタイムティック周期の分子} */
-#define _KERNEL_CFG_TIC_DENO                   1                                       /**< %jp{デフォルトのタイムティック周期の分母} */
-
 
 
 /* ---------------------------------------------- */
@@ -348,13 +365,13 @@ C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ
 #define _KERNEL_CFG_DLY_TSK                    TRUE                            /* dly_tsk */
 
 /* Task exception handling functions */
-#define _KERNEL_CFG_DEF_TEX                    FALSE                           /* def_tex */
-#define _KERNEL_CFG_RAS_TEX                    FALSE                           /* ras_tex */
-#define _KERNEL_CFG_IRAS_TEX                   FALSE                           /* iras_tex */
-#define _KERNEL_CFG_DIS_TEX                    FALSE                           /* dis_tex */
-#define _KERNEL_CFG_ENA_TEX                    FALSE                           /* ena_tex */
-#define _KERNEL_CFG_SNS_TEX                    FALSE                           /* sns_tex */
-#define _KERNEL_CFG_REF_TEX                    FALSE                           /* ref_tex */
+#define _KERNEL_CFG_DEF_TEX                    TRUE                            /* def_tex */
+#define _KERNEL_CFG_RAS_TEX                    TRUE                            /* ras_tex */
+#define _KERNEL_CFG_IRAS_TEX                   TRUE                            /* iras_tex */
+#define _KERNEL_CFG_DIS_TEX                    TRUE                            /* dis_tex */
+#define _KERNEL_CFG_ENA_TEX                    TRUE                            /* ena_tex */
+#define _KERNEL_CFG_SNS_TEX                    TRUE                            /* sns_tex */
+#define _KERNEL_CFG_REF_TEX                    TRUE                            /* ref_tex */
 
 /* Semaphores */
 #define _KERNEL_CFG_CRE_SEM                    TRUE                            /* cre_sem */
index bba9f26..0d142c0 100755 (executable)
@@ -38,7 +38,7 @@ typedef struct _kernel_t_toqcb
 #define _KERNEL_TSK_SET_TOQPREV(tcb, x)                        do { (tcb)->toqobj_prev = (x); } while (0)
 #define _KERNEL_TSK_GET_TOQPREV(tcb)                   ((tcb)->toqobj_prev)
 #define _KERNEL_TSK_SET_TOQDIFTIM(tcb, x)              do { (tcb)->toqobj_diftim = (x); } while (0)
-#define _KERNEL_TSK_GET_TOQDIFTIM(tcb)                 ((tcb)->toqobj_diftim)
+#define _KERNEL_TSK_GET_TOQDIFTIM(tcbl)                        ((tcb)->toqobj_diftim)
 
 
 
index 203fa7d..0115de5 100755 (executable)
@@ -183,7 +183,7 @@ extern  _KERNEL_T_CYCCB                                     _kernel_cyccb_tbl[];                                                                    /**< %jp{周期ハン
 
 /* %jp{ポインタ配列管理の場合}%en{pointer array} */
 extern  _KERNEL_T_CYCCB                                        *_kernel_cyccb_tbl[];                                                                   /**< %jp{周期ハンドラコントロールブロックテーブル} */
-#define _KERNEL_CYC_ID2CYCCB(cycid)            (_kernel_cyccb_tbl[(cycid) - _KERNEL_TMIN_CYCID])               /**< %jp{周期ハンドラIDからCYCCB アドレスを取得} */
+#define _KERNEL_CYC_ID2CYCCB(cycid)            (_kernel_cyccb_tbl[(cycid) - _KERNEL_CYC_TMIN_ID])              /**< %jp{周期ハンドラIDからCYCCB アドレスを取得} */
 #define _KERNEL_CYC_CHECK_EXS(cycid)   (_KERNEL_CYC_ID2CYCCB(cycid) != NULL)                                   /**< %jp{オブジェクトの存在チェック} */
 
 #endif
index 509ba83..fa4269f 100755 (executable)
@@ -293,6 +293,7 @@ extern  _KERNEL_T_DTQCB                                     *_kernel_dtqcb_tbl[];                                                                   /**< %jp{データキ
 #define _KERNEL_DTQ_GET_DTQCNT(dtqcb_ro)       (0)
 #endif
 
+
 /* dtq */
 #if _KERNEL_DTQCB_DTQ
 #define _KERNEL_DTQ_SET_DTQ(dtqcb_ro, x)       do { (dtqcb_ro)->dtq = (VP_INT *)(x); } while (0)
diff --git a/kernel/include/object/texobj.h b/kernel/include/object/texobj.h
deleted file mode 100755 (executable)
index c27c72e..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
-/**
- *  Hyper Operating System V4 Advance
- *
- * @file  texobj.h
- * @brief %jp{タスク例外処理オジェクトのヘッダファイル}%en{Task Exception Handling Routine object heder file}
- *
- * Copyright (C) 1998-2008 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#ifndef _KERNEL__object__texobj_h__
-#define _KERNEL__object__texobj_h__
-
-
-
-/* ------------------------------------------ */
-/*  Primitive type definition                 */
-/* ------------------------------------------ */
-
-
-/* %jp{タスク例外処理ルーチン属性用の型} */
-#if _KERNEL_TEXCB_BITFIELD             /* %jp{TEXCBにビットフィールドを利用する場合} */
-
-/* %jp{TA_HLNG と TA_ASM の判定に 2bit 必要} */
-typedef unsigned int                                   _KERNEL_TEX_T_TEXATR;
-typedef unsigned int                                   _KERNEL_TEXCB_T_TEXATR;
-#define _KERNEL_TEXCB_TBITDEF_TEXATR   : 2
-
-#else                                                  /* %jp{TEXCBにビットフィールドを利用しない場合} */
-
-typedef _KERNEL_T_FAST_UB                              _KERNEL_TEX_T_TEXATR;
-typedef _KERNEL_T_LEAST_UB                             _KERNEL_TEXCB_T_TEXATR;
-#define _KERNEL_TEXCB_TBITDEF_TEXATR
-
-#endif
-
-
-/* %jp{タスク例外処理ルーチンの起動番地の型} */
-typedef FP                                                             _KERNEL_TEX_T_TEXRTN;
-typedef FP                                                             _KERNEL_TEXCB_T_TEXRTN;
-#define _KERNEL_TEXCB_TBITDEF_TEXRTN
-
-
-/* %jp{タスク例外処理禁止状態の型} */
-#if _KERNEL_TEXCB_BITFIELD             /* %jp{TEXCBにビットフィールドを利用する場合} */
-
-#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_LEAST_CB_SIZE       /* %jp{符号付優先の場合1bit増やして符号付を使う} */
-typedef signed int                                             _KERNEL_TEX_T_STATE;                    /**< %jp{イベントフラグ属性を演算操作するときの型} */
-typedef signed int                                             _KERNEL_TEXCB_T_STATE;                  /**< %jp{イベントフラグ属性をTEXCBに格納するときの型} */
-#define _KERNEL_TEXCB_TBITDEF_STATE            : 1 + 1                                                 /**< %jp{イベントフラグ属性のビットフィールド宣言時の幅} */
-#else
-typedef unsigned int                                   _KERNEL_TEX_T_STATE;                    /**< %jp{イベントフラグ属性を演算操作するときの型} */
-typedef unsigned int                                   _KERNEL_TEXCB_T_STATE;                  /**< %jp{イベントフラグ属性をTEXCBに格納するときの型} */
-#define _KERNEL_TEXCB_TBITDEF_STATE            : 1                                                             /**< %jp{イベントフラグ属性のビットフィールド宣言時の幅} */
-#endif
-
-#else                                                  /* %jp{TEXCBにビットフィールドを利用しない場合} */
-
-#if _KERNEL_PROCATR_SIGNED_INT
-typedef _KERNEL_T_FAST_B                               _KERNEL_TEX_T_STATE;                    /**< %jp{イベントフラグ属性を演算操作するときの型} */
-typedef _KERNEL_T_LEAST_B                              _KERNEL_TEXCB_T_STATE;                  /**< %jp{イベントフラグ属性をTEXCBに格納するときの型} */
-#else
-typedef _KERNEL_T_FAST_UB                              _KERNEL_TEX_T_STATE;                    /**< %jp{イベントフラグ属性を演算操作するときの型} */
-typedef _KERNEL_T_LEAST_UB                             _KERNEL_TEXCB_T_STATE;                  /**< %jp{イベントフラグ属性をTEXCBに格納するときの型} */
-#endif
-
-#define _KERNEL_TEXCB_TBITDEF_STATE                                                                            /**< %jp{イベントフラグ属性のビットフィールド宣言時の幅} */
-
-#endif
-
-
-/* %jp{例外要因パターン用の型} */
-#if _KERNEL_TEXCB_BITFIELD             /* %jp{TEXCBにビットフィールドを利用する場合} */
-
-#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */
-typedef signed int                                             _KERNEL_TEX_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
-typedef signed int                                             _KERNEL_TEXCB_T_TEXPTN;                 /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
-#define _KERNEL_TEXCB_TBITDEF_TEXPTN   : _KERNEL_TEX_TBIT_TEXPTN + 1   /**< %jp{例外要因パターンのビットフィールド宣言時の幅} */
-#else
-typedef unsigned int                                   _KERNEL_TEX_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
-typedef unsigned int                                   _KERNEL_TEXCB_T_TEXPTN;                 /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
-#define _KERNEL_TEXCB_TBITDEF_TEXPTN   : _KERNEL_TEX_TBIT_TEXPTN               /**< %jp{例外要因パターンのビットフィールド宣言時の幅} */
-#endif
-
-#else                                                  /* %jp{TEXCBにビットフィールドを利用しない場合} */
-
-#if _KERNEL_TEX_TBIT_TEXPTN <= 7 && _KERNEL_PROCATR_SIGNED_INT
-typedef _KERNEL_T_FAST_B                               _KERNEL_TEX_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
-typedef _KERNEL_T_LEAST_B                              _KERNEL_TEXCB_T_TEXPTN;                 /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
-#elif _KERNEL_TEX_TBIT_TEXPTN <= 8 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
-typedef _KERNEL_T_FAST_UB                              _KERNEL_TEX_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
-typedef _KERNEL_T_LEAST_UB                             _KERNEL_TEXCB_T_TEXPTN;                 /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
-#elif _KERNEL_TEX_TBIT_TEXPTN <= 15 && _KERNEL_PROCATR_SIGNED_INT
-typedef _KERNEL_T_FAST_H                               _KERNEL_TEX_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
-typedef _KERNEL_T_LEAST_H                              _KERNEL_TEXCB_T_TEXPTN;                 /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
-#elif _KERNEL_TEX_TBIT_TEXPTN <= 16 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
-typedef _KERNEL_T_FAST_UH                              _KERNEL_TEX_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
-typedef _KERNEL_T_LEAST_UH                             _KERNEL_TEXCB_T_TEXPTN;                 /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
-#elif _KERNEL_TEX_TBIT_TEXPTN <= 31 && _KERNEL_PROCATR_SIGNED_INT
-typedef _KERNEL_T_FAST_W                               _KERNEL_TEX_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
-typedef _KERNEL_T_LEAST_W                              _KERNEL_TEXCB_T_TEXPTN;                 /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
-#elif _KERNEL_TEX_TBIT_TEXPTN <= 32 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
-typedef _KERNEL_T_FAST_UW                              _KERNEL_TEX_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
-typedef _KERNEL_T_LEAST_UW                             _KERNEL_TEXCB_T_TEXPTN;                 /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
-#elif _KERNEL_TEX_TBIT_TEXPTN <= 63 && _KERNEL_PROCATR_SIGNED_INT
-typedef _KERNEL_T_FAST_D                               _KERNEL_TEX_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
-typedef _KERNEL_T_LEAST_D                              _KERNEL_TEXCB_T_TEXPTN;                 /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
-#else
-typedef _KERNEL_T_FAST_UD                              _KERNEL_TEX_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
-typedef _KERNEL_T_LEAST_UD                             _KERNEL_TEXCB_T_TEXPTN;                 /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
-#endif
-
-#define _KERNEL_TEXCB_TBITDEF_TEXPTN                                                                   /**< %jp{例外要因パターンのビットフィールド宣言時の幅} */
-
-#endif
-
-
-
-/* ------------------------------------------ */
-/*  Control block                             */
-/* ------------------------------------------ */
-
-#if _KERNEL_TEXCB_SPLIT_RO
-
-
-/** %jp{タスク例外処理ルーチンコントロールブロック(リードオンリー部)}%en{Task Exception Handling Routine Control Block(read-only)} */
-typedef struct _kernel_t_texcb_ro
-{
-#if _KERNEL_TEXCB_TEXATR
-       _KERNEL_TEXCB_T_TEXATR  texatr          _KERNEL_TEXCB_TBITDEF_TEXATR;           /**< %jp{タスク例外処理ルーチン属性} */
-#endif
-
-#if _KERNEL_TEXCB_TEXRTN
-       _KERNEL_TEXCB_T_TEXRTN  texrtn          _KERNEL_TEXCB_TBITDEF_TEXRTN;           /**< %jp{タスク例外処理ルーチンの起動番地} */
-#endif
-} _KERNEL_T_TEXCB_RO;
-
-typedef const _KERNEL_T_TEXCB_RO       *_KERNEL_T_TEXCB_RO_PTR;
-
-
-/** %jp{タスク例外処理ルーチンコントロールブロック}%en{Task Exception Handling Routine Control Block} */
-typedef struct _kernel_t_texcb
-{
-#if _KERNEL_TEXCB_STATE
-       _KERNEL_TEXCB_T_STATE   state           _KERNEL_TEXCB_TBITDEF_STATE;            /**< %jp{タスク例外処理禁止状態} */
-#endif
-
-#if _KERNEL_TEXCB_RASPTN
-       _KERNEL_TEXCB_T_TEXPTN  rasptn          _KERNEL_TEXCB_TBITDEF_TEXPTN;           /**< %jp{タスク例外処理要因} */
-#endif
-
-#if _KERNEL_TEXCB_ALGORITHM == _KERNEL_TEXCB_ALG_PTRARRAY
-       _KERNEL_T_TEXCB_RO_PTR  texcb_ro;                                                                               /**< %jp{タスク例外処理ルーチンコントロールブロックRO部へのポインタ} */
-#endif
-} _KERNEL_T_TEXCB;
-
-typedef _KERNEL_T_TEXCB                                *_KERNEL_T_TEXCB_PTR;
-
-
-#else
-
-
-/** %jp{タスク例外処理ルーチンコントロールブロック}%en{Task Exception Handling Routine Control Block} */
-typedef struct _kernel_t_texcb
-{
-#if _KERNEL_TEXCB_STATE
-       _KERNEL_TEXCB_T_STATE   state           _KERNEL_TEXCB_TBITDEF_STATE;            /**< %jp{タスク例外処理禁止状態} */
-#endif
-
-#if _KERNEL_TEXCB_RASPTN
-       _KERNEL_TEXCB_T_TEXPTN  rasptn          _KERNEL_TEXCB_TBITDEF_TEXPTN;           /**< %jp{タスク例外処理要因} */
-#endif
-
-
-#if _KERNEL_TEXCB_TEXATR
-       _KERNEL_TEXCB_T_TEXATR  texatr          _KERNEL_TEXCB_TBITDEF_TEXATR;           /**< %jp{タスク例外処理ルーチン属性} */
-#endif
-
-#if _KERNEL_TEXCB_TEXRTN
-       _KERNEL_TEXCB_T_TEXRTN  texrtn          _KERNEL_TEXCB_TBITDEF_TEXRTN;           /**< %jp{タスク例外処理ルーチンの起動番地} */
-#endif
-} _KERNEL_T_TEXCB;
-
-typedef _KERNEL_T_TEXCB                                _KERNEL_T_TEXCB_RO;
-typedef const _KERNEL_T_TEXCB_RO       *_KERNEL_T_TEXCB_RO_PTR;
-typedef _KERNEL_T_TEXCB                                *_KERNEL_T_TEXCB_PTR;
-
-
-#endif
-
-
-
-/* ------------------------------------------ */
-/*  ID range                                  */
-/* ------------------------------------------ */
-
-#define _KERNEL_TEX_TMIN_ID                            _KERNEL_TSK_TMIN_ID                                     /**< %jp{タスク例外処理ルーチンの最小値} */
-#define _KERNEL_TEX_TMAX_ID                            _KERNEL_TSK_TMAX_ID                                     /**< %jp{タスク例外処理ルーチンの最大値} */
-
-#define _KERNEL_TEX_CHECK_TSKID(tskid) ((tskid) >= _KERNEL_TEX_TMIN_ID && (tskid) <= _KERNEL_TEX_TMAX_ID)
-                                                                                                                                                       /**< %jp{ID範囲チェック} */
-
-
-/* ------------------------------------------ */
-/*  Control block tables                      */
-/* ------------------------------------------ */
-
-#if _KERNEL_TEXCB_ALGORITHM == _KERNEL_TEXCB_ALG_BLKARRAY
-#if _KERNEL_TEXCB_SPLIT_RO
-
-/* %jp{ブロック配列管理でRO分離の場合}%en{block array} */
-extern  _KERNEL_T_TEXCB                                        _kernel_texcb_tbl[];                                                                    /**< %jp{タスク例外処理ルーチンコントロールブロックテーブル} */
-extern const _KERNEL_T_TEXCB_RO                        _kernel_texcb_ro_tbl[];                                                                 /**< %jp{タスク例外処理ルーチンコントロールブロック(リードオンリー部)テーブル} */
-#define _KERNEL_TEX_ID2TEXCB(tskid)            (&_kernel_texcb_tbl[(tskid) - _KERNEL_TEX_TMIN_ID])             /**< %jp{コントロールブロックの取得} */
-#define _KERNEL_TEX_CHECK_EXS(tskid)   (_kernel_texcb_ro_tbl[(tskid) - _KERNEL_TEX_TMIN_ID].texrtn != NULL )
-                                                                                                                                                                                               /**< %jp{オブジェクトの存在チェック} */
-
-#else
-
-/* %jp{ブロック配列管理の場合}%en{block array} */
-extern  _KERNEL_T_TEXCB                                        _kernel_texcb_tbl[];                                                                    /**< %jp{タスク例外処理ルーチンコントロールブロックテーブル} */
-#define _KERNEL_TEX_ID2TEXCB(tskid)            (&_kernel_texcb_tbl[(tskid) - _KERNEL_TEX_TMIN_ID])             /**< %jp{コントロールブロックの取得} */
-#define _KERNEL_TEX_CHECK_EXS(tskid)   (_kernel_texcb_tbl[(tskid) - _KERNEL_TEX_TMIN_ID].texrtn != NULL )                      
-                                                                                                                                                                                               /**< %jp{オブジェクトの存在チェック} */
-
-#endif
-
-#elif _KERNEL_TEXCB_ALGORITHM == _KERNEL_TEXCB_ALG_PTRARRAY
-
-/* %jp{ポインタ配列管理の場合}%en{pointer array} */
-extern  _KERNEL_T_TEXCB                                        *_kernel_texcb_tbl[];                                                                   /**< %jp{タスク例外処理ルーチンコントロールブロックテーブル} */
-#define _KERNEL_TEX_ID2TEXCB(tskid)            (_kernel_texcb_tbl[(tskid) - _KERNEL_TEX_TMIN_ID])              /**< %jp{タスクIDからTEXCB アドレスを取得} */
-#define _KERNEL_TEX_CHECK_EXS(tskid)   (_KERNEL_TEX_ID2TEXCB(tskid) != NULL)                                   /**< %jp{オブジェクトの存在チェック} */
-
-#endif
-
-
-
-/* ------------------------------------------ */
-/*   Accessor for TEXCB                       */
-/* ------------------------------------------ */
-
-/* texcb_ro */
-#if !_KERNEL_TEXCB_SPLIT_RO                                                            
-#define _KERNEL_TEX_GET_TEXCB_RO(tskid, texcb) (texcb)
-#else
-#if _KERNEL_TEXCB_ALGORITHM == _KERNEL_TEXCB_ALG_BLKARRAY              /* %jp{TEXCBを単純配列で管理}%en{array of block} */
-#define _KERNEL_TEX_GET_TEXCB_RO(tskid, texcb) (&_kernel_texcb_ro_tbl[(tskid)])
-#elif _KERNEL_TEXCB_ALGORITHM == _KERNEL_TEXCB_ALG_PTRARRAY            /* %jp{TEXCBをポインタ配列で管理}%en{array of pointer} */
-#define _KERNEL_TEX_GET_TEXCB_RO(tskid, texcb) ((texcb)->texcb_ro)
-#endif
-#endif
-
-
-/* texatr */
-#if _KERNEL_TEXCB_STATE
-#define _KERNEL_TEX_SET_STATE(texcb, x)                        do { (texcb)->state = (_KERNEL_TEXCB_T_STATE)(x); } while (0)
-#define _KERNEL_TEX_GET_STATE(texcb)                   ((_KERNEL_TEX_T_STATE)(texcb)->state)
-#else
-#define _KERNEL_TEX_SET_STATE(texcb, x)                        do { } while (0)
-#define _KERNEL_TEX_GET_STATE(texcb)                   (0)
-#endif
-
-
-/* rasptn */
-#if _KERNEL_TEXCB_TEXPTN
-#define _KERNEL_TEX_SET_RASPTN(texcb, x)               do { (texcb)->rasptn = (_KERNEL_TEXCB_T_TEXPTN)(x); } while (0)
-#define _KERNEL_TEX_GET_RASPTN(texcb)                  ((_KERNEL_TEX_T_TEXPTN)(texcb)->rasptn)
-#else
-#define _KERNEL_TEX_SET_RASPTN(texcb, x)               do { } while (0)
-#define _KERNEL_TEX_GET_RASPTN(texcb)                  (0)
-#endif
-
-
-/* texatr */
-#if _KERNEL_TEXCB_TEXATR
-#define _KERNEL_TEX_SET_TEXATR(texcb_ro, x)            do { (texcb_ro)->texatr = (_KERNEL_TEXCB_T_TEXATR)(x); } while (0)
-#define _KERNEL_TEX_GET_TEXATR(texcb_ro)               ((_KERNEL_TEX_T_TEXATR)(texcb_ro)->texatr)
-#else
-#define _KERNEL_TEX_SET_TEXATR(texcb_ro, x)            do { } while (0)
-#define _KERNEL_TEX_GET_TEXATR(texcb_ro)               (_KERNEL_TMAX_TEXATR)
-#endif
-
-/* texrtn */
-#if _KERNEL_TEXCB_TEXRTN
-#define _KERNEL_TEX_SET_TEXRTN(texcb_ro, x)            do { (texcb_ro)->texrtn = (_KERNEL_TEXCB_T_TEXRTN)(x); } while (0)
-#define _KERNEL_TEX_GET_TEXRTN(texcb_ro)               ((_KERNEL_TEX_T_TEXRTN)(texcb_ro)->texrtn)
-#else
-#define _KERNEL_TEX_SET_TEXRTN(texcb_ro, x)            do { } while (0)
-#define _KERNEL_TEX_GET_TEXRTN(texcb_ro)               (0)
-#endif
-
-
-
-/* ------------------------------------------ */
-/*   Macro functions                          */
-/* ------------------------------------------ */
-
-
-
-/* ------------------------------------------ */
-/*   Functions                                */
-/* ------------------------------------------ */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
-#endif /* _KERNEL__object__texobj_h__ */
-
-
-/* end of file */
index f29032b..2d1d5c2 100755 (executable)
@@ -446,6 +446,105 @@ typedef _KERNEL_T_LEAST_UD                                _KERNEL_TCB_T_RELTIM;                   /**< %jp{相対時間をTC
 
 
 
+/* %jp{タスク例外処理ルーチン属性用の型} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合} */
+
+/* %jp{TA_HLNG と TA_ASM の判定に 2bit 必要} */
+typedef unsigned int                                   _KERNEL_TSK_T_TEXATR;
+typedef unsigned int                                   _KERNEL_TCB_T_TEXATR;
+#define _KERNEL_TCB_TBITDEF_TEXATR             : 2
+
+#else                                                  /* %jp{TEXCBにビットフィールドを利用しない場合} */
+
+typedef _KERNEL_T_FAST_UB                              _KERNEL_TSK_T_TEXATR;
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_TCB_T_TEXATR;
+#define _KERNEL_TCB_TBITDEF_TEXATR
+
+#endif
+
+
+/* %jp{タスク例外処理ルーチンの起動番地の型} */
+typedef void (*_KERNEL_TSK_T_TEXRTN)(TEXPTN texptn, VP_INT exinf);
+typedef FP                                                             _KERNEL_TCB_T_TEXRTN;
+#define _KERNEL_TCB_TBITDEF_TEXRTN
+
+
+/* %jp{タスク例外処理禁止状態の型} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合} */
+
+#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_LEAST_CB_SIZE       /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_TSK_T_TEXSTAT;                  /**< %jp{タスク例外処理状態を演算操作するときの型} */
+typedef signed int                                             _KERNEL_TCB_T_TEXSTAT;                  /**< %jp{タスク例外処理状態をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TEXSTAT            : 1 + 1                                                 /**< %jp{タスク例外処理状態のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_TEX_T_TEXSTAT;                  /**< %jp{タスク例外処理状態を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_TEXCB_T_TEXSTAT;                /**< %jp{タスク例外処理状態をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TEXSTAT            : 1                                                             /**< %jp{タスク例外処理状態のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{TEXCBにビットフィールドを利用しない場合} */
+
+#if _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_TSK_T_TEXSTAT;                  /**< %jp{タスク例外処理状態を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_B                              _KERNEL_TCB_T_TEXSTAT;                  /**< %jp{タスク例外処理状態をTCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UB                              _KERNEL_TSK_T_TEXSTAT;                  /**< %jp{タスク例外処理状態を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_TCB_T_TEXSTAT;                  /**< %jp{タスク例外処理状態をTCBに格納するときの型} */
+#endif
+
+#define _KERNEL_TCB_TBITDEF_TEXSTAT                                                                            /**< %jp{タスク例外処理状態のビットフィールド宣言時の幅} */
+
+#endif
+
+
+/* %jp{例外要因パターン用の型} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合} */
+
+#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_TSK_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
+typedef signed int                                             _KERNEL_TCB_T_TEXPTN;                   /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TEXPTN             : _KERNEL_TEX_TBIT_TEXPTN + 1   /**< %jp{例外要因パターンのビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_TSK_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_TCB_T_TEXPTN;                   /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TEXPTN             : _KERNEL_TEX_TBIT_TEXPTN               /**< %jp{例外要因パターンのビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{TEXCBにビットフィールドを利用しない場合} */
+
+#if _KERNEL_TEX_TBIT_TEXPTN <= 7 && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_TSK_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_B                              _KERNEL_TCB_T_TEXPTN;                   /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
+#elif _KERNEL_TEX_TBIT_TEXPTN <= 8 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_TSK_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_TCB_T_TEXPTN;                   /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
+#elif _KERNEL_TEX_TBIT_TEXPTN <= 15 && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_TSK_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_H                              _KERNEL_TCB_T_TEXPTN;                   /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
+#elif _KERNEL_TEX_TBIT_TEXPTN <= 16 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_TSK_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UH                             _KERNEL_TCB_T_TEXPTN;                   /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
+#elif _KERNEL_TEX_TBIT_TEXPTN <= 31 && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_TSK_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_W                              _KERNEL_TCB_T_TEXPTN;                   /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
+#elif _KERNEL_TEX_TBIT_TEXPTN <= 32 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_TSK_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UW                             _KERNEL_TCB_T_TEXPTN;                   /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
+#elif _KERNEL_TEX_TBIT_TEXPTN <= 63 && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_TSK_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_D                              _KERNEL_TCB_T_TEXPTN;                   /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_TSK_T_TEXPTN;                   /**< %jp{例外要因パターンを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UD                             _KERNEL_TCB_T_TEXPTN;                   /**< %jp{例外要因パターンをTEXCBに格納するときの型} */
+#endif
+
+#define _KERNEL_TCB_TBITDEF_TEXPTN                                                                             /**< %jp{例外要因パターンのビットフィールド宣言時の幅} */
+
+#endif
+
+
+
+
 /* -------------------------------------------------------------------- */
 /*  TCB definetion                                                      */
 /* -------------------------------------------------------------------- */
@@ -494,10 +593,19 @@ typedef struct _kernel_t_tcb_ro                           /* タスクコントロールブロック(RO
 #if _KERNEL_TCB_ISP
        _KERNEL_TCB_T_ISP               isp                     _KERNEL_TCB_TBITDEF_ISP;                /**< %jp{スタックポインタの初期値}%en{Task initial stack pointer} */
 #endif
+
+#if _KERNEL_TCB_TEXATR
+       _KERNEL_TCB_T_TEXATR    texatr          _KERNEL_TCB_TBITDEF_TEXATR;             /**< %jp{タスク例外処理ルーチン属性} */
+#endif
+
+#if _KERNEL_TCB_TEXRTN
+       _KERNEL_TCB_T_TEXRTN    texrtn          _KERNEL_TCB_TBITDEF_TEXRTN;             /**< %jp{タスク例外処理ルーチンの起動番地} */
+#endif
 } _KERNEL_T_TCB_RO;
 
 typedef const _KERNEL_T_TCB_RO         *_KERNEL_T_TCB_RO_PTR;
 
+
 /** %jp{タスクコントロールブロック(RAM部)}%en{Task control block for RAM} */
 typedef struct _kernel_t_tcb
 {
@@ -565,6 +673,14 @@ typedef struct _kernel_t_tcb
        _KERNEL_TCB_T_TSKID             tskid           _KERNEL_TCB_TBITDEF_TSKID;              /**< %jp{タスクID番号の逆引き用}%en{Task object ID} */
 #endif
 
+#if _KERNEL_TCB_TEXSTAT
+       _KERNEL_TCB_T_TEXSTAT   texstat         _KERNEL_TCB_TBITDEF_TEXSTAT;    /**< %jp{タスク例外処理状態} */
+#endif
+
+#if _KERNEL_TCB_RASPTN
+       _KERNEL_TCB_T_TEXPTN    rasptn          _KERNEL_TCB_TBITDEF_TEXPTN;             /**< %jp{タスク例外処理要因} */
+#endif
+
 
 /* %jp{ポインタ管理時にROM部/RAM部を分離する場合はポインタを張る} */
 #if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY
@@ -644,6 +760,14 @@ typedef struct _kernel_t_tcb
 #if _KERNEL_TCB_TSKID
        _KERNEL_TCB_T_TSKID             tskid           _KERNEL_TCB_TBITDEF_TSKID;              /**< %jp{タスクID番号の逆引き用}%en{Task object ID} */
 #endif
+
+#if _KERNEL_TCB_TEXSTAT
+       _KERNEL_TCB_T_TEXSTAT   texstat         _KERNEL_TCB_TBITDEF_TEXSTAT;    /**< %jp{タスク例外処理状態} */
+#endif
+
+#if _KERNEL_TCB_RASPTN
+       _KERNEL_TCB_T_TEXPTN    rasptn          _KERNEL_TCB_TBITDEF_TEXPTN;             /**< %jp{タスク例外処理要因} */
+#endif
        
        
 #if _KERNEL_TCB_TSKATR
@@ -673,6 +797,14 @@ typedef struct _kernel_t_tcb
 #if _KERNEL_TCB_ISP
        _KERNEL_TCB_T_ISP               isp                     _KERNEL_TCB_TBITDEF_ISP;                /**< %jp{スタックポインタの初期値}%en{Task initial stack pointer} */
 #endif
+
+#if _KERNEL_TCB_TEXATR
+       _KERNEL_TCB_T_TEXATR    texatr          _KERNEL_TCB_TBITDEF_TEXATR;             /**< %jp{タスク例外処理ルーチン属性} */
+#endif
+
+#if _KERNEL_TCB_TEXRTN
+       _KERNEL_TCB_T_TEXRTN    texrtn          _KERNEL_TCB_TBITDEF_TEXRTN;             /**< %jp{タスク例外処理ルーチンの起動番地} */
+#endif
 } _KERNEL_T_TCB;
 
 typedef _KERNEL_T_TCB                          _KERNEL_T_TCB_RO;
@@ -737,19 +869,19 @@ extern  _KERNEL_T_TCB                                     *_kernel_tcb_tbl[];                                                                             /**< %jp{タスクコン
 
 #if _KERNEL_TSKHDL_ID          /* %jp{タスクハンドルにIDを使う}%en{TSKHDL is ID} */
 
-#define _KERNEL_TSK_ID2TSKHDL(tskid)           (tskid)
-#define _KERNEL_TSK_TSKHDL2ID(tskhdl)          (tskhdl)
-#define _KERNEL_TSK_TCB2TSKHDL(tcb)                    _KERNEL_TSK_TCB2ID(tcb)
-#define _KERNEL_TSK_TSKHDL2TCB(tskhdl)         _KERNEL_TSK_ID2TCB(tskhdl)
-#define _KERNEL_TSK_GET_TSKHDL(tskid, tcb)     (tskid)
+#define _KERNEL_TSK_ID2TSKHDL(tskid)                   (tskid)
+#define _KERNEL_TSK_TSKHDL2ID(tskhdl)                  (tskhdl)
+#define _KERNEL_TSK_TCB2TSKHDL(tcb)                            _KERNEL_TSK_TCB2ID(tcb)
+#define _KERNEL_TSK_TSKHDL2TCB(tskhdl)                 _KERNEL_TSK_ID2TCB(tskhdl)
+#define _KERNEL_TSK_GET_TSKHDL(tskid, tcb)             (tskid)
 
 #else                                          /* %jp{タスクハンドルにTCBのアドレスを使う}%en{TSKHDL is Address of TCB} */
 
-#define _KERNEL_TSK_ID2TSKHDL(tskid)           _KERNEL_TSK_ID2TCB(tskid)
-#define _KERNEL_TSK_TSKHDL2ID(tskhdl)          _KERNEL_TSK_TCB2ID(tskhdl)
-#define _KERNEL_TSK_TCB2TSKHDL(tskhdl)         (tskhdl)
-#define _KERNEL_TSK_TSKHDL2TCB(tskhdl)         (tskhdl)
-#define _KERNEL_TSK_GET_TSKHDL(tskid, tcb)     (tcb)
+#define _KERNEL_TSK_ID2TSKHDL(tskid)                   _KERNEL_TSK_ID2TCB(tskid)
+#define _KERNEL_TSK_TSKHDL2ID(tskhdl)                  _KERNEL_TSK_TCB2ID(tskhdl)
+#define _KERNEL_TSK_TCB2TSKHDL(tskhdl)                 (tskhdl)
+#define _KERNEL_TSK_TSKHDL2TCB(tskhdl)                 (tskhdl)
+#define _KERNEL_TSK_GET_TSKHDL(tskid, tcb)             (tcb)
 
 #endif
 
@@ -761,205 +893,242 @@ extern  _KERNEL_T_TCB                                   *_kernel_tcb_tbl[];                                                                             /**< %jp{タスクコン
 
 /* tcb_ro */
 #if !_KERNEL_TCB_SPLIT_RO
-#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb)     (tcb)
+#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb)             (tcb)
 #else
 #if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY          /* %jp{TCBを単純配列で管理}%en{array of block} */
-#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb)     (&_kernel_tcb_ro_tbl[(tskid)])
+#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb)             (&_kernel_tcb_ro_tbl[(tskid)])
 #elif _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY                /* %jp{TCBをポインタ配列で管理}%en{array of pointer} */
-#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb)     ((tcb)->tcb_ro)
+#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb)             ((tcb)->tcb_ro)
 #endif
 #endif
 
 
 /* ctxcb */
-#define _KERNEL_TSK_GET_CTXCB(tcb)                     (&(tcb)->ctxcb)
+#define _KERNEL_TSK_GET_CTXCB(tcb)                             (&(tcb)->ctxcb)
 
 /* que */
 #if _KERNEL_TCB_QUE
-#define _KERNEL_TSK_SET_QUE(tcb, x)                    do { (tcb)->pk_que = (_KERNEL_T_QUE *)(x); } while(0)
-#define _KERNEL_TSK_GET_QUE(tcb)                       ((_KERNEL_T_QUE *)(tcb)->pk_que)
+#define _KERNEL_TSK_SET_QUE(tcb, x)                            do { (tcb)->pk_que = (_KERNEL_T_QUE *)(x); } while(0)
+#define _KERNEL_TSK_GET_QUE(tcb)                               ((_KERNEL_T_QUE *)(tcb)->pk_que)
 #else  /* %jp{TCBに所属キューの情報を持たせない場合は別情報からの探索で求める} */
-#define _KERNEL_TSK_SET_QUE(tcb, x)                    do { } while(0)
-#define _KERNEL_TSK_GET_QUE(tcb)                       _kernel_get_que(tcb)
+#define _KERNEL_TSK_SET_QUE(tcb, x)                            do { } while(0)
+#define _KERNEL_TSK_GET_QUE(tcb)                               _kernel_get_que(tcb)
 #endif
 
 /* tskstat */
 #if _KERNEL_TCB_TSKSTAT
-#define _KERNEL_TSK_SET_TSKSTAT(tcb, x)                do { (tcb)->tskstat = (_KERNEL_TCB_T_TSKSTAT)(x); } while(0)
-#define _KERNEL_TSK_GET_TSKSTAT(tcb)           ((_KERNEL_TSK_T_TSKSTAT)(tcb)->tskstat)
+#define _KERNEL_TSK_SET_TSKSTAT(tcb, x)                        do { (tcb)->tskstat = (_KERNEL_TCB_T_TSKSTAT)(x); } while(0)
+#define _KERNEL_TSK_GET_TSKSTAT(tcb)                   ((_KERNEL_TSK_T_TSKSTAT)(tcb)->tskstat)
 #else
-#define _KERNEL_TSK_SET_TSKSTAT(tcb, x)                do { } while(0)
-#define _KERNEL_TSK_GET_TSKSTAT(tcb)           0
+#define _KERNEL_TSK_SET_TSKSTAT(tcb, x)                        do { } while(0)
+#define _KERNEL_TSK_GET_TSKSTAT(tcb)                   0
 #endif
 
 /* tskpri */
 #if _KERNEL_TCB_TSKPRI /* %jp{通常のTCBへのアクセサ} */
-#define _KERNEL_TSK_SET_TSKPRI(tcb, x)         do { (tcb)->tskpri = (x); } while(0)
-#define _KERNEL_TSK_GET_TSKPRI(tcb)                    ((tcb)->tskpri)
+#define _KERNEL_TSK_SET_TSKPRI(tcb, x)                 do { (tcb)->tskpri = (x); } while(0)
+#define _KERNEL_TSK_GET_TSKPRI(tcb)                            ((tcb)->tskpri)
 #else
 #if _KERNEL_TCB_ITSKPRI        /* %jp{優先度固定(ROM配置)時のアクセサ} */
-#define _KERNEL_TSK_SET_TSKPRI(tcb, x)         do { } while(0)
-#define _KERNEL_TSK_GET_TSKPRI(tcb)                    ((tcb)->itskpri)
+#define _KERNEL_TSK_SET_TSKPRI(tcb, x)                 do { } while(0)
+#define _KERNEL_TSK_GET_TSKPRI(tcb)                            ((tcb)->itskpri)
 #else                                  /* %jp{優先度未使用時(全てFIFO順)は1に固定する} */
-#define _KERNEL_TSK_SET_TSKPRI(tcb, x)         do { } while(0)
-#define _KERNEL_TSK_GET_TSKPRI(tcb)                    (1)
+#define _KERNEL_TSK_SET_TSKPRI(tcb, x)                 do { } while(0)
+#define _KERNEL_TSK_GET_TSKPRI(tcb)                            (1)
 #endif
 #endif
 
 /* tskbpri */
 #if _KERNEL_TCB_TSKBPRI
-#define _KERNEL_TSK_SET_TSKBPRI(tcb, x)                do { (tcb)->tskbpri = (x); } while(0)
-#define _KERNEL_TSK_GET_TSKBPRI(tcb)           ((tcb)->tskbpri)
+#define _KERNEL_TSK_SET_TSKBPRI(tcb, x)                        do { (tcb)->tskbpri = (x); } while(0)
+#define _KERNEL_TSK_GET_TSKBPRI(tcb)                   ((tcb)->tskbpri)
 #else
-#define _KERNEL_TSK_SET_TSKBPRI(tcb, x)                do { } while(0)
-#define _KERNEL_TSK_GET_TSKBPRI(tcb)           _KERNEL_TSK_GET_TSKPRI(tcb)
+#define _KERNEL_TSK_SET_TSKBPRI(tcb, x)                        do { } while(0)
+#define _KERNEL_TSK_GET_TSKBPRI(tcb)                   _KERNEL_TSK_GET_TSKPRI(tcb)
 #endif
 
 /* tskwait */
 #if _KERNEL_TCB_TSKWAIT
-#define _KERNEL_TSK_SET_TSKWAIT(tcb, x)                do { (tcb)->tskwait = (x); } while(0)
-#define _KERNEL_TSK_GET_TSKWAIT(tcb)           ((tcb)->tskwait)
+#define _KERNEL_TSK_SET_TSKWAIT(tcb, x)                        do { (tcb)->tskwait = (x); } while(0)
+#define _KERNEL_TSK_GET_TSKWAIT(tcb)                   ((tcb)->tskwait)
 #else
-#define _KERNEL_TSK_SET_TSKWAIT(tcb, x)                do { } while(0)
-#define _KERNEL_TSK_GET_TSKWAIT(tcb)           (0)
+#define _KERNEL_TSK_SET_TSKWAIT(tcb, x)                        do { } while(0)
+#define _KERNEL_TSK_GET_TSKWAIT(tcb)                   (0)
 #endif
 
 /* wobjid */
 #if _KERNEL_TCB_WOBJID
-#define _KERNEL_TSK_SET_WOBJID(tcb, x)         do { (tcb)->wobjid = (x); } while(0)
-#define _KERNEL_TSK_GET_WOBJID(tcb)                    ((tcb)->wobjid)
+#define _KERNEL_TSK_SET_WOBJID(tcb, x)                 do { (tcb)->wobjid = (x); } while(0)
+#define _KERNEL_TSK_GET_WOBJID(tcb)                            ((tcb)->wobjid)
 #else
-#define _KERNEL_TSK_SET_WOBJID(tcb, x)         do { } while(0)
-#define _KERNEL_TSK_GET_WOBJID(tcb)                    (0)
+#define _KERNEL_TSK_SET_WOBJID(tcb, x)                 do { } while(0)
+#define _KERNEL_TSK_GET_WOBJID(tcb)                            (0)
 #endif
 
 /* actcnt */
 #if _KERNEL_TCB_ACTCNT
-#define _KERNEL_TSK_SET_ACTCNT(tcb, x)         do { (tcb)->actcnt = (x); } while(0)
-#define _KERNEL_TSK_GET_ACTCNT(tcb)                    ((tcb)->actcnt)
+#define _KERNEL_TSK_SET_ACTCNT(tcb, x)                 do { (tcb)->actcnt = (x); } while(0)
+#define _KERNEL_TSK_GET_ACTCNT(tcb)                            ((tcb)->actcnt)
 #else
-#define _KERNEL_TSK_SET_ACTCNT(tcb, x)         do { } while(0)
-#define _KERNEL_TSK_GET_ACTCNT(tcb)                    (0)
+#define _KERNEL_TSK_SET_ACTCNT(tcb, x)                 do { } while(0)
+#define _KERNEL_TSK_GET_ACTCNT(tcb)                            (0)
 #endif
 
 /* wupcnt */
 #if _KERNEL_TCB_WUPCNT
-#define _KERNEL_TSK_SET_WUPCNT(tcb, x)         do { (tcb)->wupcnt = (x); } while(0)
-#define _KERNEL_TSK_GET_WUPCNT(tcb)                    ((tcb)->wupcnt)
+#define _KERNEL_TSK_SET_WUPCNT(tcb, x)                 do { (tcb)->wupcnt = (x); } while(0)
+#define _KERNEL_TSK_GET_WUPCNT(tcb)                            ((tcb)->wupcnt)
 #else
-#define _KERNEL_TSK_SET_WUPCNT(tcb, x)         do { } while(0)
-#define _KERNEL_TSK_GET_WUPCNT(tcb)                    (0)
+#define _KERNEL_TSK_SET_WUPCNT(tcb, x)                 do { } while(0)
+#define _KERNEL_TSK_GET_WUPCNT(tcb)                            (0)
 #endif
 
 /* suscnt */
 #if _KERNEL_TCB_SUSCNT
-#define _KERNEL_TSK_SET_SUSCNT(tcb, x)         do { (tcb)->suscnt = (x); } while(0)
-#define _KERNEL_TSK_GET_SUSCNT(tcb)                    ((tcb)->suscnt)
+#define _KERNEL_TSK_SET_SUSCNT(tcb, x)                 do { (tcb)->suscnt = (x); } while(0)
+#define _KERNEL_TSK_GET_SUSCNT(tcb)                            ((tcb)->suscnt)
 #else
-#define _KERNEL_TSK_SET_SUSCNT(tcb, x)         do { } while(0)
-#define _KERNEL_TSK_GET_SUSCNT(tcb)                    (0)
+#define _KERNEL_TSK_SET_SUSCNT(tcb, x)                 do { } while(0)
+#define _KERNEL_TSK_GET_SUSCNT(tcb)                            (0)
 #endif
 
 /* mtxhdl */
 #if _KERNEL_TCB_MTXHDL
-#define _KERNEL_TSK_SET_MTXHDL(tcb, x)         do { (tcb)->mtxhdl = (x); } while(0)
-#define _KERNEL_TSK_GET_MTXHDL(tcb)                    ((tcb)->mtxhdl)
+#define _KERNEL_TSK_SET_MTXHDL(tcb, x)                 do { (tcb)->mtxhdl = (x); } while(0)
+#define _KERNEL_TSK_GET_MTXHDL(tcb)                            ((tcb)->mtxhdl)
 #else
-#define _KERNEL_TSK_SET_MTXHDL(tcb, x)         do { } while(0)
-#define _KERNEL_TSK_GET_MTXHDL(tcb)                    _KERNEL_MTXHDL_NULL
+#define _KERNEL_TSK_SET_MTXHDL(tcb, x)                 do { } while(0)
+#define _KERNEL_TSK_GET_MTXHDL(tcb)                            _KERNEL_MTXHDL_NULL
 #endif
 
 /* ercd */
 #if _KERNEL_TCB_ERCD
-#define _KERNEL_TSK_SET_ERCD(tcb, x)           do { (tcb)->ercd = (x); } while(0)
-#define _KERNEL_TSK_GET_ERCD(tcb)                      ((tcb)->ercd)
+#define _KERNEL_TSK_SET_ERCD(tcb, x)                   do { (tcb)->ercd = (x); } while(0)
+#define _KERNEL_TSK_GET_ERCD(tcb)                              ((tcb)->ercd)
 #else
-#define _KERNEL_TSK_SET_ERCD(tcb, x)           do { } while(0)
-#define _KERNEL_TSK_GET_ERCD(tcb)                      (E_OK)
+#define _KERNEL_TSK_SET_ERCD(tcb, x)                   do { } while(0)
+#define _KERNEL_TSK_GET_ERCD(tcb)                              (E_OK)
 #endif
 
 /* data */
 #if _KERNEL_TCB_DATA
-#define _KERNEL_TSK_SET_DATA(tcb, x)           do { (tcb)->data = (x); } while(0)
-#define _KERNEL_TSK_GET_DATA(tcb)                      ((tcb)->data)
+#define _KERNEL_TSK_SET_DATA(tcb, x)                   do { (tcb)->data = (x); } while(0)
+#define _KERNEL_TSK_GET_DATA(tcb)                              ((tcb)->data)
+#else
+#define _KERNEL_TSK_SET_DATA(tcb, x)                   do { } while(0)
+#define _KERNEL_TSK_GET_DATA(tcb)                              (0)
+#endif
+
+/* texstat */
+#if _KERNEL_TCB_TEXSTAT
+#define _KERNEL_TSK_SET_TEXSTAT(tcb, x)                        do { (tcb)->texstat = (_KERNEL_TCB_T_TEXSTAT)(x); } while (0)
+#define _KERNEL_TSK_GET_TEXSTAT(tcb)                           ((_KERNEL_TSK_T_TEXSTAT)(tcb)->texstat)
+#else
+#define _KERNEL_TSK_SET_TEXSTAT(tcb, x)                        do { } while (0)
+#define _KERNEL_TSK_GET_TEXSTAT(tcb)                   (_KERNEL_TXS_DIS)
+#endif
+
+/* rasptn */
+#if _KERNEL_TCB_RASPTN
+#define _KERNEL_TSK_SET_RASPTN(tcb, x)                 do { (tcb)->rasptn = (_KERNEL_TCB_T_TEXPTN)(x); } while (0)
+#define _KERNEL_TSK_GET_RASPTN(tcb)                            ((_KERNEL_TSK_T_TEXPTN)(tcb)->rasptn)
 #else
-#define _KERNEL_TSK_SET_DATA(tcb, x)           do { } while(0)
-#define _KERNEL_TSK_GET_DATA(tcb)                      (0)
+#define _KERNEL_TSK_SET_RASPTN(texcb, x)               do { } while (0)
+#define _KERNEL_TSK_GET_RASPTN(texcb)                  (0)
 #endif
 
 
 /* tskid */
 #if _KERNEL_TCB_TSKID
-#define _KERNEL_TSK_SET_TSKID(tcb_ro, x)       do { (tcb_ro)->tskid = (x); } while(0)
-#define _KERNEL_TSK_GET_TSKID(tcb_ro)          ((tcb_ro)->tskid)
+#define _KERNEL_TSK_SET_TSKID(tcb_ro, x)               do { (tcb_ro)->tskid = (x); } while(0)
+#define _KERNEL_TSK_GET_TSKID(tcb_ro)                  ((tcb_ro)->tskid)
 #else
-#define _KERNEL_TSK_SET_TSKID(tcb_ro, x)       do { } while(0)
-#define _KERNEL_TSK_GET_TSKID(tcb_ro)          (0)
+#define _KERNEL_TSK_SET_TSKID(tcb_ro, x)               do { } while(0)
+#define _KERNEL_TSK_GET_TSKID(tcb_ro)                  (0)
 #endif
 
 /* tskatr */
 #if _KERNEL_TCB_TSKATR
-#define _KERNEL_TSK_SET_TSKATR(tcb_ro, x)      do { (tcb_ro)->tskatr = (x); } while(0)
-#define _KERNEL_TSK_GET_TSKATR(tcb_ro)         ((tcb_ro)->tskatr)
+#define _KERNEL_TSK_SET_TSKATR(tcb_ro, x)              do { (tcb_ro)->tskatr = (x); } while(0)
+#define _KERNEL_TSK_GET_TSKATR(tcb_ro)                 ((tcb_ro)->tskatr)
 #else  /* %jp{tskatr未使用時はTA_HLNGに固定する} */
-#define _KERNEL_TSK_SET_TSKATR(tcb_ro, x)      do { } while(0)
-#define _KERNEL_TSK_GET_TSKATR(tcb_ro)         (TA_HLNG)
+#define _KERNEL_TSK_SET_TSKATR(tcb_ro, x)              do { } while(0)
+#define _KERNEL_TSK_GET_TSKATR(tcb_ro)                 (TA_HLNG)
 #endif
 
 /* exinf */
 #if _KERNEL_TCB_EXINF
-#define _KERNEL_TSK_SET_EXINF(tcb_ro, x)       do { (tcb_ro)->exinf = (x); } while(0)
-#define _KERNEL_TSK_GET_EXINF(tcb_ro)          ((tcb_ro)->exinf)
+#define _KERNEL_TSK_SET_EXINF(tcb_ro, x)               do { (tcb_ro)->exinf = (x); } while(0)
+#define _KERNEL_TSK_GET_EXINF(tcb_ro)                  ((tcb_ro)->exinf)
 #else
-#define _KERNEL_TSK_SET_EXINF(tcb_ro, x)       do { } while(0)
-#define _KERNEL_TSK_GET_EXINF(tcb_ro)          (0)
+#define _KERNEL_TSK_SET_EXINF(tcb_ro, x)               do { } while(0)
+#define _KERNEL_TSK_GET_EXINF(tcb_ro)                  (0)
 #endif
 
 /* task */
 #if _KERNEL_TCB_TASK
-#define _KERNEL_TSK_SET_TASK(tcb_ro, x)                do { (tcb_ro)->task = (_KERNEL_TCB_T_TASK)(x); } while(0)
-#define _KERNEL_TSK_GET_TASK(tcb_ro)           ((_KERNEL_TSK_T_TASK)(tcb_ro)->task)
+#define _KERNEL_TSK_SET_TASK(tcb_ro, x)                        do { (tcb_ro)->task = (_KERNEL_TCB_T_TASK)(x); } while(0)
+#define _KERNEL_TSK_GET_TASK(tcb_ro)                   ((_KERNEL_TSK_T_TASK)(tcb_ro)->task)
 #else
-#define _KERNEL_TSK_SET_TASK(tcb_ro, x)                do { } while(0)
-#define _KERNEL_TSK_GET_TASK(tcb_ro)           (0)
+#define _KERNEL_TSK_SET_TASK(tcb_ro, x)                        do { } while(0)
+#define _KERNEL_TSK_GET_TASK(tcb_ro)                   (0)
 #endif
 
 /* tskipri */
 #if _KERNEL_TCB_ITSKPRI
-#define _KERNEL_TSK_SET_ITSKPRI(tcb_ro, x)     do { (tcb_ro)->itskpri = (x); } while(0)
-#define _KERNEL_TSK_GET_ITSKPRI(tcb_ro)                ((tcb_ro)->itskpri)
+#define _KERNEL_TSK_SET_ITSKPRI(tcb_ro, x)             do { (tcb_ro)->itskpri = (x); } while(0)
+#define _KERNEL_TSK_GET_ITSKPRI(tcb_ro)                        ((tcb_ro)->itskpri)
 #else  /* %jp{tskatr未使用時はTA_HLNGに固定する} */
-#define _KERNEL_TSK_SET_ITSKPRI(tcb_ro, x)     do { } while(0)
-#define _KERNEL_TSK_GET_ITSKPRI(tcb_ro)                (1)
+#define _KERNEL_TSK_SET_ITSKPRI(tcb_ro, x)             do { } while(0)
+#define _KERNEL_TSK_GET_ITSKPRI(tcb_ro)                        (1)
 #endif
 
 /* stksz */
 #if _KERNEL_TCB_STKSZ
-#define _KERNEL_TSK_SET_STKSZ(tcb_ro, x)       do { (tcb_ro)->stksz = (x); } while(0)
-#define _KERNEL_TSK_GET_STKSZ(tcb_ro)          ((tcb_ro)->stksz)
+#define _KERNEL_TSK_SET_STKSZ(tcb_ro, x)               do { (tcb_ro)->stksz = (x); } while(0)
+#define _KERNEL_TSK_GET_STKSZ(tcb_ro)                  ((tcb_ro)->stksz)
 #else
-#define _KERNEL_TSK_SET_STKSZ(tcb_ro, x)       do { } while(0)
-#define _KERNEL_TSK_GET_STKSZ(tcb_ro)          (0)
+#define _KERNEL_TSK_SET_STKSZ(tcb_ro, x)               do { } while(0)
+#define _KERNEL_TSK_GET_STKSZ(tcb_ro)                  (0)
 #endif
 
 /* stk */
 #if _KERNEL_TCB_STK
-#define _KERNEL_TSK_SET_STK(tcb_ro, x)         do { (tcb_ro)->stk = (x); } while(0)
-#define _KERNEL_TSK_GET_STK(tcb_ro)                    ((tcb_ro)->stk)
+#define _KERNEL_TSK_SET_STK(tcb_ro, x)                 do { (tcb_ro)->stk = (x); } while(0)
+#define _KERNEL_TSK_GET_STK(tcb_ro)                            ((tcb_ro)->stk)
 #else
-#define _KERNEL_TSK_SET_STK(tcb_ro, x)         do { } while(0)
-#define _KERNEL_TSK_GET_STK(tcb_ro)                    (0)
+#define _KERNEL_TSK_SET_STK(tcb_ro, x)                 do { } while(0)
+#define _KERNEL_TSK_GET_STK(tcb_ro)                            (0)
 #endif
 
 /* isp */
 #if _KERNEL_TCB_ISP
-#define _KERNEL_TSK_SET_ISP(tcb_ro, x)         do { (tcb_ro)->isp = (x); } while(0)
-#define _KERNEL_TSK_GET_ISP(tcb_ro)                    ((tcb_ro)->isp)
+#define _KERNEL_TSK_SET_ISP(tcb_ro, x)                 do { (tcb_ro)->isp = (x); } while(0)
+#define _KERNEL_TSK_GET_ISP(tcb_ro)                            ((tcb_ro)->isp)
+#else
+#define _KERNEL_TSK_SET_ISP(tcb_ro, x)                 do { } while(0)
+#define _KERNEL_TSK_GET_ISP(tcb_ro)                            ((VP)((UB *)_KERNEL_TSK_GET_STK(tcb_ro) + _KERNEL_TSK_GET_STKSZ(tcb_ro)))
+#endif
+
+/* texatr */
+#if _KERNEL_TCB_TEXATR
+#define _KERNEL_TSK_SET_TEXATR(tcb_ro, x)              do { (tcb_ro)->texatr = (_KERNEL_TCB_T_TEXATR)(x); } while (0)
+#define _KERNEL_TSK_GET_TEXATR(tcb_ro)                 ((_KERNEL_TSK_T_TEXATR)(tcb_ro)->texatr)
 #else
-#define _KERNEL_TSK_SET_ISP(tcb_ro, x)         do { } while(0)
-#define _KERNEL_TSK_GET_ISP(tcb_ro)                    ((VP)((UB *)_KERNEL_TSK_GET_STK(tcb_ro) + _KERNEL_TSK_GET_STKSZ(tcb_ro)))
+#define _KERNEL_TSK_SET_TEXATR(texcb_ro, x)            do { } while (0)
+#define _KERNEL_TSK_GET_TEXATR(texcb_ro)               (0)
 #endif
 
+/* texrtn */
+#if _KERNEL_TCB_TEXRTN
+#define _KERNEL_TSK_SET_TEXRTN(tcb_ro, x)              do { (tcb_ro)->texrtn = (_KERNEL_TCB_T_TEXRTN)(x); } while (0)
+#define _KERNEL_TSK_GET_TEXRTN(tcb_ro)                 ((_KERNEL_TSK_T_TEXRTN)(tcb_ro)->texrtn)
+#else
+#define _KERNEL_TSK_SET_TEXRTN(tcb_ro, x)              do { } while (0)
+#define _KERNEL_TSK_GET_TEXRTN(tcb_ro)                 (0)
+#endif
+
+
 
 /* ------------------------------------------ */
 /*   Macro functions                          */
index 1948898..4dc64a6 100755 (executable)
 /* ref_tsk */
 #define _KERNEL_SPT_REF_TSK_E_ID               _KERNEL_SPT_E_ID        (_KERNEL_CFG_REF_TSK_E_ID)
 #define _KERNEL_SPT_REF_TSK_E_NOEXS            _KERNEL_SPT_E_NOEXS     (_KERNEL_CFG_REF_TSK_E_NOEXS)
+#define _KERNEL_SPT_REF_TSK_E_NOSPT            _KERNEL_SPT_E_NOSPT     (_KERNEL_CFG_REF_TSK_E_NOSPT)
 
 /* ref_tst */
+#define _KERNEL_SPT_REF_TST_E_ID               _KERNEL_SPT_E_ID        (_KERNEL_CFG_REF_TST_E_ID)
+#define _KERNEL_SPT_REF_TST_E_NOEXS            _KERNEL_SPT_E_NOEXS     (_KERNEL_CFG_REF_TST_E_NOEXS)
+#define _KERNEL_SPT_REF_TST_E_NOSPT            _KERNEL_SPT_E_NOSPT     (_KERNEL_CFG_REF_TST_E_NOSPT)
+
 
 /* slp_tsk */
 /* tslp_tsk */
 #define _KERNEL_SPT_DLY_TSK_E_CTX              _KERNEL_SPT_E_CTX       (_KERNEL_CFG_DLY_TSK_E_CTX)
 
 
-
 /* def_tex */
 #define _KERNEL_SPT_DEF_TEX_E_ID               _KERNEL_SPT_E_ID        (_KERNEL_CFG_DEF_TEX_E_ID)
 #define _KERNEL_SPT_DEF_TEX_E_NOEXS            _KERNEL_SPT_E_NOEXS     (_KERNEL_CFG_DEF_TEX_E_NOEXS)
 #define _KERNEL_SPT_ACRE_DTQ_E_NOSPT   _KERNEL_SPT_E_NOSPT     (_KERNEL_CFG_ACRE_DTQ_E_NOSPT)
 
 /* del_dtq */
+#define _KERNEL_SPT_DEL_DTQ_E_ID               _KERNEL_SPT_E_ID        (_KERNEL_CFG_DEL_DTQ_E_ID)
+#define _KERNEL_SPT_DEL_DTQ_E_NOEXS            _KERNEL_SPT_E_NOEXS     (_KERNEL_CFG_DEL_DTQ_E_NOEXS)   
+#define _KERNEL_SPT_DEL_DTQ_E_NOSPT            _KERNEL_SPT_E_NOSPT     (_KERNEL_CFG_DEL_DTQ_E_NOSPT)
+
+
 /* snd_dtq */
 #define _KERNEL_SPT_SND_DTQ_E_CTX              _KERNEL_SPT_E_CTX       (_KERNEL_CFG_SND_DTQ_E_CTX)
 #define _KERNEL_SPT_SND_DTQ_E_ID               _KERNEL_SPT_E_ID        (_KERNEL_CFG_SND_DTQ_E_ID)
index 9dcb146..971bf1f 100755 (executable)
 #define _KERNEL_SPT_TSK                                FALSE
 #endif
 
+/* %jp{タスク例外処理サポートの判定} */
+#if ((_KERNEL_CFG_DEF_TEX)|| (_KERNEL_CFG_SDEF_TEX)) && (_KERNEL_CFG_TMAX_TSKID) > 0
+#define _KERNEL_SPT_TEX                                TRUE
+#else
 #define _KERNEL_SPT_TEX                                FALSE
+#endif
+
+
 #define _KERNEL_SPT_SEM                                TRUE
 #define _KERNEL_SPT_FLG                                TRUE
 #define _KERNEL_SPT_DTQ                                FALSE
 #define _KERNEL_SPT_MBX                                FALSE
 
+
 /* %jp{ミューテックスオブジェクトサポートの判定} */
 #if ((_KERNEL_CFG_CRE_MTX)|| (_KERNEL_CFG_ACRE_MTX) || (_KERNEL_CFG_SCRE_MTX)) && (_KERNEL_CFG_TMAX_MTXID) > 0
 #define _KERNEL_SPT_MTX                                TRUE
 #define _KERNEL_TSK_TMAX_RELTIM                _KERNEL_TMAX_RELTIM
 
 
+
+/* ---------------------------------- */
+/*      Task exception state          */
+/* ---------------------------------- */
+
+#define  _KERNEL_TXS_ENA                       1
+#define  _KERNEL_TXS_DIS                       0
+
+
 /* ---------------------------------- */
 /*            TCB member              */
 /* ---------------------------------- */
 #define _KERNEL_TCB_ISP                                _KERNEL_PROCATR_CTX_ISP                         /**< %jp{TCBにispを含めるか} */
 #endif
 
-
-
-/* ------------------------------------------------------------------ */
-/*  Task Exception Handling Routine                                 */
-/* ------------------------------------------------------------------ */
-
-/* Definitions */
-#define _KERNEL_TEXCB_ALG_BLKARRAY     1
-#define _KERNEL_TEXCB_ALG_PTRARRAY     2
-
-/* Control block */
-#define _KERNEL_TEXCB_ALGORITHM                _KERNEL_CFG_TEXCB_ALGORITHM
-#define _KERNEL_TEXCB_BITFIELD         _KERNEL_CFG_TEXCB_BITFIELD
-
-/* %jp{ブロック配列で動的生成がある場合はRO分離は不可} */
-#if (_KERNEL_TEXCB_ALGORITHM == _KERNEL_TEXCB_ALG_BLKARRAY) && (_KERNEL_SPT_CRE_SEM || _KERNEL_SPT_ACRE_SEM)
-#define _KERNEL_TEXCB_SPLIT_RO         FALSE
-#else
-#define _KERNEL_TEXCB_SPLIT_RO         _KERNEL_CFG_TEXCB_SPLIT_RO
-#endif
-
-/* Member variables */
-#define _KERNEL_TEXCB_STATE                    TRUE                                                            /**< %jp{タスク例外処理禁止状態} */
-#define _KERNEL_TEXCB_RASPTN           TRUE                                                            /**< %jp{タスク例外処理要因} */
-#define _KERNEL_TEXCB_TEXATR           FALSE                                                           /**< %jp{タスク例外処理ルーチン属性} */
-#define _KERNEL_TEXCB_TEXRTN           TRUE                                                            /**< %jp{タスク例外処理ルーチンの起動番地} */
+/* Task Exception Handling Routine */
+#define _KERNEL_TCB_TEXSTAT                    _KERNEL_SPT_TEX                                         /**< %jp{タスク例外処理状態} */
+#define _KERNEL_TCB_RASPTN                     _KERNEL_SPT_TEX                                         /**< %jp{タスク例外処理要因} */
+#define _KERNEL_TCB_TEXATR                     FALSE                                                           /**< %jp{タスク例外処理ルーチン属性} */
+#define _KERNEL_TCB_TEXRTN                     _KERNEL_SPT_TEX                                         /**< %jp{タスク例外処理ルーチンの起動番地} */
 
 
 
 /*  Cyclic Handlers                                                   */
 /* ------------------------------------------------------------------ */
 
+/* Definitions */
+#define _KERNEL_CYCCB_ALG_BLKARRAY     1
+#define _KERNEL_CYCCB_ALG_PTRARRAY     2
+
+/* Control block */
+#define _KERNEL_CYCCB_ALGORITHM                _KERNEL_CFG_CYCCB_ALGORITHM
+#define _KERNEL_CYCCB_BITFIELD         _KERNEL_CFG_CYCCB_BITFIELD
+
+/* %jp{ブロック配列で動的生成がある場合はRO分離は不可} */
+#if (_KERNEL_CYCCB_ALGORITHM == _KERNEL_CYCCB_ALG_BLKARRAY) && (_KERNEL_SPT_CRE_CYC || _KERNEL_SPT_ACRE_CYC)
+#define _KERNEL_CYCCB_SPLIT_RO         FALSE
+#else
+#define _KERNEL_CYCCB_SPLIT_RO         _KERNEL_CFG_CYCCB_SPLIT_RO
+#endif
+
+/* Attributes */
+#define _KERNEL_SPT_CYC_TA_STA         _KERNEL_CFG_CYC_TA_STA
+#define _KERNEL_SPT_CYC_TA_PHS         _KERNEL_CFG_CYC_TA_PHS
+
+/* Member variables */
 #define _KERNEL_CYCCB_TIMOBJ           TRUE
 #define _KERNEL_CYCCB_CYCATR           TRUE
 #define _KERNEL_CYCCB_EXINF                    TRUE
 #define _KERNEL_CYCCB_CYCPHS           TRUE
 
 
+
 /* ------------------------------------------------------------------ */
 /*  inh                                                               */
 /* ------------------------------------------------------------------ */
index 2198fa9..d782e3a 100755 (executable)
@@ -76,8 +76,8 @@ multiple_int:
                                
                ; ---- 割り込みカウンタ復帰
                                movbu   (__kernel_ictxcb+4), d0
-                               add             1, d0
-                               movbu   d0, (a0)
+                               add             -1, d0
+                               movbu   d0, (__kernel_ictxcb+4)
 
                                bra             return_int                                              ; 復帰処理
 
index 835f01e..a4c9b16 100755 (executable)
@@ -46,6 +46,7 @@ __kernel_cre_ctx:
 ctx_entry:
                                mov             d2, d0                  /* par1を設定 */
                                mov             d3, d1                  /* par2を設定 */
+                               add             -12, sp
                                jmp             (a3)                    /* entry を実行 */
                                .size   ctx_entry, .-ctx_entry
 
index 85f7093..ddc4c05 100755 (executable)
 __kernel_int_hdr:
                        /* ---- レジスタ退避 ---- */
                                movm    [other], (sp)                                                   /* レジスタ退避 */
+                               add             -8, sp
                                
                        /* ---- 多重割込み判定 ---- */
                                mov             __kernel_ictxcb, a0
                                movbu   (4, a0), d0
-                               add             -4, sp
                                add             1, d0
-                               movbu   d0, (4, a0)
+                               movbu   d0, (12, a0)
                                cmp             1, d0
                                bne             multiple_int
                                
@@ -38,8 +38,8 @@ __kernel_int_hdr:
                                mov             (0, a0), a1
                                mov             sp, a0                                                                  /* タスクのSPを保存 */
                                mov             a1, sp
-                               add             -8, sp
-                               mov             a0, (4, sp)
+                               add             -16, sp
+                               mov             a0, (12, sp)
                                
                        /* ---- 割り込み処理 ---- */
                                call    __kernel_sta_inh, [], 0                                 /* 割り込み開始 */
@@ -49,13 +49,13 @@ __kernel_int_hdr:
                                call    __kernel_exe_inh, [], 0
                                
                        /* ---- 割り込み処理の終了設定 ---- */
-                               mov             (4, sp), a0
+                               mov             (12, sp), a0
                                clr             d0
-                               mov             a0, sp                                                                  /* スタック復帰 */
                                movbu   d0, (__kernel_ictxcb+4)                                 /* ネストカウンタクリア */
+                               mov             a0, sp                                                                  /* スタック復帰 */
                                
                        /* ---- 割込みマスクレベルの復帰 ---- */
-                               mov             (36, sp), d0
+                               mov             (40, sp), d0
                                and             0x0700, d0
                                mov             d0, psw
                                
@@ -64,7 +64,7 @@ __kernel_int_hdr:
                                
                        /* ---- 復帰処理 ---- */
 return_int:
-                               add             4, sp
+                               add             8, sp
                                movm    (sp), [other]                                                   /* レジスタ退避 */
                                rti
 
@@ -76,9 +76,9 @@ multiple_int:
                                
                        /* ---- 割り込みカウンタ復帰 ---- */
                                movbu   (__kernel_ictxcb+4), d0
-                               add             1, d0
-                               movbu   d0, (a0)
-
+                               add             -1, d0
+                               movbu   d0, (__kernel_ictxcb+4)
+                               
                                bra             return_int                                                              /* 復帰処理 */
 
 
index 32fc396..884ac5e 100755 (executable)
@@ -87,6 +87,14 @@ void _kernel_dsp_tsk(void)
        
        /* %jp{ディスパッチ実行} */
        _KERNEL_SWI_CTX(ctxcb_run, ctxcb_top);
+       
+       /* %jp{タスク例外処理} */
+#if _KERNEL_SPT_TEX
+       if ( tskhdl_run != _KERNEL_TSKHDL_NULL )
+       {
+               _kernel_exe_tex(tskhdl_run);
+       }
+#endif
 }
 
 
index 694126b..5a53645 100755 (executable)
@@ -112,7 +112,8 @@ ER _kernel_cre_cyc(ID cycid, const T_CCYC *pk_ccyc)
                {
                        _KERNEL_TIMOBJ_SET_LEFTTIM(pk_timobj, pk_ccyc->cyctim);
                }
-               _KERNEL_ADD_TMQ(_KERNEL_CYC_GET_TIMOBJ(cyccb));
+               _KERNEL_SYS_ADD_TMQ(pk_timobj);
+
        }
 #endif
 
diff --git a/kernel/source/object/dtq/del_dtq.c b/kernel/source/object/dtq/del_dtq.c
new file mode 100755 (executable)
index 0000000..b46add9
--- /dev/null
@@ -0,0 +1,112 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  del_que.c
+ * @brief %jp{データキューの削除}%en{Delete Data queue}
+ *
+ * Copyright (C) 1998-2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/dtqobj.h"
+
+
+
+#if _KERNEL_SPT_DEL_DTQ
+
+
+/** %jp{セマフォの削除}%en{Delete Data queue}
+ * @param  dtqid    %jp{削除対象のセマフォのID番号}%en{ID number of the data queue to be deleted}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(dtqidが不正あるいは使用できない)}%en{Invalid ID number(dtqid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified data queue is not registerd)}
+ */
+ER del_dtq(ID dtqid)
+{
+       _KERNEL_T_DTQCB         *dtqcb;
+       _KERNEL_T_QUE           *que;
+       _KERNEL_T_TSKHDL        tskhdl;
+       _KERNEL_T_TCB           *tcb;
+       
+       /* %jp{IDチェック}%en{check ID} */
+#if _KERNEL_SPT_DEL_DTQ_E_ID
+       if ( !_KERNEL_DTQ_CHECK_DTQID(dtqid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }       
+#endif
+       
+       _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{存在チェック}%en{check object} */
+#if _KERNEL_SPT_DEL_DTQ_E_NOEXS
+       if ( !_KERNEL_DTQ_CHECK_EXS(dtqid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOEXS;
+       }
+#endif
+       
+       /* %jp{セマフォコントロールブロック取得} */
+       dtqcb = _KERNEL_DTQ_ID2DTQCB(dtqid);
+       
+       /* %jp{送信待ち行列のタスクを全て起床} */
+       que = _KERNEL_DTQ_GET_SQUE(dtqcb);
+       while ( (tskhdl = _KERNEL_RMH_QUE(que)) != _KERNEL_TSKHDL_NULL )
+       {
+               /* %jp{待ちタスクがあれば待ち解除} */
+               tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);           /* %jp{TCB取得} */
+               _KERNEL_TSK_SET_ERCD(tcb, E_DLT);                       /* %jp{エラーコード設定} */
+               _KERNEL_DTQ_RMV_STOQ(tskhdl);                           /* %jp{タイムアウトキューから外す} */
+               _KERNEL_DSP_WUP_TSK(tskhdl);                            /* %jp{タスクの待ち解除} */     
+       }
+       
+       /* %jp{受信待ち行列のタスクを全て起床} */
+       que = _KERNEL_DTQ_GET_RQUE(dtqcb);
+       while ( (tskhdl = _KERNEL_RMH_QUE(que)) != _KERNEL_TSKHDL_NULL )
+       {
+               /* %jp{待ちタスクがあれば待ち解除} */
+               tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);           /* %jp{TCB取得} */
+               _KERNEL_TSK_SET_ERCD(tcb, E_DLT);                       /* %jp{エラーコード設定} */
+               _KERNEL_DTQ_RMV_RTOQ(tskhdl);                           /* %jp{タイムアウトキューから外す} */
+               _KERNEL_DSP_WUP_TSK(tskhdl);                            /* %jp{タスクの待ち解除} */     
+       }
+       
+       /* %jp{オブジェクト削除} */
+#if _KERNEL_DTQCB_ALGORITHM == _KERNEL_DTQCB_ALG_PTRARRAY
+       _KERNEL_SYS_FRE_HEP(dtqcb);                                             /* %jp{メモリ開放} */
+       _KERNEL_DTQ_ID2DTQCB(dtqid) = NULL;
+#elif _KERNEL_DTQCB_ALGORITHM == _KERNEL_DTQCB_ALG_BLKARRAY
+       _KERNEL_DTQ_SET_MAXDTQ(dtqcb, 0);
+#endif
+
+       _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return E_OK;
+}
+
+
+#else  /* _KERNEL_SPT_DEL_DTQ */
+
+
+#if _KERNEL_SPT_DEL_DTQ_E_NOSPT
+
+/** %jp{セマフォの削除}%en{Delete Data queue}
+ * @param  dtqid    %jp{削除対象のセマフォのID番号}%en{ID number of the data queue to be deleted}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER del_dtq(ID dtqid)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_DEL_DTQ */
+
+
+
+/* end of file */
index b702817..7767b1c 100755 (executable)
@@ -63,14 +63,14 @@ ER vsta_knl(void)
                        (VP_INT)0
                );
        
-
+       
        _KERNEL_LEAVE_SVC();
-
+       
        /* %jp{初期化ハンドラ実行} */
        _kernel_cfg_sta();
-
+       
        _KERNEL_ENTER_SVC();
-
+       
        
        /* %jp{初期コンテキストの開始} */
        _kernel_sta_ctx(_KERNEL_SYS_GET_SYSCTXCB());
diff --git a/kernel/source/object/tex/def_tex.c b/kernel/source/object/tex/def_tex.c
deleted file mode 100755 (executable)
index 8398963..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/** 
- *  Hyper Operating System V4 Advance
- *
- * @file  def_tex.c
- * @brief %en{Activate Task}%jp{タスクの起動}
- *
- * Copyright (C) 1998-2008 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-
-#include "core/core.h"
-#include "object/texobj.h"
-
-
-/* %jp{タスク例外処理ルーチンの定義} */
-ER def_tex(ID tskid, T_DTEX *pk_dtex)
-{
-       _KERNEL_T_TEXCB         *texcb;
-       _KERNEL_T_TEXCB_RO      *texcb_ro;
-       
-       
-       if ( tskid == TSK_SELF )                /* %jp{自タスク指定時の変換} */
-       {
-               _KERNEL_T_TSKHDL        tskhdl;
-               
-#ifdef _KERNEL_SPT_DEF_TEX_E_ID
-               if ( _KERNEL_SYS_SNS_CTX() )
-               {
-                       return E_ID;                    /* %jp{不正ID番号} */
-               }
-#endif
-               
-               /* %jp{実行中タスクを取得} */
-               tskhdl = _KERNEL_SYS_GET_RUNTSK();
-               tskid  = _KERNEL_TSK_TSKHDL2ID(tskhdl);
-       }
-       else
-       {
-#if _KERNEL_SPT_DEF_TEX_E_ID
-               if ( !_KERNEL_TEX_CHECK_TSKID(tskid) )
-               {
-                       return E_ID;    /* %jp{不正ID番号} */
-               }
-#endif
-       }
-       
-       
-       _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
-       
-       /* %jp{タスク存在チェック} */
-#if _KERNEL_SPT_DEF_TEX_E_NOEXS
-       if ( !_KERNEL_TSK_CHECK_EXS(tskid) )
-       {
-               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
-               return E_NOEXS;
-       }
-#endif 
-       
-       if ( pk_dtex != NULL )  /* 登録 */
-       {
-               if ( !_KERNEL_TEX_CHECK_EXS(tskid) )    /* 未登録なら生成 */
-               {
-#if (_KERNEL_TEXCB_ALGORITHM == _KERNEL_TEXCB_ALG_BLKARRAY)
-                       {       /* %jp{ブロック配列の場合} */
-                               texcb    = _KERNEL_TEX_ID2TEXCB(tskid);
-                               texcb_ro = _KERNEL_TEX_GET_TEXCB_RO(tskid, texcb);
-                       }
-#elif (_KERNEL_TEXCB_ALGORITHM == _KERNEL_TEXCB_ALG_PTRARRAY) && _KERNEL_TEXCB_SPLIT_RO
-                       {       /* %jp{ポインタ管理で、ROM/RAM分離の場合} */
-                               VP              mem;
-                               SIZE    memsz;
-
-                               /* %jp{メモリサイズ決定} */
-                               memsz = _KERNEL_SYS_ALG_HEP(sizeof(_KERNEL_T_TEXCB))
-                                                       + _KERNEL_SYS_ALG_HEP(sizeof(_KERNEL_T_TEXCB_RO));
-
-                               /* %jp{メモリ確保} */
-                               mem = _KERNEL_SYS_ALC_HEP(memsz);
-                               
-                               /* %jp{メモリ不足チェック} */
-#if _KERNEL_SPT_DEF_TEX_E_NOMEM
-                               if ( mem == NULL )
-                               {
-                                       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
-                                       return E_NOMEM;
-                               }
-#endif
-                               
-                               /* %jp{メモリ割り当て} */
-                               texcb    = (_KERNEL_T_TEXCB *)mem;
-                               texcb_ro = (_KERNEL_T_TEXCB_RO *)((VB *)mem + _KERNEL_SYS_ALG_HEP(sizeof(_KERNEL_T_TEXCB)));
-                               _KERNEL_TEX_ID2TEXCB(tskid)           = tskcb;
-                               _KERNEL_TEX_ID2TEXCB(tskid)->tskcb_ro = (const _KERNEL_T_TEXCB_RO *)texcb_ro;
-                       }
-#elif (_KERNEL_TEXCB_ALGORITHM == _KERNEL_TEXCB_ALG_PTRARRAY) && !(_KERNEL_TEXCB_SPLIT_RO)
-                       {       /* %jp{ポインタ管理で、ROM/RAM統合の場合} */
-                               VP   mem;
-                               
-                               /* %jp{メモリ確保} */
-                               mem = _KERNEL_SYS_ALC_HEP(sizeof(_KERNEL_T_TEXCB));
-
-                               /* %jp{メモリ不足チェック} */
-#if _KERNEL_SPT_DEF_TEX_E_NOMEM
-                               if ( mem == NULL )
-                               {
-                                       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
-                                       return E_NOMEM;
-                               }
-#endif
-                               
-                               /* %jp{メモリ割り当て} */
-                               texcb    = (_KERNEL_T_TEXCB *)mem;
-                               texcb_ro = (_KERNEL_T_TEXCB_RO *)mem;
-                               _KERNEL_TEX_ID2TEXCB(tskid) = texcb;
-                       }
-#endif
-               }
-               else
-               {
-                       /* %jp{すでに登録があれば現状のものを取得} */
-                       texcb    = _KERNEL_TEX_ID2TEXCB(tskid);
-                       texcb_ro = _KERNEL_TEX_GET_TEXCB_RO(tskid, texcb);
-               }
-               
-               /* 登録 */
-               _KERNEL_TEX_SET_STATE(texcb, FALSE);
-               _KERNEL_TEX_SET_RASPTN(texcb, 0);
-               _KERNEL_TEX_SET_TEXATR(texcb_ro, pk_dtex->texatr);
-               _KERNEL_TEX_SET_TEXRTN(texcb_ro, pk_dtex->texrtn);
-       }
-       else            /* %jp{登録解除} */
-       {
-               if ( _KERNEL_TEX_CHECK_EXS(tskid) )     /* %jp{登録済みなら削除} */
-               {
-                       /* %jp{コントロールブロック取得} */
-                       texcb    = _KERNEL_TEX_ID2TEXCB(tskid);
-
-#if (_KERNEL_TEXCB_ALGORITHM == _KERNEL_TEXCB_ALG_BLKARRAY)
-                       {       /* %jp{ブロック配列の場合} */
-                               texcb_ro = (_KERNEL_T_TEXCB_RO *)_KERNEL_TEX_GET_TEXCB_RO(tskid, texcb);
-                               _KERNEL_TEX_SET_TEXRTN(texcb_ro,NULL);  /* %jp{未登録をマーク} */
-                       }
-#elif (_KERNEL_TEXCB_ALGORITHM == _KERNEL_TEXCB_ALG_PTRARRAY)
-                       {       /* %jp{ポインタ管理の場合} */
-                               _KERNEL_SYS_FRE_HEP(texcb);                             /* %jp{メモリ開放} */
-                               _KERNEL_TEX_ID2TEXCB(tskid) = NULL;             /* %jp{未登録をマーク} */
-                       }
-               }
-#endif
-       }
-       
-       
-       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
-
-       
-       return E_OK;
-}
-
-
-/* end of file */
diff --git a/kernel/source/object/tex/ras_tex.c b/kernel/source/object/tex/ras_tex.c
deleted file mode 100755 (executable)
index ba83192..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/** 
- *  Hyper Operating System V4 Advance
- *
- * @file  def_tex.c
- * @brief %en{Activate Task}%jp{タスクの起動}
- *
- * Copyright (C) 1998-2008 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-
-#include "core/core.h"
-#include "object/texobj.h"
-
-
-/* %jp{タスク例外処理の要求} */
-ER ras_tex(ID tskid, TEXPTN rasptn)
-{
-       _KERNEL_T_TSKHDL                tskhdl;
-       _KERNEL_T_TEXCB_PTR             texcb;
-       _KERNEL_T_TEXCB_RO_PTR  texcb_ro;
-       _KERNEL_T_TCB_PTR               tcb;
-       _KERNEL_T_TCB_RO_PTR    tcb_ro;
-       
-       
-       if ( tskid == TSK_SELF )                /* %jp{自タスク指定時の変換} */
-       {
-#ifdef _KERNEL_SPT_RAS_TEX_E_ID
-               if ( _KERNEL_SYS_SNS_CTX() )
-               {
-                       return E_ID;                    /* %jp{不正ID番号} */
-               }
-#endif
-               
-               /* %jp{実行中タスクを取得} */
-               tskhdl = _KERNEL_SYS_GET_RUNTSK();
-               tskid  = _KERNEL_TSK_TSKHDL2ID(tskhdl);
-       }
-       else
-       {
-#if _KERNEL_SPT_RAS_TEX_E_ID
-               if ( !_KERNEL_TEX_CHECK_TSKID(tskid) )
-               {
-                       return E_ID;    /* %jp{不正ID番号} */
-               }
-#endif
-       }
-       
-       
-       _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
-       
-       /* %jp{タスク存在チェック} */
-#if _KERNEL_SPT_RAS_TEX_E_NOEXS
-       if ( !_KERNEL_TSK_CHECK_EXS(tskid) )
-       {
-               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
-               return E_NOEXS;
-       }
-#endif 
-       
-
-#if _KERNEL_SPT_RAS_TEX_E_OBJ
-       if ( !_KERNEL_TEX_CHECK_EXS(tskid)              /* 未登録 */
-       {
-               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
-               return E_OBJ;
-       }
-#endif
-       
-       /* TCB取得 */
-       tcb = _KERNEL_TSK_ID2TCB(tskid);
-       
-
-#if _KERNEL_SPT_RAS_TEX_E_OBJ
-       if ( _KERNEL_TSK_GET_TSKSTAT(tcb) == _KERNEL_TTS_DMT )          /* %jp{オブジェクト状態判定} */
-       {
-               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
-               return E_OBJ;
-       }
-#endif 
-       
-       /* 例外要因設定 */
-       rasptn |= _KERNEL_TEX_GET_RASPTN(texcb);
-       _KERNEL_TEX_SET_RASPTN(texcb, rasptn);
-       
-       
-       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
-       
-       
-       return E_OK;
-}
-
-
-/* end of file */
diff --git a/kernel/source/object/tsk/def_tex.c b/kernel/source/object/tsk/def_tex.c
new file mode 100755 (executable)
index 0000000..8e2bd9a
--- /dev/null
@@ -0,0 +1,91 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  def_tex.c
+ * @brief %en{Activate Task}%jp{タスクの起動}
+ *
+ * Copyright (C) 1998-2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+/* %jp{タスク例外処理ルーチンの定義} */
+ER def_tex(ID tskid, T_DTEX *pk_dtex)
+{
+       _KERNEL_T_TCB           *tcb;
+       _KERNEL_T_TCB_RO        *tcb_ro;
+       
+       
+       if ( tskid == TSK_SELF )                /* %jp{自タスク指定時の変換} */
+       {
+               _KERNEL_T_TSKHDL        tskhdl;
+               
+#ifdef _KERNEL_SPT_DEF_TEX_E_ID
+               if ( _KERNEL_SYS_SNS_CTX() )
+               {
+                       return E_ID;                    /* %jp{不正ID番号} */
+               }
+#endif
+               
+               /* %jp{実行中タスクを取得} */
+               tskhdl = _KERNEL_SYS_GET_RUNTSK();
+
+               _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+
+               tcb    = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+               tcb_ro = _KERNEL_TSK_GET_TCB_RO(_KERNEL_TSK_TSKHDL2ID(tskhdl), tcb);
+
+       }
+       else
+       {
+               /* %jp{IDチェック} */
+#if _KERNEL_SPT_DEF_TEX_E_ID
+               if ( !_KERNEL_TSK_CHECK_TSKID(tskid) )
+               {
+                       return E_ID;                    /* %jp{不正ID番号} */
+               }
+#endif 
+
+               _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+               /* %jp{タスク存在チェック} */
+#if _KERNEL_SPT_DEF_TEX_E_NOEXS
+               if ( !_KERNEL_TSK_CHECK_EXS(tskid) )
+               {
+                       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+                       return E_NOEXS;
+               }
+#endif 
+       
+               /* コントロールブロック取得 */
+               tcb    = _KERNEL_TSK_ID2TCB(tskid);
+               tcb_ro = _KERNEL_TSK_GET_TCB_RO(tskid, tcb);
+       }
+
+       
+       if ( pk_dtex != NULL )
+       {
+               /* 登録 */
+               _KERNEL_TSK_SET_RASPTN(tcb, 0);
+               _KERNEL_TSK_SET_TEXATR(tcb_ro, pk_dtex->texatr);
+               _KERNEL_TSK_SET_TEXRTN(tcb_ro, pk_dtex->texrtn);
+       }
+       else
+       {
+               /* %jp{登録解除} */
+               _KERNEL_TSK_SET_TEXSTAT(tcb, _KERNEL_TXS_DIS);
+               _KERNEL_TSK_SET_TEXRTN(tcb_ro, NULL);
+       }
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+
+       
+       return E_OK;
+}
+
+
+/* end of file */
index 46b4c51..e9dac83 100755 (executable)
@@ -125,8 +125,12 @@ ER _kernel_cre_tsk(ID tskid, const T_CTSK *pk_ctsk)
        _KERNEL_TSK_SET_STK(tcb_ro, stk);                                                       /* %jp{スタック領域の先頭番地} */
        _KERNEL_TSK_SET_ISP(tcb_ro, (VB *)stk + pk_ctsk->stksz);        /* %jp{スタックポインタ初期値の先頭番地} */
        _KERNEL_TSK_SET_TSKID(tcb_ro, tskid);
+       _KERNEL_TSK_SET_TEXATR(tcb_ro, TA_HLNG);
+       _KERNEL_TSK_SET_TEXRTN(tcb_ro, NULL);
        _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_DMT);
        _KERNEL_TSK_SET_MTXHDL(tcb, _KERNEL_MTXHDL_NULL);
+       _KERNEL_TSK_SET_TEXSTAT(tcb, _KERNEL_TXS_DIS);
+       _KERNEL_TSK_SET_RASPTN(tcb, 0);
 
        /* %jp{TA_ACT属性があればタスク実行} */
 #if _KERNEL_SPT_TSK_TA_ACT
diff --git a/kernel/source/object/tsk/kexe_tex.c b/kernel/source/object/tsk/kexe_tex.c
new file mode 100755 (executable)
index 0000000..8d2614f
--- /dev/null
@@ -0,0 +1,63 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  def_tex.c
+ * @brief %en{Activate Task}%jp{タスクの起動}
+ *
+ * Copyright (C) 1998-2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+/* %jp{タスク例外処理の実行} */
+void _kernel_exe_tex(_KERNEL_T_TSKHDL tskhdl)
+{
+       _KERNEL_T_TCB_PTR               tcb;
+       _KERNEL_T_TCB_RO_PTR    tcb_ro;
+       _KERNEL_TSK_T_TEXPTN    rasptn;
+       _KERNEL_TSK_T_TEXRTN    texrtn;
+       _KERNEL_TSK_T_EXINF             exinf;
+       
+       
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+       
+       /* %jp{タスク例外処理禁止なら何もしない} */
+       if ( _KERNEL_TSK_GET_TEXSTAT(tcb) != _KERNEL_TXS_ENA )
+       {
+               return;
+       }
+       
+       /* %jp{タスク例外要因がなければ何もしない} */
+       if ( (rasptn = _KERNEL_TSK_GET_RASPTN(tcb)) == 0 )
+       {
+               return;
+       }
+       
+       tcb_ro = _KERNEL_TSK_GET_TCB_RO(_KERNEL_TSK_TSKHDL2ID(tskhdl_run), tcb);
+       exinf  = _KERNEL_TSK_GET_EXINF(tcb_ro);
+       
+       /* %jp{例外要因が無くなるまで実行} */
+       do
+       {
+               _KERNEL_TSK_SET_TEXSTAT(tcb, _KERNEL_TXS_DIS);
+               _KERNEL_TSK_SET_RASPTN(tcb, 0);
+                               
+               texrtn = _KERNEL_TSK_GET_TEXRTN(tcb_ro);
+                               
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+
+               /* %jp{タスク例外処理呼び出し} */
+               texrtn((TEXPTN)rasptn, (VP_INT)exinf);
+
+               _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+       } while ( (rasptn = _KERNEL_TSK_GET_RASPTN(tcb)) != 0 );
+
+       _KERNEL_TSK_SET_TEXSTAT(tcb, _KERNEL_TXS_ENA);
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/ras_tex.c b/kernel/source/object/tsk/ras_tex.c
new file mode 100755 (executable)
index 0000000..d70685f
--- /dev/null
@@ -0,0 +1,115 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  def_tex.c
+ * @brief %en{Activate Task}%jp{タスクの起動}
+ *
+ * Copyright (C) 1998-2008 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+/* %jp{タスク例外処理の要求} */
+ER ras_tex(ID tskid, TEXPTN rasptn)
+{
+       _KERNEL_T_TCB_PTR               tcb;
+       _KERNEL_T_TCB_RO_PTR    tcb_ro;
+       _KERNEL_T_TSKHDL                tskhdl;
+       
+       if ( tskid == TSK_SELF )                /* %jp{自タスク指定時の変換} */
+       {
+#ifdef _KERNEL_SPT_DEF_TEX_E_ID
+               if ( _KERNEL_SYS_SNS_CTX() )
+               {
+                       return E_ID;                    /* %jp{不正ID番号} */
+               }
+#endif
+               
+               /* %jp{実行中タスクを取得} */
+               tskhdl = _KERNEL_SYS_GET_RUNTSK();
+
+               _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+
+               tcb    = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+               tcb_ro = _KERNEL_TSK_GET_TCB_RO(_KERNEL_TSK_TSKHDL2ID(tskhdl), tcb);
+
+       }
+       else
+       {
+               /* %jp{IDチェック} */
+#if _KERNEL_SPT_DEF_TEX_E_ID
+               if ( !_KERNEL_TSK_CHECK_TSKID(tskid) )
+               {
+                       return E_ID;                    /* %jp{不正ID番号} */
+               }
+#endif 
+
+               _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+               /* %jp{タスク存在チェック} */
+#if _KERNEL_SPT_DEF_TEX_E_NOEXS
+               if ( !_KERNEL_TSK_CHECK_EXS(tskid) )
+               {
+                       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+                       return E_NOEXS;
+               }
+#endif 
+       
+               /* コントロールブロック取得 */
+               tcb    = _KERNEL_TSK_ID2TCB(tskid);
+               tcb_ro = _KERNEL_TSK_GET_TCB_RO(tskid, tcb);
+               tskhdl = _KERNEL_TSK_GET_TSKHDL(tskid, tcb);
+       }
+
+#if _KERNEL_SPT_RAS_TEX_E_OBJ
+       if ( _KERNEL_TSK_GET_TSKSTAT(tcb) == _KERNEL_TTS_DMT )          /* %jp{オブジェクト状態判定} */
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_OBJ;
+       }
+#endif
+       
+       
+       /* 例外要因設定 */
+       rasptn |= _KERNEL_TSK_GET_RASPTN(tcb);
+       _KERNEL_TSK_SET_RASPTN(tcb, rasptn);
+       if ( tskhdl == _KERNEL_SYS_GET_RUNTSK() )
+       {
+               if ( _KERNEL_TSK_GET_TEXSTAT(tcb) == _KERNEL_TXS_ENA )
+               {
+                       _KERNEL_TSK_T_TEXRTN    texrtn;
+                       _KERNEL_TSK_T_EXINF             exinf;
+
+                       do
+                       {
+                               _KERNEL_TSK_SET_TEXSTAT(tcb, _KERNEL_TXS_DIS);
+                               _KERNEL_TSK_SET_RASPTN(tcb, 0);
+                               
+                               tcb_ro = _KERNEL_TSK_GET_TCB_RO(_KERNEL_TSK_TSKHDL2ID(tskhdl_run), tcb);
+                               texrtn = _KERNEL_TSK_GET_TEXRTN(tcb_ro);
+                               exinf  = _KERNEL_TSK_GET_EXINF(tcb_ro);
+                               
+                               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+
+                               /* %jp{タスク例外処理呼び出し} */
+                               texrtn((TEXPTN)rasptn, (VP_INT)exinf);
+
+                               _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+                               
+                       } while ( (rasptn = _KERNEL_TSK_GET_RASPTN(tcb)) != 0 );
+               }
+       }
+       
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       
+       return E_OK;
+}
+
+
+/* end of file */