⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hcfgh8h.c

📁 050117 CD 修正分 iTRON hosroot
💻 C
📖 第 1 页 / 共 2 页
字号:
/* ------------------------------------------------------------------------- */
/*  HOS-H8 梡 僐儞僼傿僊儏儗乕僞乕                                           */
/*                                                                           */
/*                                   Copyright (C) 1998-2002 by Project HOS  */
/* ------------------------------------------------------------------------- */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/* ------------------------------------ */
/*             掕悢掕媊                 */
/* ------------------------------------ */

#define TRUE  1
#define FALSE 0

#define MAX_PATH   		256		/* 嵟戝僷僗柤 */
#define MAX_PARAMETER     6     /* 嵟戝僷儔儊乕僞乕悢 */
#define MAX_ID          255     /* 嵟戝俬俢悢 */
#define MAX_INCLUDE_C    64		/* 嵟戝撉傒崬傒僼傽僀儖悢(俠尵岅梡) */



/* ------------------------------------ */
/*             娭悢愰尵                 */
/* ------------------------------------ */

/* 僐儅儞僪夝愅 */
int  AnalizeCommand(char *(*pppPara[MAX_PARAMETER]), int nPara, char *pBuf);
void AnalizeDefInt(char *pBuf);
void AnalizeIncludeC(char *pBuf);
void AnalizeMaxTskPri(char *pBuf);
void AnalizeSysStack(char *pBuf);

/* 儊儌儕偺奐曻 */
void FreeParameter(char *ppPara[MAX_PARAMETER]);
void FreeTable(char ***pppTable);

/* 暥帤楍張棟 */
void CutSpace(char *pBuf);
int  ClipParameter(char *ppPar[], int nNum, char *pBuf);
int  StrToInt(int *pNum, char *pBuf);
int  StrToLong(long *pNum, char *pBuf);

/* 僼傽僀儖弌椡 */
void Write_Def_ID(void);		/* 掕媊僼傽僀儖弌椡 */
void Write_C_Cfg(void);			/* 俠尵岅晹弌椡 */
void Write_Asm_Cfg(void);		/* 傾僙儞僽儕尵岅晹弌椡 */



/* ------------------------------------ */
/*             曄悢愰尵                 */
/* ------------------------------------ */

char szCfgFile[MAX_PATH]  = "hos.cfg";		/* 僐儞僼傿僌儗乕僔儑儞僼傽僀儖 */
#ifdef __USE_CROSS_GCC__
char szAsmFile[MAX_PATH]  = "cfg_asm.s";	/* 傾僙儞僽儕尵岅弌椡僼傽僀儖柤 */
#else
char szAsmFile[MAX_PATH]  = "cfg_asm.src";	/* 傾僙儞僽儕尵岅弌椡僼傽僀儖柤 */
#endif
char szCFile[MAX_PATH]    = "cfg_c.c";		/* 俠尵岅弌椡僼傽僀儖柤 */
char szDefCFile[MAX_PATH] = "defid.h";		/* 掕悢掕媊僿僢僟僼傽僀儖柤 */

int  nLine;			/* 夝愅拞偺峴斣崋 */
int  bErr = FALSE;	/* 僄儔乕 */

#define ADVANCED 0
#define NORMAL   1
int  Mode = ADVANCED;

#define MAX_INT_ADVANCED  64		/* 嵟戝妱傝崬傒斣崋 */
#define MAX_INT_TINY	  26		/* TINY 懳墳        */
int maxInt = MAX_INT_ADVANCED;

char *pMaxTskPri = NULL;		/* 嵟戝桪愭搙(僨僼僅儖僩偱俉) */

