// ---------------------------------------------------------------------------
-// Hyper Operating System V4 コンフィギュレーター
-// HOS_INT_STK API の処理
-//
-// Copyright (C) 1998-2003 by Project HOS
-// http://sourceforge.jp/projects/hos/
+// Hyper Operating System V4 コンフィギュレーター
+// HOS_INT_STK API の処理
+//
+// Copyright (C) 1998-2010 by Project HOS
+// http://sourceforge.jp/projects/hos/
// ---------------------------------------------------------------------------
#define INTSTK_STK 1
+#define DEFAULT_SIZE "256"
+#define DEFAULT_STACK "NULL"
+
+
// コンストラクタ
CApiIntStack::CApiIntStack()
{
return AddParams(pszParams);
}
- else if ( strcmp(pszApiName, "KERNEL_INT_ISP") == 0 )
- {
- if ( m_iObjs > 0 )
- {
- return CFG_ERR_DEF_CONFLICT;
- }
-
- if ( m_szStackPointer[0] != '\0' )
- {
- return CFG_ERR_MULTIDEF;
- }
-
- strcpy(m_szStackPointer, pszParams);
- return CFG_ERR_OK;
- }
return CFG_ERR_NOPROC;
}
{
const char* pszSize;
const char* pszStack;
- int i;
// パラメータ読み出し
- if ( m_iObjs <= 0 && m_szStackPointer[0] == '\0' )
+ if ( m_iObjs <= 0 )
+ {
+ pszSize = DEFAULT_SIZE;
+ pszStack = DEFAULT_STACK;
+ }
+ else
{
- return ;
+ pszSize = m_pParamPacks[0]->GetParam(INTSTK_STKSZ);
+ pszStack = m_pParamPacks[0]->GetParam(INTSTK_STK);
}
+
// コメント出力
fputs(
"\n\n\n"
"/* ------------------------------------------ */\n\n"
, fp);
- // 割り込み用スタックポインタ出力
- if ( m_szStackPointer[0] != '\0' )
+ if ( strcmp(pszStack, "NULL") == 0 )
{
fprintf(
- fp,
- "const VP _kernel_int_isp[1] = {(VP)(%s)};\t/* interrupt initial stack pointer */\n",
- m_szStackPointer);
+ fp,
+ "VP _kernel_int_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\n"
+ "const VP _kernel_int_isp = &_kernel_int_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\n",
+ pszSize, pszSize);
}
else
{
- pszSize = m_pParamPacks[0]->GetParam(INTSTK_STKSZ);
- pszStack = m_pParamPacks[0]->GetParam(INTSTK_STK);
-
- if ( strcmp(pszStack, "NULL") == 0 )
- {
- fprintf(
- fp,
- "VP _kernel_int_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\t/* interrupt stack block*/\n",
- pszSize, _KERNE_INTSTK_NUM);
- pszStack = "_kernel_int_stkblk";
- }
- else
- {
- fprintf(
+ fprintf(
fp,
- "const VP _kernel_int_isp[1] = {(VP)((VB *)(%s) + (%s))};\t/* interrupt initial stack pointer */\n",
+ "const VP _kernel_int_isp = (VP)((VB *)(%s) + (SIZE)(%s));\n",
pszStack, pszSize);
- }
+ }
+}
- fprintf(
- fp,
- "\n/* interrupt initial stack pointer */\n"
- "const VP _kernel_int_isp[%d] =\n{\n",
- _KERNE_INTSTK_NUM);
- for ( i = 0; i < _KERNE_INTSTK_NUM; i++ )
- {
- fprintf(
- fp,
- "\t(VP)((VB *)(%s) + ((((%s) / %d) & ~(sizeof(VP) - 1)) * %d)),\n",
- pszStack, pszSize, _KERNE_INTSTK_NUM, i+1);
- }
+// cfgファイル起動部書き出し
+void CApiIntStack::WriteCfgIni(FILE* fp)
+{
+ const char* pszSize;
+ const char* pszStack;
+ // パラメータ読み出し
+ if ( m_iObjs <= 0 )
+ {
+ pszSize = DEFAULT_SIZE;
+ pszStack = DEFAULT_STACK;
+ }
+ else
+ {
+ pszSize = m_pParamPacks[0]->GetParam(INTSTK_STKSZ);
+ pszStack = m_pParamPacks[0]->GetParam(INTSTK_STK);
+ }
+
+
+ if ( strcmp(pszStack, "NULL") == 0 )
+ {
+ fprintf(
+ fp,
+ "\t_KERNEL_SYS_INI_INTSTK((SIZE)sizeof(_kernel_int_stkblk), (VP)(_kernel_int_stkblk));\n");
+ }
+ else
+ {
fprintf(
fp,
- "};\n\n");
+ "\t_KERNEL_SYS_INI_INTSTK((SIZE)(%s), (VP)(%s));\n",
+ pszSize, pszStack);
}
}
+void CApiIntStack::WriteStackMemory(FILE* fp)
+{
+ const char* pszSize;
+ const char* pszStack;
+
+ // パラメータ読み出し
+ if ( m_iObjs <= 0 )
+ {
+ pszSize = DEFAULT_SIZE;
+ pszStack = DEFAULT_STACK;
+ }
+ else
+ {
+ pszSize = m_pParamPacks[0]->GetParam(INTSTK_STKSZ);
+ pszStack = m_pParamPacks[0]->GetParam(INTSTK_STK);
+ }
+
+ if ( strcmp(pszStack, "NULL") == 0 )
+ {
+ fprintf(fp, "extern VP _kernel_int_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\n", pszSize);
+ }
+}
+
+
+void CApiIntStack::WriteStackPointer(FILE* fp)
+{
+ const char* pszSize;
+ const char* pszStack;
+
+ // パラメータ読み出し
+ if ( m_iObjs <= 0 )
+ {
+ pszSize = DEFAULT_SIZE;
+ pszStack = DEFAULT_STACK;
+ }
+ else
+ {
+ pszSize = m_pParamPacks[0]->GetParam(INTSTK_STKSZ);
+ pszStack = m_pParamPacks[0]->GetParam(INTSTK_STK);
+ }
+
+ if ( strcmp(pszStack, "NULL") == 0 )
+ {
+ fprintf(fp, "&_kernel_int_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)]", pszSize);
+ }
+ else
+ {
+ fprintf(fp, "(VB *)(%s) + (SIZE)(%s)", pszStack, pszSize);
+ }
+}
+
+
// ---------------------------------------------------------------------------
-// Copyright (C) 1998-2006 by Project HOS
+// end of file
// ---------------------------------------------------------------------------