OSDN Git Service

(none)
authorryuz <ryuz>
Sun, 24 Feb 2008 02:24:08 +0000 (02:24 +0000)
committerryuz <ryuz>
Sun, 24 Feb 2008 02:24:08 +0000 (02:24 +0000)
22 files changed:
aplfw/build/common/gmake/aplfwdep.inc
aplfw/build/common/gmake/aplfwsrc.inc
aplfw/build/common/nmake/aplfwdep.inc
aplfw/build/common/nmake/aplfwsrc.inc
aplfw/build/common/tmp_mkinc/mk_inc.pl
aplfw/build/mn103/mn103s/cc103/nmake.mak
aplfw/build/sh/sh2/gcc/gmake.mak
aplfw/sample/arm/ez_arm7/gcc/gmake.mak
aplfw/sample/sh/cq7144a/boot.c
aplfw/sample/sh/cq7144a/gcc/gmake.mak
aplfw/sample/sh/cq7144a/gcc/link_rom.x
aplfw/sample/sh/cq7144a/ostimer.c
aplfw/sample/sh/cq7144a/ostimer.h
aplfw/sample/sh/cq7144a/system.cfg
aplfw/system/sysapi/sysapi.h
aplfw/system/sysapi/sysapi_initialize.c
aplfw/system/sysapi/sysapi_local.h
aplfw/system/sysapi/systim_cputimetonanosecond.c
aplfw/system/sysapi/systim_cputimetosecond.c
aplfw/system/sysapi/systim_getcputime.c
kernel/source/core/dsp/dsp_ter.c
kernel/source/object/tsk/ter_tsk.c

index 148299b..1482820 100755 (executable)
@@ -42,6 +42,7 @@ $(OBJS_DIR)/sysprc_suspend.$(EXT_OBJ):        $(SYSAPI_DIR)/sysprc_suspend.c  $(COMMON_H
 $(OBJS_DIR)/sysprc_resume.$(EXT_OBJ):  $(SYSAPI_DIR)/sysprc_resume.c   $(COMMON_HEADERS) $(SYSTEM_HEADERS)
 $(OBJS_DIR)/sysprc_getparam.$(EXT_OBJ):        $(SYSAPI_DIR)/sysprc_getparam.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
 $(OBJS_DIR)/sysprc_getcurrenthandle.$(EXT_OBJ):        $(SYSAPI_DIR)/sysprc_getcurrenthandle.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)/systim_signal.$(EXT_OBJ):  $(SYSAPI_DIR)/systim_signal.c   $(COMMON_HEADERS) $(SYSTEM_HEADERS)
 $(OBJS_DIR)/systim_wait.$(EXT_OBJ):    $(SYSAPI_DIR)/systim_wait.c     $(COMMON_HEADERS) $(SYSTEM_HEADERS)
 $(OBJS_DIR)/systim_getsystemtime.$(EXT_OBJ):   $(SYSAPI_DIR)/systim_getsystemtime.c    $(COMMON_HEADERS) $(SYSTEM_HEADERS)
 $(OBJS_DIR)/systim_getcputime.$(EXT_OBJ):      $(SYSAPI_DIR)/systim_getcputime.c       $(COMMON_HEADERS) $(SYSTEM_HEADERS)
index fdb08a7..dece3df 100755 (executable)
@@ -124,6 +124,7 @@ CSRCS += $(SYSAPI_DIR)/sysprc_suspend.c
 CSRCS += $(SYSAPI_DIR)/sysprc_resume.c
 CSRCS += $(SYSAPI_DIR)/sysprc_getparam.c
 CSRCS += $(SYSAPI_DIR)/sysprc_getcurrenthandle.c
+CSRCS += $(SYSAPI_DIR)/systim_signal.c
 CSRCS += $(SYSAPI_DIR)/systim_wait.c
 CSRCS += $(SYSAPI_DIR)/systim_getsystemtime.c
 CSRCS += $(SYSAPI_DIR)/systim_getcputime.c