/* 奺僷儔儊乕僞乕 傪奿擺 */
char **pppTaskTable[MAX_ID];	/* 僞僗僋惗惉僨乕僞僥乕僽儖 */
char **pppSplTable[MAX_ID];		/* 僗僞僢僋僾乕儖惗惉僨乕僞僥乕僽儖 */
char **pppSemTable[MAX_ID];		/* 僙儅僼僅惗惉僨乕僞僥乕僽儖 */
char **pppFlgTable[MAX_ID];		/* 僀儀儞僩僼儔僌惗惉僨乕僞僥乕僽儖 */
char **pppMbxTable[MAX_ID];		/* 儊僢僙乕僕儃僢僋僗惗惉僨乕僞僥乕僽儖 */
char **pppMpfTable[MAX_ID];		/* 屌掕挿儊儌儕僾乕儖惗惉僨乕僞僥乕僽儖 */
char *ppIntTable[MAX_INT_ADVANCED];		/* 妱傝崬傒儀僋僞偺僥乕僽儖 */
int  nTaskCount;	/* 僞僗僋偺悢 */
int  nSplCount;		/* 僗僞僢僋僾乕儖偺悢 */
int  nSemCount;		/* 僙儅僼僅偺悢 */
int  nFlgCount;		/* 僀儀儞僩僼儔僌偺悢 */
int  nMbxCount;		/* 儊僀儖儃僢僋僗偺 */
int  nMpfCount;		/* 屌掕挿儊儌儕僾乕儖偺悢 */

char *ppIncludeCTable[MAX_INCLUDE_C];	/* 俠尵岅偺僀儞僋儖乕僪僼傽僀儖 */
int  nIncCCount;		/* 俠尵岅僀儞僋儖乕僪僼傽僀儖悢 */

#define SYSSTACK_ADV  0xfff10
#define SYSSTACK_TINY 0xff80
unsigned long SystemStack = SYSSTACK_ADV; /* 僔僗僥儉僗僞僢僋偺傾僪儗僗 */

int  bUseTimer = TRUE;		/* 僞僀儅傪巊偆偐偳偆偐 */



/* ------------------------------------ */
/*             儊僀儞                   */
/* ------------------------------------ */

