# PROP Default_Filter ""
# Begin Source File
-SOURCE=..\..\..\..\system\memory\memif.h
-# End Source File
-# Begin Source File
-
SOURCE=..\..\..\..\system\memory\memory.c
# End Source File
# Begin Source File
SOURCE=..\..\..\..\apl\hello\hello.h
# End Source File
# End Group
+# Begin Group "memdump"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\..\apl\memdump\memdump.c
+# End Source File
+# End Group
# End Group
# End Target
# End Project
int AnalyzeApi(const char* pszApiName, const char* pszParams); // APIの解析
int AutoId(void);
void WriteCfgDef(FILE* fp); // cfgファイル定義部書き出し
+ void WriteCfgIni(FILE* fp);
};
CApiInclude g_ApiInclude;
+CApiKernelHeap g_ApiKernelHeap;
CApiIdleStack g_ApiIdleStack;
CApiMaxTpri g_ApiMaxTpri;
CApiIntStack g_IntStack;
-CApiKernelHeap g_ApiKernelHeap;
CApiCreTsk g_ApiCreTsk;
CApiDefTex g_ApiDefTex;
CApiCreSem g_ApiCreSem;
static CApiDef* g_ApiList[] =
{
&g_ApiInclude,
+ &g_ApiKernelHeap,
&g_ApiIdleStack,
&g_IntStack,
- &g_ApiKernelHeap,
&g_ApiCreTsk,
// &g_ApiDefTex,
&g_ApiCreSem,
#include "readcfg.h"
-#define IDLSTK_STKSZ 0
-#define IDLSTK_STK 1
+#define SYSSTK_STKSZ 0
+#define SYSSTK_STK 1
// コンストラクタ
// APIの解析
int CApiIdleStack::AnalyzeApi(const char* pszApiName, const char* pszParams)
{
- if ( strcmp(pszApiName, "KERNEL_IDL_STK") == 0 )
+ if ( strcmp(pszApiName, "KERNEL_SYS_STK") == 0 )
{
if ( m_iObjs > 0 )
{
fputs(
"\n\n\n"
"/* ------------------------------------------ */\n"
- "/* idle stack */\n"
+ "/* system stack */\n"
"/* ------------------------------------------ */\n\n"
, fp);
// パラメータ読み出し
if ( m_iObjs > 0 )
{
- pszSize = m_pParamPacks[0]->GetParam(IDLSTK_STKSZ);
- pszStack = m_pParamPacks[0]->GetParam(IDLSTK_STK);
+ pszSize = m_pParamPacks[0]->GetParam(SYSSTK_STKSZ);
+ pszStack = m_pParamPacks[0]->GetParam(SYSSTK_STK);
}
else
{
{
fprintf(
fp,
- "VP _kernel_idl_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\t/* idle stack block*/\n"
- "const VP _kernel_idl_stk = (VP)(_kernel_idl_stkblk);\t/* idle stack */\n"
- "const SIZE _kernel_idl_stksz = (SIZE)sizeof(_kernel_idl_stkblk);\t/* idle stack size */\n",
+ "VP _kernel_sys_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\t/* system stack block*/\n\n",
pszSize);
}
+}
+
+
+// cfgファイル起動部書き出し
+void CApiIdleStack::WriteCfgIni(FILE* fp)
+{
+ const char* pszSize;
+ const char* pszStack;
+
+ // パラメータ読み出し
+ if ( m_iObjs > 0 )
+ {
+ pszSize = m_pParamPacks[0]->GetParam(SYSSTK_STKSZ);
+ pszStack = m_pParamPacks[0]->GetParam(SYSSTK_STK);
+ }
else
{
+ pszSize = "128"; // 指定が無ければデフォルトサイズ
+ pszStack = "NULL"; // 指定が無ければNULL(自動生成)
+ }
+
+ if ( strcmp(pszStack, "NULL") == 0 )
+ {
fprintf(
fp,
- "const VP _kernel_idl_stk = (VP)(%s);\t/* idle stack */\n"
- "const SIZE _kernel_idl_stksz = (SIZE)(%s);\t/* idle stack */\n",
- pszStack,pszSize);
+ "\n\t_KERNEL_SYS_INI_SYSSTK((VP)(_kernel_sys_stkblk), (SIZE)sizeof(_kernel_sys_stkblk));\n");
}
+ else
+ {
+ fprintf(
+ fp,
+ "\n\t_KERNEL_SYS_INI_SYSSTK((VP)(%s), (SIZE)(%s));\n",
+ pszStack, pszSize);
+ }
+
}
TOQ_DIR = $(CORE_DIR)/toq
HEP_DIR = $(CORE_DIR)/hep
DPC_DIR = $(CORE_DIR)/dpc
+ADTQ_DIR = $(CORE_DIR)/adtq
SYSOBJ_DIR = $(OBJ_DIR)/sys
TSKOBJ_DIR = $(OBJ_DIR)/tsk
INC_DIRS += $(INC_DIR)
-SRC_DIRS += $(DSP_DIR) $(QUE_DIR) $(TOQ_DIR) $(HEP_DIR) $(DPC_DIR) \
- $(SYSOBJ_DIR) $(TSKOBJ_DIR) $(SEMOBJ_DIR) $(FLGOBJ_DIR) \
- $(MBXOBJ_DIR) $(MPFOBJ_DIR) $(INHOBJ_DIR) $(ISROBJ_DIR) \
- $(TIMOBJ_DIR)
-
+SRC_DIRS += $(DSP_DIR) $(QUE_DIR) $(TOQ_DIR) $(HEP_DIR) $(DPC_DIR) $(ADTQ_DIR) \
+ $(SYSOBJ_DIR) $(TSKOBJ_DIR) $(SEMOBJ_DIR) $(FLGOBJ_DIR) $(MBXOBJ_DIR) \
+ $(MPFOBJ_DIR) $(INHOBJ_DIR) $(ISROBJ_DIR) $(TIMOBJ_DIR)
# C source files
$(HEP_DIR)/cre_hep.c \
$(HEP_DIR)/alc_hep.c \
$(HEP_DIR)/fre_hep.c \
- $(DPC_DIR)/dpc_fre.c \
- $(DPC_DIR)/dpc_rcv.c \
- $(DPC_DIR)/dpc_snd.c \
- $(DPC_DIR)/lev_svc.c \
+ $(DPC_DIR)/exe_dpc.c \
+ $(ADTQ_DIR)/frcv_adq.c \
+ $(ADTQ_DIR)/fsnd_adq.c \
+ $(ADTQ_DIR)/rcv_adq.c \
+ $(ADTQ_DIR)/reff_adq.c \
+ $(ADTQ_DIR)/refs_adq.c \
+ $(ADTQ_DIR)/snd_adq.c \
$(SYSOBJ_DIR)/sta_knl.c \
$(SYSOBJ_DIR)/get_tid.c \
$(SYSOBJ_DIR)/loc_cpu.c \
ifeq ($(DEBUG),Yes)
# %jp{デバッグ指定があればデバッグ版作成}
-TARGET := $(TARGET)dbg
AFLAGS += $(AFLAGS_DBG) $(AFLAGS_OPT_NONE)
CFLAGS += $(CFLAGS_DBG) $(CFLAGS_OPT_NONE)
else
# %jp{ライブラリ生成}
.PHONY : makeexe_all
-makeexe_all: $(CSRCS) $(ASRCS) mk_kernel mkdir_objs
+makeexe_all: mk_kernel mkdir_objs $(CSRCS) $(ASRCS)
# %jp{クリーンナップ}
.PHONY : makeexe_clean
# PROP Default_Filter ""\r
# Begin Source File\r
\r
-SOURCE=..\..\..\..\source\core\dpc\dpc_fre.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\..\..\source\core\dpc\dpc_rcv.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\..\..\source\core\dpc\dpc_snd.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\..\..\source\core\dpc\lev_svc.c\r
+SOURCE=..\..\..\..\source\core\dpc\exe_dpc.c\r
# End Source File\r
# End Group\r
# End Group\r
#endif
-#define _KERNEL_ADTQ_SND_DAT(adtqcb, data) _kernel_adtq_snd_dat((adtqcb), (data))
-#define _KERNEL_ADTQ_RCV_DAT(adtqcb, p_data) _kernel_adtq_rcv_dat((adtqcb), (p_data))
-#define _KERNEL_ADTQ_REF_FDTQNT(adtqcb) _kernel_adtq_ref_fdtqnt(adtqcb)
-#define _KERNEL_ADTQ_REF_SDTQNT(adtqcb) _kernel_adtq_ref_sdtqnt(adtqcb)
+#define _KERNEL_ADTQ_INI_QUE(adtqcb, adtq, adtqcnt) do { _KERNEL_ADTQ_SET_ADTQ((adtqcb), (adtq)); _KERNEL_ADTQ_SET_ADTQCNT((adtqcb), (adtqcnt)); } while(0)
+#define _KERNEL_ADTQ_SND_DAT(adtqcb, data) _kernel_adtq_snd_dat((adtqcb), (data))
+#define _KERNEL_ADTQ_RCV_DAT(adtqcb, p_data) _kernel_adtq_rcv_dat((adtqcb), (p_data))
+#define _KERNEL_ADTQ_FSND_DAT(adtqcb, data) _kernel_adtq_fsnd_dat((adtqcb), (data))
+#define _KERNEL_ADTQ_FRCV_DAT(adtqcb) _kernel_adtq_frcv_dat(adtqcb)
+#define _KERNEL_ADTQ_REF_SDTQNT(adtqcb) _kernel_adtq_ref_sdtqnt(adtqcb)
+#define _KERNEL_ADTQ_REF_FDTQNT(adtqcb) _kernel_adtq_ref_fdtqnt(adtqcb)
#endif /* _KERNEL__core__adtq_h__ */
#define _KERNEL__core__dpc_h__
+#include "core/adtq.h"
+
+
typedef struct _kernel_t_dpccb
{
- VP_INT *msgq;
- UINT msgqsz;
- volatile UINT head;
- volatile UINT tail;
+ _KERNEL_T_ADTQCB adtq; /**< 遅延プロシージャコール用非同期メッセージキュー */
} _KERNEL_T_DPCCB;
extern "C" {
#endif
-void _kernel_dpc_snd_msg(_KERNEL_T_DPCCB *dcpcb, VP_INT msg);
-VP_INT _kernel_dpc_rcv_msg(_KERNEL_T_DPCCB *dcpcb);
-UINT _kernel_dpc_ref_dat(_KERNEL_T_DPCCB *dcpcb);
-UINT _kernel_dpc_ref_fre(_KERNEL_T_DPCCB *dcpcb);
-void _kernel_dpc_lev_svc(void);
+void _kernel_exe_dpc(void);
#ifdef __cplusplus
}
#endif
-#define _KERNEL_DPC_SND_MSG(dcpcb, msg) _kernel_dpc_snd_msg((dcpcb), (msg))
-#define _KERNEL_DPC_RCV_MSG(dcpcb) _kernel_dpc_rcv_msg((dcpcb))
-#define _KERNEL_DPC_REF_DAT(dcpcb) _kernel_dpc_ref_dat((dcpcb)) /* データ数参照 */
-#define _KERNEL_DPC_REF_FRE(dcpcb) _kernel_dpc_ref_fre((dcpcb)) /* 空き領域参照 */
+#define _KERNEL_DPC_INI_DPC(dcpcb, que, quecnt) _KERNEL_ADTQ_INI_QUE(&(dcpcb)->adtq, que, quecnt)
+#define _KERNEL_DPC_EXE_DPC() _kernel_exe_dpc()
+#define _KERNEL_DPC_SND_MSG(dcpcb, msg) _KERNEL_ADTQ_FSND_DAT(&(dcpcb)->adtq, (msg))
+#define _KERNEL_DPC_RCV_MSG(dcpcb) _KERNEL_ADTQ_FRCV_DAT(&(dcpcb)->adtq)
+#define _KERNEL_DPC_REF_DAT(dcpcb) _KERNEL_ADTQ_REF_SDTQNT(&(dcpcb)->adtq) /* データ数参照 */
+#define _KERNEL_DPC_REF_FRE(dcpcb) _KERNEL_ADTQ_REF_FDTQNT(&(dcpcb)->adtq) /* 空き領域参照 */
#endif /* _KERNEL__core__dpc_h__ */
{
STAT stat; /**< %jp{システムのコンテキスト状態}%en{system state} */
UB dlydsp; /**< %jp{ディスパッチのディレイ管理} */
+#if _KERNEL_SPT_DPC
+ UB svcent; /**< %jp{サービスコール実行中管理} */
+#endif
+
_KERNEL_T_TSKHDL tskhdl_run; /**< %jp{実行中タスク} */
_KERNEL_T_CTXCB sysctxcb; /**< %jp{システムコンテキスト(アイドル実行等)のコンテキスト} */
SIZE sysstksz; /**< %jp{システムコンテキストのスタックサイズ} */
VP sysstk; /**< %jp{システムコンテキストのスタック} */
SIZE intstksz; /**< %jp{割り込みコンテキストのスタックサイズ} */
VP intstk; /**< %jp{割り込みコンテキストのスタック} */
-#if _KERNEL_SPT_DPC
- UINT svcnst; /**< %jp{サービスコールネストカウンタ} */
-#endif
} _KERNEL_T_PROCCB;
#define _KERNEL_SYS_FRE_MEM(ptr) _kernel_fre_hep(&_kernel_syscb.memhep, (ptr)) /**< %jp{カーネルメモリの開放} */
#define _KERNEL_SYS_ALG_MEM(size) _kernel_alg_hep(size) /**< %jp{カーネルメモリのサイズアライメント} */
+#define _KERNEL_SYS_INI_SYSSTK(stk, stksz) do { _kernel_syscb.proccb[0].sysstk = (stk); _kernel_syscb.proccb[0].sysstksz = (stksz); } while(0)
+ /**< %jp{システムスタックの初期化} */
+
#define _KERNEL_SYS_GET_STST() (_KERNEL_SYS_GET_PRCCB()->stat) /**< %jp{カレントプロセッサ状態の取得} */
#define _KERNEL_SYS_SET_STST(x) do { _KERNEL_SYS_GET_PRCCB()->stat = (x); } while (0) /**< %jp{カレントプロセッサ状態の設定} */
#define _KERNEL_SYS_GET_RUNTSK() (_KERNEL_SYS_GET_PRCCB()->tskhdl_run) /**< %jp{カレントプロセッサの実行中タスク取得} */
#if _KERNEL_SPT_DPC /* %jp{遅延プロシージャコールの場合} */
-#define _KERNEL_SYS_REF_SVC() (_kernel_syscb.proccb[0].svcnst)
-#define _KERNEL_SYS_SET_SVC(x) do { _kernel_syscb.proccb[0].svcnst = (x); } while (0)
+#define _KERNEL_SYS_SET_SVC() do { _kernel_syscb.proccb[0].svcent = TRUE; } while (0)
+#define _KERNEL_SYS_CLR_SVC() do { _kernel_syscb.proccb[0].svcent = FALSE; } while (0)
+#define _KERNEL_SYS_SNS_SVC() (_kernel_syscb.proccb[0].svcent)
-#define _KERNEL_ENTER_SVC() do { _KERNEL_SYS_SET_SVC(_KERNEL_SYS_REF_SVC() + 1); } while (0)
-#define _KERNEL_LEAVE_SVC() do { _kernel_dpc_lev_svc(); } while (0)
+#define _KERNEL_ENTER_SVC() do { _KERNEL_SYS_SET_SVC(); } while (0)
+#define _KERNEL_LEAVE_SVC() do { _KERNEL_DPC_EXE_DPC(); _KERNEL_SYS_CLR_SVC(); } while (0)
+#define _KERNEL_SYS_INI_DPC(que, quecnt) _KERNEL_DPC_INI_DPC(&_kernel_syscb.dpccb, (que), (quecnt)) /**< %jp{SPCの初期化} */
#define _KERNEL_SYS_LOC_DPC() do { _KERNEL_DIS_INT(); } while (0)
#define _KERNEL_SYS_UNL_DPC() do { if (!(_KERNEL_SYS_GET_STST() & _KERNEL_TSS_LOC)){ _KERNEL_ENA_INT(); } } while (0)
#define _KERNEL_SYS_SND_DPC(msg) _KERNEL_DPC_SND_MSG(&_kernel_syscb.dpccb, (msg))
/* 実行コンテキストエントリーアドレス
************************************************/
ctx_entry:
- mov.l er3, er0 /* 実行時パラメータを第一引数に設定 */
- mov.l er4, er1 /* 実行時パラメータを第一引数に設定 */
- jmp @er2 /* 実行アドレスにジャンプ */
+ mov.l er5, er0 /* 実行時パラメータを第一引数に設定 */
+ mov.l er6, er1 /* 実行時パラメータを第一引数に設定 */
+ jmp @er4 /* 実行アドレスにジャンプ */
/************************************************
_kernel_cre_ctx(
_KERNEL_T_CTXCB *pk_ctxcb, 作成するコンテキスト [er0]
VP isp, 初期スタックポインタ [er1]
- FP entry, 実行アドレス [@(4, er7)]
- VP_INT par1, 実行時パラメータ1 [@(8, er7)]
- VP_INT par2) 実行時パラメータ2 [@(12, er7)]
+ FP entry, 実行アドレス [er2]
+ VP_INT par1, 実行時パラメータ1 [@(4, er7)]
+ VP_INT par2) 実行時パラメータ2 [@(8, er7)]
************************************************/
__kernel_cre_ctx:
- sub.l #24, er1 /* エントリーポイント+er2〜er6 までの退避分 */
+ sub.l #16, er1 /* エントリーポイント+er4〜er6 までの退避分 */
mov.l er1, @(0, er0) /* スタックポインタの格納 */
mov.l #ctx_entry, er0
- mov.l er0, @(20, er1) /* 実行エントリーポイントの設定 */
+ mov.l er0, @(12, er1) /* 実行エントリーポイントの設定 */
+ mov.l er2, @(8, er1) /* 実行アドレスの格納(er4部分) */
mov.l @(4, er7), er0
- mov.l er0, @(16, er1) /* 実行アドレスの格納(er2部分) */
+ mov.l er0, @(4, er1) /* 実行時パラメータ1の格納(er5部分) */
mov.l @(8, er7), er0
- mov.l er0, @(12, er1) /* 実行時パラメータ1の格納(er3部分) */
- mov.l @(12, er7), er0
- mov.l er0, @(8, er1) /* 実行時パラメータ1の格納(er4部分) */
+ mov.l er0, @(0, er1) /* 実行時パラメータ2の格納(er6部分) */
rts
_KERNEL_T_CTXCB *pk_ctxcb_now) 現在のコンテキスト [er1]
************************************************/
__kernel_swi_ctx:
- push.l er2
- push.l er3
push.l er4
push.l er5
push.l er6
- mov.l er7,@(0, er1) /* スタックポインタ保存 */
+ mov.l er7, @(0, er1) /* スタックポインタ保存 */
/* ---- このまま _kernel_sta_ctx に続ける ---- */
/************************************************
pop.l er6
pop.l er5
pop.l er4
- pop.l er3
- pop.l er2
rts
void _kernel_rst_ctx(
VP_INT par1, 実行時パラメータ1 [er0]
VP_INT par2, 実行時パラメータ2 [er1]
- VP isp, 初期スタックポインタ [@(4, er7)]
- FP entry) 実行アドレス [@(8, er7)]
+ VP isp, 初期スタックポインタ [er2]
+ FP entry) 実行アドレス [@(4, er7)]
************************************************/
__kernel_rst_ctx:
- mov.l @(4, er7), er3 /* 初期スタックポインタ */
- mov.l @(8, er7), er4 /* 実行アドレス取り出し */
- mov.l er3, er7 /* スタックポインタリセット */
- jmp @er4 /* 実行アドレスに分岐 */
+ mov.l @(4, er7), er3 /* 実行アドレス取り出し */
+ mov.l er2, er7 /* スタックポインタリセット */
+ jmp @er3 /* 実行アドレスに分岐 */
.comm __kernel_h83_imsk,1
+++ /dev/null
-/**
- * Hyper Operating System V4 Advance
- *
- * @file dpc.h
- * @brief %jp{遅延プロシージャーコールヘッダファイル}%en{Deferred Procedure Call header file}
- *
- * Copyright (C) 1998-2006 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#include "core/core.h"
-#include "core/dpc.h"
-
-
-#if _KERNEL_SPT_DPC
-
-/* データ数参照 */
-UINT _kernel_dpc_ref_dat(_KERNEL_T_DPCCB *dcpcb)
-{
- UINT head;
- UINT tail;
-
- head = dcpcb->head;
- tail = dcpcb->tail;
-
- if ( head <= tail )
- {
- return tail - head;
- }
- else
- {
- return dcpcb->msgqsz + tail - head;
- }
-}
-
-
-/* 空き領域の取得 */
-UINT _kernel_dpc_ref_fre(_KERNEL_T_DPCCB *dcpcb)
-{
- UINT head;
- UINT tail;
-
- head = dcpcb->head;
- tail = dcpcb->tail;
-
- if ( head > tail )
- {
- return head - tail - 1;
- }
- else
- {
- return dcpcb->msgqsz - tail + head - 1;
- }
-}
-
-#endif /* _KERNEL_SPT_DPC */
-
-
-/* end of file */
+++ /dev/null
-/**
- * Hyper Operating System V4 Advance
- *
- * @file dpc.h
- * @brief %jp{遅延プロシージャーコールヘッダファイル}%en{Deferred Procedure Call header file}
- *
- * Copyright (C) 1998-2006 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#include "core/core.h"
-#include "core/dpc.h"
-
-#if _KERNEL_SPT_DPC
-
-VP_INT _kernel_dpc_rcv_msg(_KERNEL_T_DPCCB *dcpcb)
-{
- UINT head;
- VP_INT msg;
-
- head = dcpcb->head;
- if ( head == dcpcb->tail )
- {
- return 0;
- }
-
- msg = dcpcb->msgq[head];
-
- if ( head + 1 >= dcpcb->msgqsz )
- {
- dcpcb->head = 0;
- }
- else
- {
- dcpcb->head = head + 1;
- }
-
- return msg;
-}
-
-#endif /* _KERNEL_SPT_DPC */
-
-
-/* end of file */
+++ /dev/null
-/**
- * Hyper Operating System V4 Advance
- *
- * @file dpc.h
- * @brief %jp{遅延プロシージャーコールヘッダファイル}%en{Deferred Procedure Call header file}
- *
- * Copyright (C) 1998-2006 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#include "core/core.h"
-#include "core/dpc.h"
-
-#if _KERNEL_SPT_DPC
-
-/* %jp{メッセージの送信} */
-void _kernel_dpc_snd_msg(_KERNEL_T_DPCCB *dcpcb, VP_INT msg)
-{
- UINT next_tail;
-
- /* %jp{次の末尾位置算出} */
- if ( dcpcb->tail + 1 >= dcpcb->msgqsz )
- {
- next_tail = 0;
- }
- else
- {
- next_tail = dcpcb->tail + 1;
- }
-
- /* %jp{オーバーフローチェック} */
- if ( next_tail == dcpcb->head )
- {
- return;
- }
-
- /* %jp{格納} */
- dcpcb->msgq[dcpcb->tail] = msg;
- dcpcb->tail = next_tail;
-}
-
-
-#endif /* _KERNEL_SPT_DPC */
-
-
-/* end of file */
+++ /dev/null
-/**
- * Hyper Operating System V4 Advance
- *
- * @file dpc.h
- * @brief %jp{遅延プロシージャーコールヘッダファイル}%en{Deferred Procedure Call header file}
- *
- * Copyright (C) 1998-2006 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#include "core/core.h"
-#include "core/dpc.h"
-
-#if _KERNEL_SPT_DPC
-
-/* サービスコール退出時の処理 */
-void _kernel_dpc_lev_svc(void)
-{
- FP fncSvc;
- UINT svcnst;
-
- /* サービスコールのネスト数取得 */
- svcnst = _KERNEL_SYS_REF_SVC();
-
- /* 遅延プロシージャ処理中の再呼び出しは無視 */
- if ( svcnst > 1 || _KERNEL_SYS_SNS_DPN() )
- {
- _KERNEL_SYS_SET_SVC(svcnst - 1);
- return;
- }
-
- /* 遅延プロシージャ呼び出し */
- while ( _KERNEL_SYS_RDT_DPC() > 0 )
- {
- fncSvc = (FP)_KERNEL_SYS_RCV_DPC();
- fncSvc();
- }
-
- /* タスクディスパッチの実施 */
-
- _KERNEL_DSP_TSK();
-
- /* サービスコールを抜ける */
- _KERNEL_SYS_SET_SVC(0);
-}
-
-#endif /* _KERNEL_SPT_DPC */
-
-
-/* end of file */
/**** 暫定の手抜き(ここから) *****/
_KERNEL_T_SYSCB _kernel_syscb;
-extern VP _kernel_idl_stk;
-extern SIZE _kernel_idl_stksz;
-
#if _KERNEL_SPT_DPC
VP_INT dpc_buf[32];
#endif
/* %jp{IRC固有の初期化} */
_KERNEL_INI_IRC();
+ /* %jp{初期化ハンドラ実行} */
+ _kernel_cfg_ini();
-#if _KERNEL_SPT_DPC
- _kernel_syscb.dpccb.msgq = dpc_buf;
- _kernel_syscb.dpccb.msgqsz = 32;
-#endif
-
- _kernel_syscb.proccb[0].sysstk = _kernel_idl_stk;
- _kernel_syscb.proccb[0].sysstksz = _kernel_idl_stksz;
-
+ _KERNEL_SYS_INI_DPC(dpc_buf, 32);
/* %jp{システムコンテキストの生成} */
_KERNEL_CRE_CTX(
(VP_INT)0
);
- /* %jp{初期化ハンドラ実行} */
- _kernel_cfg_ini();
_KERNEL_LEAVE_SVC();
include $(KERNEL_MAKINC_DIR)/common.inc
-ifeq ($(ROM),Yes)
+ifeq ($(RAM),Yes)
+# %jp{RAM実行(モニタプログラム利用を想定)}
+TARGET := $(TARGET)_ram
+LINKER_SCRIPT ?= link_ram.x
+C_DEFS += _RAM
+else
# %jp{ROM焼きする場合}
-TARGET := $(TARGET)_rom
LINKER_SCRIPT ?= link_rom.x
-else
-# %jp{デフォルトはRAM実行とする(モニタプログラム利用を想定)}
-LINKER_SCRIPT ?= link_ram.x
+C_DEFS +=
endif