index eea2f02..e490fec 100755 (executable)
@@ -129,6 +129,9 @@ $(OBJS_DIR)\sysprc_getparam.c : $(SYSAPI_DIR)\sysprc_getparam.c
 $(OBJS_DIR)\sysprc_getcurrenthandle.c : $(SYSAPI_DIR)\sysprc_getcurrenthandle.c
        $(CMD_CP) $(SYSAPI_DIR)\sysprc_getcurrenthandle.c $(OBJS_DIR)\
 
+$(OBJS_DIR)\systim_signal.c : $(SYSAPI_DIR)\systim_signal.c
+       $(CMD_CP) $(SYSAPI_DIR)\systim_signal.c $(OBJS_DIR)\
+
 $(OBJS_DIR)\systim_wait.c : $(SYSAPI_DIR)\systim_wait.c
        $(CMD_CP) $(SYSAPI_DIR)\systim_wait.c $(OBJS_DIR)\
 
@@ -1572,6 +1575,7 @@ $(OBJS_DIR)\sysprc_suspend.$(EXT_OBJ):    $(OBJS_DIR)\sysprc_suspend.c    $(COMMON_HEA
 $(OBJS_DIR)\sysprc_resume.$(EXT_OBJ):  $(OBJS_DIR)\sysprc_resume.c     $(COMMON_HEADERS) $(SYSTEM_HEADERS)
 $(OBJS_DIR)\sysprc_getparam.$(EXT_OBJ):        $(OBJS_DIR)\sysprc_getparam.c   $(COMMON_HEADERS) $(SYSTEM_HEADERS)
 $(OBJS_DIR)\sysprc_getcurrenthandle.$(EXT_OBJ):        $(OBJS_DIR)\sysprc_getcurrenthandle.c   $(COMMON_HEADERS) $(SYSTEM_HEADERS)
+$(OBJS_DIR)\systim_signal.$(EXT_OBJ):  $(OBJS_DIR)\systim_signal.c     $(COMMON_HEADERS) $(SYSTEM_HEADERS)
 $(OBJS_DIR)\systim_wait.$(EXT_OBJ):    $(OBJS_DIR)\systim_wait.c       $(COMMON_HEADERS) $(SYSTEM_HEADERS)
 $(OBJS_DIR)\systim_getsystemtime.$(EXT_OBJ):   $(OBJS_DIR)\systim_getsystemtime.c      $(COMMON_HEADERS) $(SYSTEM_HEADERS)
 $(OBJS_DIR)\systim_getcputime.$(EXT_OBJ):      $(OBJS_DIR)\systim_getcputime.c $(COMMON_HEADERS) $(SYSTEM_HEADERS)
index 66c4356..c7517eb 100755 (executable)
@@ -248,6 +248,8 @@ CSRCS = $(CSRCS) $(SYSAPI_DIR)\sysprc_getparam.c
 OBJS  = $(OBJS)  $(OBJS_DIR)\sysprc_getparam.$(EXT_OBJ)
 CSRCS = $(CSRCS) $(SYSAPI_DIR)\sysprc_getcurrenthandle.c
 OBJS  = $(OBJS)  $(OBJS_DIR)\sysprc_getcurrenthandle.$(EXT_OBJ)
+CSRCS = $(CSRCS) $(SYSAPI_DIR)\systim_signal.c
+OBJS  = $(OBJS)  $(OBJS_DIR)\systim_signal.$(EXT_OBJ)
 CSRCS = $(CSRCS) $(SYSAPI_DIR)\systim_wait.c
 OBJS  = $(OBJS)  $(OBJS_DIR)\systim_wait.$(EXT_OBJ)
 CSRCS = $(CSRCS) $(SYSAPI_DIR)\systim_getsystemtime.c
index 7ada34b..80db4d9 100755 (executable)
@@ -64,6 +64,7 @@
                                "sysprc_resume.c",
                                "sysprc_getparam.c",
                                "sysprc_getcurrenthandle.c",
+                               "systim_signal.c",
                                "systim_wait.c",
                                "systim_getsystemtime.c",
                                "systim_getcputime.c",
index a18f9c9..f4d808f 100755 (executable)
@@ -19,13 +19,6 @@ HOSAPLFW_MKINK_DIR = $(HOSAPLFW_DIR)/build\common\nmake
 OBJS_DIR           = objs_$(TARGET)
 
 
-# %jp{ディレクトリ定義}
-TOP_DIR           = ..\..\..\..\..
-KERNEL_DIR        = $(TOP_DIR)\kernel
-KERNEL_MAKINC_DIR = $(KERNEL_DIR)\build\common\nmake
-OBJS_DIR          = objs_$(TARGET)
-
-
 # %jp{共通定義読込み}
 !include $(KERNEL_MAKINC_DIR)\common.inc
 
@@ -34,10 +27,10 @@ OBJS_DIR          = objs_$(TARGET)
 INC_DIRS = $(INC_DIRS) $(KERNEL_DIR)\include
 
 
-# %jp{オプションフラグの追加}
-CFLAGS  = $(CFLAGS)
-AFLAGS  = $(AFLAGS)
-LNFLAGS = $(LNFLAGS)
+# %jp{オプションフラグ}
+CFLAGS  = 
+AFLAGS  = 
+LNFLAGS = 
 
 
 # %jp{リンク制御対象制御}
index 410df0d..9d7ab95 100755 (executable)
@@ -13,10 +13,10 @@ TARGET ?= hosaplfw
 
 
 # %jp{ツール定義}
-GCC_SYS  ?= elf
-CMD_CC   ?= sh-$(GCC_SYS)-gcc
-CMD_ASM  ?= sh-$(GCC_SYS)-gcc
-CMD_LIBR ?= sh-$(GCC_SYS)-ar
+GCC_ARCH ?= sh-elf-
+CMD_CC   ?= $(GCC_ARCH)gcc
+CMD_ASM  ?= $(GCC_ARCH)gcc
+CMD_LIBR ?= $(GCC_ARCH)ar
 
 
 # %jp{ディレクトリ定義}
index 4ab80a9..ae4f592 100755 (executable)
 TARGET ?= sample
 
 # %jp{ツール定義}
-GCC_SYS    ?= arm-elf-
-CMD_CC     ?= $(GCC_SYS)gcc
-CMD_ASM    ?= $(GCC_SYS)gcc
-CMD_LINK   ?= $(GCC_SYS)gcc
-CMD_OBJCNV ?= $(GCC_SYS)objcopy
+GCC_ARCH   ?= arm-elf-
+CMD_CC     ?= $(GCC_ARCH)gcc
+CMD_ASM    ?= $(GCC_ARCH)gcc
+CMD_LINK   ?= $(GCC_ARCH)gcc
+CMD_OBJCNV ?= $(GCC_ARCH)objcopy
 
 # %jp{ディレクトリ}
 OS_DIR            = ../../../../..
index ab6ecf5..e74a2a9 100755 (executable)
 #include "driver/serial/renesas/scidrv.h"
 #include "driver/console/vt100/vt100drv.h"
 #include "application/syscmd/shell/shell.h"
+#include "application/syscmd/processlist/processlist.h"
 #include "application/filecmd/filelist/filelist.h"
+#include "application/utility/timecmd/timecmd.h"
 #include "application/utility/memdump/memdump.h"
 #include "application/utility/memwrite/memwrite.h"
 #include "application/utility/memtest/memtest.h"
 #include "application/utility/keytest/keytest.h"
 #include "application/example/hello/hello.h"
 #include "boot.h"
+#include "ostimer.h"
 #include "regs_sh7144.h"
 
 
@@ -76,19 +79,26 @@ int Boot_Process(VPARAM Param)
        
        
        /*************************/
+       /*   OSタイマ初期化      */
+       /*************************/
+       
+       OsTimer_Initialize();
+       
+       
+       /*************************/
        /*   デバイスドライバ    */
        /*************************/
        
        /* SCIデバドラ生成 */
        hDriver = SciDrv_Create((void *)REG_SCI0_SMR, 128, 24000000L, 64);      /* SCI0生成 */
        File_AddDevice("com0", hDriver);                                                                        /* /dev/com0 に登録 */
-
+       
        hDriver = SciDrv_Create((void *)REG_SCI1_SMR, 132, 24000000L, 64);      /* SCI1生成 */
        File_AddDevice("com1", hDriver);                                                                        /* /dev/com1 に登録 */
-
+       
        hDriver = SciDrv_Create((void *)REG_SCI2_SMR, 168, 24000000L, 64);      /* SCI2生成 */
        File_AddDevice("com2", hDriver);                                                                        /* /dev/com2 に登録 */
-
+       
        hDriver = SciDrv_Create((void *)REG_SCI3_SMR, 172, 24000000L, 64);      /* SCI3生成 */
        File_AddDevice("com3", hDriver);                                                                        /* /dev/com3 に登録 */
        
@@ -118,12 +128,14 @@ int Boot_Process(VPARAM Param)
        /*     コマンド登録      */
        /*************************/
        Command_AddCommand("sh",       Shell_Main);
-       Command_AddCommand("hello",    Hello_Main);
+       Command_AddCommand("ps",       ProcessList_Main);
        Command_AddCommand("ls",       FileList_Main);
+       Command_AddCommand("time",     TimeCmd_Main);
        Command_AddCommand("memdump",  MemDump_Main);
        Command_AddCommand("memwrite", MemWrite_Main);
        Command_AddCommand("memtest",  MemTest_Main);
        Command_AddCommand("keytest",  KeyTest_Main);
+       Command_AddCommand("hello",    Hello_Main);
        
        
        /* 起動メッセージ */
index d01a620..222f3f1 100755 (executable)
@@ -29,6 +29,11 @@ HOSAPLFW_BUILD_DIR = $(HOSAPLFW_DIR)/build/sh/sh2/gcc
 OBJS_DIR           = objs_$(TARGET)
 
 
+# %jp{カーネルフックの設定}
+KERNEL_HOK_TSK = Yes
+KERNEL_HOK_ISR = Yes
+
+
 # %jp{共通定義読込み}
 include $(KERNEL_MAKINC_DIR)/common.inc
 
index bb23350..c95f9c1 100755 (executable)
@@ -4,7 +4,7 @@ ENTRY(_reset_handler)
 MEMORY
 {
        vector : o = 0x0000000, l = 0x00400
-       rom    : o = 0x0000400, l = 0x07c00
+       rom    : o = 0x0000400, l = 0x3fc00
        ram    : o = 0x0040000, l = 0x80000
 }
 
index 8b5f77e..370493e 100755 (executable)
 #include "kernel.h"
 #include "ostimer.h"
 #include "regs_sh7144.h"
+#include "system/sysapi/sysapi.h"
 
 
-#define INHNO_OSTIMER                  144                                                     /**< %jp{割り込みハンドラ番号} */
 #define PERIPHERAL_CLOCK               (24000000UL)                            /**< %jp{ペリフェラルクロック(24MHz)} */
 
 
-static void OsTimer_IrqHandler(void);                                          /**< %jp{タイマ割り込みハンドラ} */
+static void OsTimer_Isr(VPARAM Param);                         /**< %jp{タイマ割り込みハンドラ} */
 
 
 /** %jp{OS用タイマ初期化ルーチン} */
-void OsTimer_Initialize(VP_INT exinf)
+void OsTimer_Initialize(void)
 {
-       T_DINH dfinh;
-       return;
-       
-       /* %jp{割り込みハンドラ定義} */
-       dfinh.inthdr = (FP)OsTimer_IrqHandler;
-       def_inh(INHNO_OSTIMER, &dfinh);
+       /* %jp{割り込みサービスルーチン登録} */
+       SysIsr_Create(144, OsTimer_Isr, (VPARAM)0);
        
        /* %jp{タイマ動作開始} */
        *REG_STANDBY_MSTCR2 &= 0xefff;
@@ -45,11 +41,11 @@ void OsTimer_Initialize(VP_INT exinf)
 
 
 /** %jp{タイマ割り込みハンドラ} */
-void OsTimer_IrqHandler(void)
+void OsTimer_Isr(VPARAM Param)
 {
        *REG_CMT0_CMCSR &= 0xff7f;
        
-       isig_tim();
+       SysTim_Signal(1000000UL);
 }
 
 
index e741bb1..b3f4f40 100755 (executable)
@@ -18,7 +18,7 @@ extern "C" {
 #endif
 
 /** %jp{OS用タイマ初期化ルーチン} */
-void OsTimer_Initialize(VP_INT exinf);
+void OsTimer_Initialize(void);
 
 #ifdef __cplusplus
 }
index 0367512..9045d8e 100755 (executable)
@@ -20,13 +20,11 @@ KERNEL_MAX_MPFID(32);
 KERNEL_MAX_ISRID(32);
 
 
-/* %jp{OSタイマの設定}%en{OS timer} */
-INCLUDE("\"ostimer.h\"");
-ATT_INI({TA_HLNG, 0, OsTimer_Initialize});
 
 /* %jp{サンプル}%en{Sample program} */
 INCLUDE("\"boot.h\"");
 CRE_TSK(TSKID_BOOT, {TA_HLNG | TA_ACT, 0, Boot_Task, 2, 1024, NULL});
 
 
+
 /* end of file */
index 05fe18c..18b3a87 100755 (executable)
@@ -10,7 +10,7 @@
 
 
 /* ITRONをマイクロカーネルとして、依存性はこのモジュールで極力隠蔽する */
-/* ã\81\84ã\82\8fã\82\86ã\82\8bã\82·ã\82¹ã\83\86ã\83 ã\83¢ã\83¼ã\83\89\83\87ã\83\90ã\83\89ã\83©ã\81¨ã\81\8b)のみに許すAPIを定義する */
+/* ã\81\84ã\82\8fã\82\86ã\82\8bã\82·ã\82¹ã\83\86ã\83 ã\83¢ã\83¼ã\83\89\83\87ã\83\90ã\82¤ã\82¹ã\83\89ã\83©ã\82¤ã\83\90ã\81ªã\81©)のみに許すAPIを定義する */
 /* ユーザーモード用APIは別途作成予定 */
 
 
@@ -107,7 +107,7 @@ void           SysMtx_Delete(SYSMTX_HANDLE hMtx);                                                   /**< ミューテック
 int            SysMtx_PolingLock(SYSMTX_HANDLE hMtx);                                          /**< ミューテックスポーリングロック(システム用) */
 void           SysMtx_Lock(SYSMTX_HANDLE hMtx);                                                                /**< ミューテックスロック(システム用) */
 void           SysMtx_Unlock(SYSMTX_HANDLE hMtx);                                                      /**< ミューテックスロック解除(システム用) */
-int            SysMtx_RefStatus(SYSMTX_HANDLE hMtx);                                           /**< ã\82¤ã\83\99ã\83³ã\83\88の状態を取得(システム用) */
+int            SysMtx_RefStatus(SYSMTX_HANDLE hMtx);                                           /**< ã\83\9fã\83¥ã\83¼ã\83\86ã\83\83ã\82¯ã\82¹の状態を取得(システム用) */
 
 /* システム用イベント制御API */
 SYSEVT_HANDLE  SysEvt_Create(int iAttr);                                                                       /**< イベント生成(システム用) */
@@ -118,6 +118,7 @@ void           SysEvt_Clear(SYSEVT_HANDLE hEvt);                                                    /**< イベントクリ
 int            SysEvt_RefStatus(SYSEVT_HANDLE hEvt);                                           /**< イベントの状態を取得(システム用) */
 
 /* 時間管理 */
+void           SysTim_Signal(unsigned long ulTic);                                                     /**< タイムティックを与える(システム用) */
 void           SysTim_Wait(unsigned long ulTime);                                                      /**< 時間待ち(システム用) */
 TIME           SysTim_GetCurrentTime(void);                                                                    /**< 現在の時刻取得(システム用) */
 SYSTIM_SYSTIME SysTim_GetSystemTime(void);                                                                     /**< 現在のシステム時刻取得(システム用) */
index 0ad83ff..4e3302b 100755 (executable)
 #include "kernel.h"
 
 
-SYSMTX_HANDLE  SysMem_hMtx;                    /* システムメモリ管理用ミューテックス */
-C_MEMPOL                       SysMem_MemPol;          /* システムヒープメモリ */
-T_SYSPRC_INF           *SysPrc_InfTbl;         /* プロセス管理用テーブル */
-T_SYSISR_INF           *SysIsr_InfTbl;         /* ISR管理用テーブル */
+SYSMTX_HANDLE          SysMem_hMtx;                    /* システムメモリ管理用ミューテックス */
+C_MEMPOL                       SysMem_MemPol;                  /* システムヒープメモリ */
+T_SYSPRC_INF           *SysPrc_InfTbl;                 /* プロセス管理用テーブル */
+T_SYSISR_INF           *SysIsr_InfTbl;                 /* ISR管理用テーブル */
 
 
 /* システムの初期化 */
index c5ea3ce..2f1d009 100755 (executable)
@@ -27,21 +27,23 @@ extern const INTNO  _kernel_max_intno;
 /* プロセス固有情報管理 */
 typedef struct t_sysprc_inf
 {
-       VPARAM                          Param;                          /* プロセス固有パラメータ */
-       SYSTIM_CPUTIME          ExecTime;                       /* プロセス実行時間計測 */
+       VPARAM                          Param;                                  /* プロセス固有パラメータ */
+       SYSTIM_CPUTIME          ExecTime;                               /* プロセス実行時間計測 */
 } T_SYSPRC_INF;
 
 
 /* ISR固有情報管理 */
 typedef struct t_sysisr_inf
 {
-       SYSTIM_CPUTIME          ExecTime;                       /* ISR実行時間計測 */
+       SYSTIM_CPUTIME          ExecTime;                               /* ISR実行時間計測 */
 } T_SYSISR_INF;
 
-extern SYSMTX_HANDLE   SysMem_hMtx;            /* システムメモリ管理用ミューテックス */
-extern C_MEMPOL                        SysMem_MemPol;          /* システムヒープメモリ */
-extern T_SYSPRC_INF            *SysPrc_InfTbl;         /* プロセス管理用テーブル */
-extern T_SYSISR_INF            *SysIsr_InfTbl;         /* ISR管理用テーブル */
+extern SYSMTX_HANDLE   SysMem_hMtx;                    /* システムメモリ管理用ミューテックス */
+extern C_MEMPOL                        SysMem_MemPol;                  /* システムヒープメモリ */
+extern T_SYSPRC_INF            *SysPrc_InfTbl;                 /* プロセス管理用テーブル */
+extern T_SYSISR_INF            *SysIsr_InfTbl;                 /* ISR管理用テーブル */
+extern SYSTIM_CPUTIME  SysTim_TimeCounter;             /* デフォルトのタイマカウンタ */
+
 
 
 #ifdef __cplusplus
index da26c7c..516e3b7 100755 (executable)
 #include "sysapi_local.h"
 
 
+
+/* SysTim_GetCpuTime をオーバーライドする場合は一緒に
+  オーバーライドすること */
+
+
 /** CPU時刻をナノ秒に換算(システム用) */
 unsigned long SysTim_CpuTimeToNanosecond(SYSTIM_CPUTIME CpuTime)
 {
-       return (unsigned long)CpuTime;
+       return (unsigned long)(CpuTime % 1000000000UL);         /* デフォルトではナノ秒単位 */
 }
 
 
index d20e730..12d3f34 100755 (executable)
 #include "sysapi_local.h"
 
 
+/* SysTim_GetCpuTime をオーバーライドする場合は一緒に
+  オーバーライドすること */
+
 
 /* CPU時刻を秒に換算(システム用) */
 unsigned long  SysTim_CpuTimeToSecond(SYSTIM_CPUTIME CpuTime)
 {
-       return 0;
+       return (unsigned long)(CpuTime / 1000000000UL);         /* デフォルトではナノ秒単位 */
 }
 
 
index 4bf6f1f..5d4b3ee 100755 (executable)
 #include "sysapi_local.h"
 
 
+/* 精度の良いタイマを持ったシステムでは本関数を
+  オーバーライドすることで、高精度のCPU時刻計測が可能となる */
+
 
 /**< 現在のCPU時刻取得(システム用) */
 SYSTIM_CPUTIME SysTim_GetCpuTime(void)
 {
-       return 0;
+       return SysTim_TimeCounter;
 }
 
 
index b3df75e..248388f 100755 (executable)
 /** %jp{他タスクを終了する} */
 void _kernel_dsp_ter_tsk(_KERNEL_T_TSKHDL tskhdl)
 {
-       _KERNEL_T_TCB_PTR tcb;
+       _KERNEL_T_TCB_PTR               tcb;
+       _KERNEL_TSK_T_TSKSTAT   tskstat;
 
        /* %jp{TCBを取得} */
        tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
 
+       /* %jp{現在の状態を取得} */
+       tskstat = _KERNEL_TSK_GET_TSKSTAT(tcb);
+
+       if ( tskstat == _KERNEL_TTS_RDY )
+       {
+               /* %jp{レディーキューから削除} */
+               _KERNEL_SYS_RMV_RDQ(tskhdl);
+       }
+       else
+       {
+               /* 待ちキューから取り外す */
+               _KERNEL_SYS_RMV_TOQ(tskhdl);
+               _KERNEL_TRM_QUE(tskhdl);
+       }
+
        /* %jp{休止状態に設定} */
-       _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_DMT);
-       
-       /* %jp{レディーキューから取り外す} */
-       _KERNEL_SYS_RMV_RDQ(tskhdl);
+       _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_DMT);  
 }
 
 
