// ---------------------------------------------------------------------------
-// Hyper Operating System V4 Advance Configulator
-// CRE_TSK API
-//
-// Copyright (C) 1998-2006 by Project HOS
-// http://sourceforge.jp/projects/hos/
+// Hyper Operating System V4 Advance Configulator
+// CRE_TSK API
+//
+// Copyright (C) 1998-2006 by Project HOS
+// http://sourceforge.jp/projects/hos/
// ---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "readcfg.h"
#include "defercd.h"
#include "cretsk.h"
#include "analyze.h"
-
+#include "readcfg.h"
// parameter
#define CRETSK_TSKID 0
// %jp{コンストラクタ}%en{constructor}
CApiCreTsk::CApiCreTsk()
{
+ // %jp{デフォルトの最大ID設定}
+ m_iDefaultMaxId = _KERNEL_DEF_TMAX_TSKID;
+
// %jp{パラメーター構文設定}
m_iParamSyntax[0] = 0; // %jp{単独パラメーター}
m_iParamSyntax[1] = 6; // %jp{6パラメーターのブロック}
}
else if ( strcmp(pszApiName, "KERNEL_MAX_TSKID") == 0 )
{
- if ( m_iMaxId > 0 )
+ int iId;
+
+ if ( m_iMaxId >= 0 )
{
return CFG_ERR_MULTIDEF;
}
-
- int iId;
- if ( (iId = atoi(pszParams)) <= 0 )
+
+ if ( m_iResObj >= 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
+
+ if ( (iId = atoi(pszParams)) < 0 )
{
return CFG_ERR_PARAM;
}
-
+
m_iMaxId = iId;
-
+
return CFG_ERR_OK;
}
-
- return CFG_ERR_NOPROC;
-}
+ else if ( strcmp(pszApiName, "KERNEL_RSV_TSKID") == 0 )
+ {
+ int iId;
+ if ( m_iMaxId >= 0 )
+ {
+ return CFG_ERR_DEF_CONFLICT;
+ }
-// 自動ID番号割り当て
-int CApiCreTsk::AutoId(void)
-{
- if ( m_iMaxId == 0 )
- {
- m_iMaxId = _KERNEL_TMAX_TSKID;
+ if ( (iId = atoi(pszParams)) < 0 )
+ {
+ return CFG_ERR_PARAM;
+ }
+
+ if ( m_iResObj < 0 )
+ {
+ m_iResObj = 0;
+ }
+ m_iResObj += iId;
+
+ return CFG_ERR_OK;
}
- return CApiDef::AutoId();
+ return CFG_ERR_NOPROC;
}
-
// %jp{ID 定義ファイル書き出し}
void CApiCreTsk::WriteId(FILE* fp)
{
int i;
-
+
// %jp{コメントを出力}
fputs("\n\n/* Task object ID definetion */\n\n", fp);
m_iId[i]);
}
}
-
+
// %jp{ID最大値定義を出力}
fprintf( fp,
"\n"
{
const char* pszParam;
int i;
-
+
// %jp{コメント出力}
fputs(
"\n\n\n"
"/* create task objects */\n"
"/* ------------------------------------------ */\n\n"
, fp);
-
-
+
+
// %jp{スタック領域出力}
for ( i = 0; i < m_iObjs; i++ )
{
m_pParamPacks[i]->GetParam(CRETSK_STKSZ));
}
}
-
+
#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY
#if _KERNEL_TCB_SPLIT_RO
fprintf(fp, "\t\tNULL,\n");
}
}
- fprintf(fp, "\t};\n");
+ fprintf(fp, "\t};\n");
}
#else
// ポインタ配列&統合TCB
fprintf(fp, "\t\tNULL,\n");
}
}
- fprintf(fp, "\t};\n");
+ fprintf(fp, "\t};\n");
}
#endif
#endif
-
+
// %jp{タスク情報出力}
fprintf(
fp,
fprintf(fp, "0, 0, "); /* %jp{キューに接続する為のオブジェクト} */
#endif
#endif
-
+
#if _KERNEL_TCB_TOQOBJ
fprintf(fp, "0, 0, 0, "); /* %jp{タイムアウトキュー} */
#endif
fprintf(fp, "0, "); /* %jp{強制待ち要求ネスト回数} */
#endif
+#if _KERNEL_TCB_MTXHDL
+ fprintf(fp, "0, "); /* %jp{所有するミューテックスのリスト} */
+#endif
+
#if _KERNEL_TCB_ERCD
fprintf(fp, "0, "); /* ercd */
#endif
#if _KERNEL_TCB_TSKID
fprintf(fp, "0, "); /* tskid */
#endif
+
+#if _KERNEL_TCB_TEXSTAT
+ fprintf(fp, "0, "); /* texstat %jp{タスク例外処理状態} */
+#endif
+
+#if _KERNEL_TCB_RASPTN
+ fprintf(fp, "0, "); /**< rasptn %jp{タスク例外処理要因} */
+#endif
}
fprintf(fp, "(VP)((VB *)(%s) + (SIZE)(%s)), ", m_pParamPacks[iObj]->GetParam(CRETSK_STK), m_pParamPacks[iObj]->GetParam(CRETSK_STKSZ));
}
#endif
+
+#if _KERNEL_TCB_TEXATR
+ fprintf(fp, "0, "); /**< texatr %jp{タスク例外処理ルーチン属性} */
+#endif
+
+#if _KERNEL_TCB_TEXRTN
+ fprintf(fp, "0, "); /**< texrtn %jp{タスク例外処理ルーチンの起動番地} */
+#endif
}
for ( int i = 0; i < m_iObjs; i++ )
{
fprintf(fp, "\t_kernel_tcb_blk_%d.tcb_ro = &_kernel_tcb_ro_blk_%d;\n", m_iId[i], m_iId[i]);
- }
+ }
#endif
}
// ---------------------------------------------------------------------------
-// Copyright (C) 1998-2006 by Project HOS
+// Copyright (C) 1998-2006 by Project HOS
// ---------------------------------------------------------------------------