$(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)
$(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)
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
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
$(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)\
$(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)\
$(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)
$(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)
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)
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
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
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)
"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",
/* 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 */
#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
+/* ------------------------------------------------------------------ */
+/* 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 */
/* ---------------------------------------------- */
-/* ------------------------------------------------------------------ */
-/* 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{デフォルトのタイムティック周期の分母} */
-
/* ---------------------------------------------- */
#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 */
#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)
/* %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
#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)
+++ /dev/null
-/**
- * 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 */
+/* %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 */
/* -------------------------------------------------------------------- */
#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
{
_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
#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
#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;
#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
/* 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 */
/* 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)
#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 */
/* ------------------------------------------------------------------ */
; ---- 割り込みカウンタ復帰
movbu (__kernel_ictxcb+4), d0
- add 1, d0
- movbu d0, (a0)
+ add -1, d0
+ movbu d0, (__kernel_ictxcb+4)
bra return_int ; 復帰処理
ctx_entry:
mov d2, d0 /* par1を設定 */
mov d3, d1 /* par2を設定 */
+ add -12, sp
jmp (a3) /* entry を実行 */
.size ctx_entry, .-ctx_entry
__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
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 /* 割り込み開始 */
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
/* ---- 復帰処理 ---- */
return_int:
- add 4, sp
+ add 8, sp
movm (sp), [other] /* レジスタ退避 */
rti
/* ---- 割り込みカウンタ復帰 ---- */
movbu (__kernel_ictxcb+4), d0
- add 1, d0
- movbu d0, (a0)
-
+ add -1, d0
+ movbu d0, (__kernel_ictxcb+4)
+
bra return_int /* 復帰処理 */
/* %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
}
{
_KERNEL_TIMOBJ_SET_LEFTTIM(pk_timobj, pk_ccyc->cyctim);
}
- _KERNEL_ADD_TMQ(_KERNEL_CYC_GET_TIMOBJ(cyccb));
+ _KERNEL_SYS_ADD_TMQ(pk_timobj);
+
}
#endif
--- /dev/null
+/**
+ * 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 */
(VP_INT)0
);
-
+
_KERNEL_LEAVE_SVC();
-
+
/* %jp{初期化ハンドラ実行} */
_kernel_cfg_sta();
-
+
_KERNEL_ENTER_SVC();
-
+
/* %jp{初期コンテキストの開始} */
_kernel_sta_ctx(_KERNEL_SYS_GET_SYSCTXCB());
+++ /dev/null
-/**
- * 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 */
+++ /dev/null
-/**
- * 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 */
--- /dev/null
+/**
+ * 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 */
_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
--- /dev/null
+/**
+ * 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 */
--- /dev/null
+/**
+ * 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 */