/* 儊僀儞娭悢 */
int main(int argc, char *argv[])
{
	FILE *fp;
	char szBuf[256];
	int  i;
	
	/* 儘僑昞帵 */
	fprintf(stderr, "HOS-H8 Configurator\n");
	
	/* 僐儅儞僪儔僀儞夝愅 */
	if ( argc > 3 ) {
		fprintf(stderr,"Usage: %s [[-t] config_file]\n", argv[0]);
		exit(1);
	}

	/* 僲乕儅儖儌乕僪 */
	if ( argc > 1) {
		if ( (i = strcmp( argv[1], "-n")) == 0) {
			Mode   = NORMAL;
			maxInt = MAX_INT_TINY;
			SystemStack = SYSSTACK_TINY;
		}
		if ( argc == 3 || Mode == ADVANCED )
			strcpy(szCfgFile, argv[argc-1]);
	}
	
	/* 僼傽僀儖僆乕僾儞 */
	if ( (fp = fopen(szCfgFile, "r")) == NULL ) {
		fprintf(stderr, "%s 偑奐偗傑偣傫\n", szCfgFile);
		exit(1);
	}
	
	/* 僼傽僀儖偺夝愅 */
	nLine = 1;
	while ( fgets(szBuf, sizeof(szBuf), fp) != NULL ) {
		/* 梋暘側嬻敀傪嶍彍 */
		CutSpace(szBuf);
		
		/* 僐儅儞僪柤偵墳偠偰夝愅 */
		if ( strncmp(szBuf, "CRE_TSKSP", 9) == 0 ) {
			int nID;
			nID = AnalizeCommand(pppTaskTable, 5, &szBuf[9]);
			if ( nID != -1 )
				pppTaskTable[nID][5] = malloc(1);	/* 僀儞僠僉 (^^;; */
		}
		else if ( strncmp(szBuf, "CRE_TSK", 7) == 0 )
			AnalizeCommand(pppTaskTable, 5, &szBuf[7]);
		else if ( strncmp(szBuf, "CRE_SPL", 7) == 0 )
			AnalizeCommand(pppSplTable, 3, &szBuf[7]);
		else if ( strncmp(szBuf, "CRE_SEM", 7) == 0 )
			AnalizeCommand(pppSemTable, 4, &szBuf[7]);
		else if ( strncmp(szBuf, "CRE_FLG", 7) == 0 )
			AnalizeCommand(pppFlgTable, 3, &szBuf[7]);
		else if ( strncmp(szBuf, "CRE_MBX", 7) == 0 )
			AnalizeCommand(pppMbxTable, 3, &szBuf[7]);
		else if ( strncmp(szBuf, "CRE_MPF", 7) == 0 )
			AnalizeCommand(pppMpfTable, 4, &szBuf[7]);
		else if ( strncmp(szBuf, "DEF_INT", 7) == 0 )
			AnalizeDefInt(&szBuf[7]);
		else if ( strncmp(szBuf, "INCLUDE_C", 9) == 0 )
			AnalizeIncludeC(&szBuf[9]);
		else if ( strncmp(szBuf, "MAX_TSKPRI", 10) == 0 )
			AnalizeMaxTskPri(&szBuf[10]);
		else if ( strncmp(szBuf, "SYSTEM_STACK", 12) == 0 )
			AnalizeSysStack(&szBuf[12]);
		else if ( strncmp(szBuf, "USE_TIMER", 9) == 0 )
			bUseTimer = TRUE;
		else if ( strncmp(szBuf, "NOUSE_TIMER", 11) == 0 )
			bUseTimer = FALSE;
		else if ( szBuf[0] != ';' && szBuf[0] != '\0' && szBuf[0] != '\n' ) {
			fprintf(stdout, "line(%d): 暥朄僄儔乕偱偡\n", nLine);
			bErr = TRUE;
		}
		nLine++;
	}
	
	fclose(fp);
	
	/* 僼傽僀儖弌椡 */
	Write_Def_ID();
	Write_C_Cfg();
	Write_Asm_Cfg();
	
	/* 儊儌儕奐曻 */
	FreeTable(pppTaskTable);
	FreeTable(pppSemTable);
	FreeTable(pppFlgTable);
	FreeTable(pppMbxTable);
	FreeTable(pppMpfTable);
	if ( pMaxTskPri != NULL )  free(pMaxTskPri);
	for ( i = 0; i < maxInt; i++ )
		if ( ppIntTable[i] != NULL )  free(ppIntTable[i]);
	for ( i = 0; i < MAX_INCLUDE_C; i++ )
		if ( ppIncludeCTable[i] != NULL )  free(ppIncludeCTable[i]);
	
	return bErr;
}



/* ------------------------------------ */
/*         僼傽僀儖弌椡                 */
/* ------------------------------------ */