index 99d18bd..e0ed85d 100755 (executable)
  */
 ER ter_tsk(ID tskid)
 {
-       _KERNEL_T_TSKHDL     tskhdl;
-       _KERNEL_T_TCB        *tcb;
-       _KERNEL_T_TCB_RO     *tcb_ro;
-       _KERNEL_TSK_T_ACTCNT actcnt;
-
+       _KERNEL_T_TSKHDL                tskhdl;
+       _KERNEL_T_TCB_PTR               tcb;
+       _KERNEL_T_TCB_RO_PTR    tcb_ro;
+       _KERNEL_TSK_T_ACTCNT    actcnt;
+       
+       
        /* %jp{ID のチェック} */
 #if _KERNEL_SPT_TER_TSK_E_ID
        if ( !_KERNEL_TSK_CHECK_TSKID(tskid) )
@@ -56,9 +57,22 @@ ER ter_tsk(ID tskid)
                return E_ILUSE;                         /* %jp{サービスコール不正使用} */
        }
 #endif
-               
-       /* %jp{レディーキューから削除} */
-       _KERNEL_DSP_EXT_TSK(tskhdl);
+       
+       
+       /* 状態チェック */
+#if _KERNEL_SPT_TER_TSK_E_OBJ
+       if ( _KERNEL_TSK_GET_TSKSTAT(tcb) == _KERNEL_TTS_DMT )
+       {
+               _KERNEL_LEAVE_SVC();            /* %jp{サービスコールを出る}%en{leave service-call} */
+               return E_OBJ;                           /* %jp{オブジェクト状態エラー} */
+       }
+
+#endif
+       
+       
+       /* タスクを終了させる */
+       _KERNEL_DSP_TER_TSK(tskhdl);
+       
        
        /* %jp{所有ミューテックスがあれば開放} */
 #if _KERNEL_SPT_MTX