/* 掕媊僼傽僀儖弌椡 */
void Write_Def_ID(void)
{
	FILE *fp;
	int  i;
	
	/* 僼傽僀儖僆乕僾儞 */
	if ( (fp = fopen(szDefCFile, "w")) == NULL ) {
		fprintf(stderr, "%s 偺嶌惉偵幐攕偟傑偟偨\n", szDefCFile);
		exit(1);
	}
	
	fprintf(fp, "/* HOS-H8 configuration-file to define ID */\n\n");
	fprintf(fp, "#ifndef __HOSCFG__DEFID_H_\n");
	fprintf(fp, "#define __HOSCFG__DEFID_H_\n\n\n");
	
	/* 僞僗僋ID 弌椡 */
	for ( i = 0; i < MAX_ID; i++ ) {
		if ( pppTaskTable[i] != NULL && pppTaskTable[i][0][0] != '\0' ) 
			fprintf(fp, "#define %s\t%d\n", pppTaskTable[i][0], i + 1);
	}
	fprintf(fp, "\n");
	
	/* 僗僞僢僋僾乕儖ID 弌椡 */
	for ( i = 0; i < MAX_ID; i++ ) {
		if ( pppSplTable[i] != NULL && pppSplTable[i][0][0] != '\0' ) 
			fprintf(fp, "#define %s\t%d\n", pppSplTable[i][0], i + 1);
	}
	fprintf(fp, "\n");
	
	/* 僙儅僼僅ID 弌椡 */
	for ( i = 0; i < MAX_ID; i++ ) {
		if ( pppSemTable[i] != NULL && pppSemTable[i][0][0] != '\0' ) 
			fprintf(fp, "#define %s\t%d\n", pppSemTable[i][0], i + 1);
	}
	fprintf(fp, "\n");
	
	/* 僀儀儞僩僼儔僌ID 弌椡 */
	for ( i = 0; i < MAX_ID; i++ ) {
		if ( pppFlgTable[i] != NULL && pppFlgTable[i][0][0] != '\0' ) 
			fprintf(fp, "#define %s\t%d\n", pppFlgTable[i][0], i + 1);
	}
	fprintf(fp, "\n");
	
	/* 儊乕儖儃僢僋僗ID 弌椡 */
	for ( i = 0; i < MAX_ID; i++ ) {
		if ( pppMbxTable[i] != NULL && pppMbxTable[i][0][0] != '\0' ) 
			fprintf(fp, "#define %s\t%d\n", pppMbxTable[i][0], i + 1);
	}
	fprintf(fp, "\n");

	/* 屌掕挿儊儌儕僾乕儖ID 弌椡 */
	for ( i = 0; i < MAX_ID; i++ ) {
		if ( pppMpfTable[i] != NULL && pppMpfTable[i][0][0] != '\0' ) 
			fprintf(fp, "#define %s\t%d\n", pppMpfTable[i][0], i + 1);
	}
	fprintf(fp, "\n");

	fprintf(fp, "\n#endif /* __HOSCFG__DEFID_H_ */\n");
}


/* 僐儞僼傿僊儏儗乕僔儑儞僼傽僀儖俠尵岅晹弌椡 */
void Write_C_Cfg(void)
{
	FILE *fp;
	char *pPri;
	int  nMaxID;
	int  i;
	
	/* 僼傽僀儖僆乕僾儞 */
	if ( (fp = fopen(szCFile, "w")) == NULL ) {
		fprintf(stderr, "%s 偺嶌惉偵幐攕偟傑偟偨\n", szDefCFile);
		exit(1);
	}
	
	/* 僐儊儞僩弌椡 */
	fprintf(fp, "/* HOS-H8梡 僐儞僼傿僊儏儗乕僔儑儞僼傽僀儖俠尵岅晹 */\n\n");
	
	/* 僀儞僋儖乕僪僼傽僀儖弌椡 */
	fprintf(fp, "#include \"itron.h\"\n");
	fprintf(fp, "#include \"%s\"\n", szDefCFile);
	for ( i = 0; i < nIncCCount; i++ )
		fprintf(fp, "#include %s\n", ppIncludeCTable[i]);
	
	
	/* ------- 僔僗僥儉僗僞僢僋傾僪儗僗 -------- */
	fprintf(fp, "\n\n/* 僔僗僥儉僗僞僢僋弶婜傾僪儗僗 */\n");
	fprintf(fp, "void *const __system_stack = (void *)(0x%05lx);\n",
					SystemStack);
	
	
	
	/* ------- 儗僨傿乕僉儏乕弌椡 -------- */
	fprintf(fp, "\n");
	if ( pMaxTskPri == NULL )
		pPri = "8";
	else
		pPri = pMaxTskPri;
	fprintf(fp, "\n\n/* 儗僨傿乕僉儏乕 */\n");
	fprintf(fp, "T_QUE   rdyque[%s];\n", pPri);
	fprintf(fp, "const H rdqcnt = %s;\n", pPri);
	
	
	/* ------- 僗僞僢僋僾乕儖僨乕僞弌椡 -------- */
	fprintf(fp, "\n");
	
	/* 嵟戝僗僞僢僋僾乕儖ID専嶕 */
	nMaxID = 0;
	for ( i = 0; i < MAX_ID; i++ ) {
		if ( pppSplTable[i] != NULL ) {
			nSplCount++;
			nMaxID = i + 1;
		}
	}
	
	if ( nMaxID > 0 ) {
		/* 僗僞僢僋椞堟弌椡 */
		fprintf(fp, "\n\n/* 僗僞僢僋僾乕儖梡僗僞僢僋椞堟 */\n");
		for ( i = 0; i < nMaxID; i++ ) {
			if ( pppSplTable[i] != NULL ) {
				fprintf(fp, "VH StackPool%d[(%s) / 2];\n",
									i + 1, pppSplTable[i][2]);
			}
		}
		
		/* 僗僞僢僋僾乕儖掕媊 */
		fprintf(fp, "\n\n/* 僗僞僢僋僾乕儖搊榐 */\n");
		fprintf(fp, "T_SPCB  spcbtbl[%d];\n", nMaxID);
		fprintf(fp, "const T_SPCBS spcbstbl[%d] = {\n", nMaxID);
		for ( i = 0; i < nMaxID; i++ ) {
			if ( pppSplTable[i] == NULL )
				fprintf(fp, "\t\t{}");
			else
				fprintf(fp, "\t\t{StackPool%d, %s, (%s) / 2}",
							i + 1,
							pppSplTable[i][1],
							pppSplTable[i][2]
						);
			if ( i == nMaxID - 1 )
				fprintf(fp, "\n");
			else
				fprintf(fp, ",\n");
		}
		fprintf(fp, "\t};\n");
	}
	fprintf(fp, "const H  spcbcnt = %d;\t/* 僗僞僢僋僾乕儖悢 */\n", nMaxID);
	
	
	
	/* ------- 僞僗僋僨乕僞弌椡 -------- */
	fprintf(fp, "\n");
	
	/* 嵟戝僞僗僋ID専嶕 */
	nMaxID = 0;
	for ( i = 0; i < MAX_ID; i++ ) {
		if ( pppTaskTable[i] != NULL ) {
			nTaskCount++;
			nMaxID = i + 1;
		}
	}
	
	if ( nMaxID > 0 ) {
		/* 僞僗僋梡僗僞僢僋椞堟弌椡 */
		fprintf(fp, "\n\n/* 僗僞僢僋椞堟 */\n");
		for ( i = 0; i < nMaxID; i++ ) {
			if ( pppTaskTable[i] != NULL && pppTaskTable[i][5] == NULL ) {
				fprintf(fp, "VH Stack%d[(%s) / 2];\n",
								i + 1, pppTaskTable[i][4]);
			}
		}
		
		/* 僞僗僋掕媊 */
		fprintf(fp, "\n/* 僞僗僋搊榐 */\n");
		fprintf(fp, "T_TCB  tcbtbl[%d];\n", nMaxID);
		fprintf(fp, "const T_TCBS tcbstbl[%d] = {\n", nMaxID);
		for ( i = 0; i < nMaxID; i++ ) {
			if ( pppTaskTable[i] == NULL )
				fprintf(fp, "\t\t{}");
			else {
				if ( pppTaskTable[i][5] == NULL ) {
					/* 帺慜偱僗僞僢僋傪帩偮 */
					fprintf(fp, "\t\t"
								"{(VP)%s, %s, %s, &Stack%d[(%s) / 2]}",
								pppTaskTable[i][1],
								pppTaskTable[i][2],
								pppTaskTable[i][3],
								i + 1,
								pppTaskTable[i][4]
							);
				}
				else {
					/* 僗僞僢僋僾乕儖傪巊偆 */
					fprintf(fp, "\t\t"
								"{(VP)%s, %s, %s, (VH*)(((%s) - 1) * 2 + 1)}",
								pppTaskTable[i][1],
								pppTaskTable[i][2],
								pppTaskTable[i][3],
								pppTaskTable[i][4]
							);
				}
			}
			if ( i == nMaxID - 1 )
				fprintf(fp, "\n");
			else
				fprintf(fp, ",\n");
		}
		fprintf(fp, "\t};\n");
	}
	fprintf(fp, "const H  tcbcnt = %d;\t/* 僞僗僋悢 */\n", nMaxID);
	
	
	/* ------- 僙儅僼僅僨乕僞弌椡 -------- */
	fprintf(fp, "\n");
	
	/* 嵟戝僙儅僼僅ID専嶕 */
	nMaxID = 0;
	for ( i = 0; i < MAX_ID; i++ ) {
		if ( pppSemTable[i] != NULL ) {
			nSemCount++;
			nMaxID = i + 1;
		}
	}
	
	if ( nMaxID > 0 ) {
		/* 僙儅僼僅掕媊 */
		fprintf(fp, "\n\n/* 僙儅僼僅搊榐 */\n");
		fprintf(fp, "T_SCB  scbtbl[%d];\n", nMaxID);
		fprintf(fp, "const T_SCBS scbstbl[%d] = {\n", nMaxID);
		for ( i = 0; i < nMaxID; i++ ) {
			if ( pppSemTable[i] == NULL )
				fprintf(fp, "\t\t{}");
			else
				fprintf(fp, "\t\t{%s, %s, %s}",
							pppSemTable[i][1],
							pppSemTable[i][2],
							pppSemTable[i][3]
						);
			if ( i == nMaxID - 1 )
				fprintf(fp, "\n");
			else
				fprintf(fp, ",\n");
		}
		fprintf(fp, "\t};\n");
	}
	fprintf(fp, "const H  scbcnt = %d;\t/* 僙儅僼僅悢 */\n", nMaxID);


	/* ------- 僼儔僌僨乕僞弌椡 -------- */
	fprintf(fp, "\n");
	
	/* 嵟戝僀儀儞僩僼儔僌ID専嶕 */
	nMaxID = 0;
	for ( i = 0; i < MAX_ID; i++ ) {
		if ( pppFlgTable[i] != NULL ) {
			nFlgCount++;
			nMaxID = i + 1;
		}
	}

	if ( nMaxID > 0 ) {
		/* 僀儀儞僩僼儔僌掕媊 */
		fprintf(fp, "\n\n/* 僀儀儞僩僼儔僌搊榐 */\n");
		fprintf(fp, "T_FCB  fcbtbl[%d];\n", nMaxID);
		fprintf(fp, "const T_FCBS fcbstbl[%d] = {\n", nMaxID);
		for ( i = 0; i < nMaxID; i++ ) {
			if ( pppFlgTable[i] == NULL )
				fprintf(fp, "\t\t{}");
			else
				fprintf(fp, "\t\t{%s, %s}",
							pppFlgTable[i][1],
							pppFlgTable[i][2]);
			if ( i == nMaxID - 1 )
				fprintf(fp, "\n");
			else
				fprintf(fp, ",\n");
		}
		fprintf(fp, "\t};\n");
	}
	fprintf(fp, "const H  fcbcnt = %d;\t/* 僀儀儞僩僼儔僌悢 */\n", nMaxID);

	/* ------- 儊僀儖儃僢僋僗僨乕僞弌椡 -------- */
	fprintf(fp, "\n");

	/* 嵟戝儊乕儖儃僢僋僗ID専嶕 */
	nMaxID = 0;
	for ( i = 0; i < MAX_ID; i++ ) {
		if ( pppMbxTable[i] != NULL ) {
			nMbxCount++;
			nMaxID = i + 1;
		}
	}
	
	if ( nMaxID > 0 ) {
		fprintf(fp, "\n\n/* 儊乕儖儃僢僋僗梡僶僢僼傽 */\n");
		for ( i = 0; i < nMaxID; i++ )
			fprintf(fp, "VP msgbuf%d[%s];\n", i, pppMbxTable[i][2]);
		
		/* 儊乕儖儃僢僋僗掕媊 */
		fprintf(fp, "\n/* 儊乕儖儃僢僋僗搊榐 */\n");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -