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

📄 m16cvec.cpp

📁 符合日本著名的ITRON规范的开源操作系统。 TOPPERS/JSP内核就是TOPPERS工程按μITRON4.0研发的第一个 软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/* *  TOPPERS/JSP Kernel *      Toyohashi Open Platform for Embedded Real-Time Systems/ *      Just Standard Profile Kernel *  *  Copyright (C) 2000-2002 by Embedded and Real-Time Systems Laboratory *                              Toyohashi Univ. of Technology, JAPAN *  Copyright (C) 2003-2004 by Ryosuke Takeuchi *              Platform Development Center RIOCH COMPANY,LTD. JAPAN *  *  惧淡螟侯涪荚は·Free Software Foundation によって给山されている  *  GNU General Public License の Version 2 に淡揭されている掘凤か·笆 *  布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ *  アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· *  网脱と钙ぶ∷することを痰浸で钓满するˉ *  (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 *      涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 *      スコ〖ド面に崔まれていることˉ *  (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ *      ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 *      に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· *      この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *  (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 *      み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ *    (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 *        涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *    (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する *        ことˉ *  (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 *      巢からも·惧淡螟侯涪荚を倘勒することˉ *  *  塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· *  塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ *  ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい *  かなる禄巢に簇しても·その勒扦を砷わないˉ *  *  @(#) $Id: m16cvec.cpp,v 1.3 2004/09/03 17:33:49 honda Exp $ */// m16cvec.cpp : コンソ〖ル アプリケ〖ション脱のエントリ ポイントの年盗////------------------------------------------------------------------------------// 恃构旺悟//version yyyy/mm/dd 车妥//---------- -------------------------------------------------------------------// 01.00   2004/01/02 介惹// 01.01   2004/08/06 FIX VECTOR が盖年猛で铜ったのをパラメタにて恃构材墙とした//                    EXCINIB の芹误が0の眷圭の啼玛饯赖。                      //                    M30262F8FGの栏喇箕、充り哈みベクタが1乖驴い稍恶圭饯赖。//                    M30620FCAFPのJSP1.3脱ベクタ栏喇コ〖ドを掘凤コンパイル步。//----------------------------------------------------------------------------- #include "stdafx.h"#include <stdlib.h>#include <string.h>#define	MAX_INCLUDE		8#define	MAX_INT			64#define	MAX_EXC			9#define	MAX_VEC			MAX_INT#define	BUF_SIZE		512#define	STR_SIZE		128#define	INT_STATE		0#define	EXC_STATE		1#define	NORMAL_STATE	2struct VEC {	int		no;	char	no_name[STR_SIZE];	char	no_label[STR_SIZE];};static char const version[] = "01.01";static char const default_input_file[] = "kernel_cfg.i";static char const default_output_file[] = "m16cvec.inc";static char const default_unused_int[] = "unused_interrupt";static char const in_portid[] = "serial_in_portid";static char const out_portid[] = "serial_out_portid";static char const in_handler[] = "serial_in_handler_xyzx";static char const out_handler[] = "serial_out_handler_xyzx";static char const comment[] = ";************************************************";static char const int_vec[] = ";* interrupt vectors                            *";static char const exc_vec[] = ";* exception vectors                            *";static char const func01[] = "\t.section bss_NE,DATA,ALIGN";static char const func02[] = "\t.blkw\t1";static char const func03[] = "\t.section program, code, align";static char const lf[] = "\n";static char const default_fvector[] = "0fffdch";static int  board_mode = 0;static char input_file[STR_SIZE];static char output_file[STR_SIZE];static char include_file[MAX_INCLUDE][STR_SIZE];static int  num_include = 0;static int  num_vec[2] = {0, 0};static int  max_int    = 47; static int  num_nodec = 0;static int  vec_state = NORMAL_STATE;static struct VEC vec_table[2][MAX_VEC];static char unused_vec[2][STR_SIZE];static void set_M30620FCAFP(FILE* pfo, int no, int m);static void set_M30262F8FG(FILE* pfo, int no, int m);static void set_global(FILE* pfo, char const * t);static void set_comment(FILE* pfo, char const * t);static void set_org(FILE* pfo, char const * t);static void set_vector(FILE* pfo, int kind, int no);static void set_vector2(FILE* pfo, int kind, int no);static bool test_string(char** s, char const * t);static bool skip_space(char** s);static bool skip_char(char** s, char const c);static char fvector[STR_SIZE];int main(int argc, char* argv[]){	FILE* pfi;	FILE* pfo;	FILE* pfw;	char  buf[BUF_SIZE];	struct VEC *v;	int   i, j, k;	bool  cnv, dec;	char* s;	char* p;	char* q;	char  c;	strcpy(input_file, default_input_file);	strcpy(output_file, default_output_file);	strcpy(unused_vec[0], default_unused_int);	strcpy(unused_vec[1], default_unused_int);	strcpy(fvector,default_fvector);	for(i = 1 ; i < argc ; i++){		s = argv[i];		if(*s++ == '-'){			c = *s++;			skip_space(&s);			switch(c){			case 'I':		// インクル〖ドファイルの肋年			case 'i':				if(num_include < MAX_INCLUDE){					strcpy(include_file[num_include], s);					num_include++;				}				break;			case 'F':		// フィックスベクタの年盗			case 'f':				strcpy(fvector, s);				break;			case 'O':		// アウトプットファイルの肋年			case 'o':				strcpy(output_file, s);				break;			case 'R':		// インプットファイルの肋年			case 'r':				strcpy(input_file, s);				break;			case 'M':		// ボ〖ドモ〖ド			case 'm':				board_mode = atoi(s);				break;			default:				printf("m16cvec -R<input_file> -O<output_file> -I<include_file> -M<mode> -F<fixvector>\n");				break;			}		}	}	printf("version      = %s\n", version);	printf("input file   = %s\n", input_file);	printf("output file  = %s\n", output_file);	printf("Fix Vector   = %s\n", fvector);	printf("board mode   = %d : ", board_mode);	if(board_mode == 1)		printf("M30262F8FG(OAKS16 MINI)\n");	else		printf("M30620FCAFP(OAKS16)\n");	if((pfi = fopen(input_file, "r")) == NULL){		fprintf(stderr, "can't open input file !");		exit(1);	}	if((pfo = fopen(output_file, "w")) == NULL){		fclose(pfi);		fprintf(stderr, "can't open output file !");		exit(1);	}	for(i = 0 ; i < num_include ; i++){		printf("include file = %s\n", include_file[i]);	}	for(;;){		if((fgets(buf, BUF_SIZE, pfi)) == NULL)			break;		s = buf;		switch(vec_state){		case INT_STATE:		case EXC_STATE:			if(test_string(&s, ";"))				vec_state = NORMAL_STATE;			else if(test_string(&s, "{")){				v = &vec_table[vec_state][num_vec[vec_state]];				p = &v->no_name[0];				if(skip_space(&s))					continue;				dec = true;				while(*s != ','){					if(*s == 0)						continue;					if(*s == '(' || *s == ')' || *s <= ' '){						s++;						continue;					}					if(*s < '0' || *s > '9')						dec = false;					*p++ = *s++;				}				s++;				*p++ = 0;				if(dec)					v->no = atoi(v->no_name);				else{					v->no = -1;					num_nodec++;				}				p = &v->no_label[0];				if(skip_char(&s, ','))					continue;				test_string(&s, "INT_ENTRY(");				test_string(&s, "EXC_ENTRY(");				test_string(&s, "CFG_INT_ENTRY(");				test_string(&s, "CFG_EXC_ENTRY(");				test_string(&s, "(FP)");				if(skip_space(&s))					continue;				while(*s != ')' && *s != ',' && *s > ' '){					*p++ = *s++;				}				*p++ = 0;				num_vec[vec_state]++;			}			else				continue;			break;		default:			if(!test_string(&s, "const"))				continue;			if(test_string(&s, "INHINIB"))				vec_state = INT_STATE;			else if(test_string(&s, "EXCINIB"))				vec_state = EXC_STATE;			break;		}	}	do{		cnv = false;		for(i = 0 ; i < num_include ; i++){			if((pfw = fopen(include_file[i], "r")) != NULL){				for(;;){					if((fgets(buf, BUF_SIZE, pfw)) == NULL)						break;					s = buf;					if(!test_string(&s, "#define"))						continue;					if(skip_space(&s))						continue;					for(k = 0 ; k < 2 ; k++){						for(j = 0 ; j < num_vec[k] ; j++){							v = &vec_table[k][j];							if(v->no < 0){								p = s;								dec = true;								if(test_string(&p, v->no_name)){									q = &v->no_name[0];									if(!skip_space(&p)){										while(*p > ' '){											if(*p == '(' || *p == ')'){												p++;												continue;											}											if(*p < '0' || *p > '9')												dec = false;											*q++ = *p++;										}									}									*q++ = 0;								}								else									dec = false;								if(dec){									v->no = atoi(v->no_name);									num_nodec--;								}							}						}					}				}				fclose(pfw);			}			else				printf("open error %s !!\n", include_file[i]);		}	}while(cnv);	for(i = 0 ; i < num_vec[EXC_STATE] ; i++){		v = &vec_table[EXC_STATE][i];		if(v->no >= 32 && v->no < MAX_INT){			vec_table[INT_STATE][num_vec[INT_STATE]] = vec_table[EXC_STATE][i];			num_vec[INT_STATE]++;			for(j = i ; j < (num_vec[EXC_STATE]-1) ; j++)				vec_table[EXC_STATE][j] = vec_table[EXC_STATE][j+1];			num_vec[EXC_STATE]--;		}	}	for(j = 0 ; j < num_vec[INT_STATE] ; j++){		v = &vec_table[INT_STATE][j];		if(v->no >= MAX_INT)			strcpy(unused_vec[INT_STATE], v->no_label);		else if(max_int < v->no)			max_int = v->no;		printf("int %d:%d,%s,%s\n", j, v->no, v->no_name, v->no_label);	}	for(j = 0 ; j < num_vec[EXC_STATE] ; j++){		v = &vec_table[EXC_STATE][j];		if((v->no >= MAX_EXC && v->no < 32) || v->no >= MAX_INT)			strcpy(unused_vec[EXC_STATE], v->no_label);		printf("exc %d:%d,%s,%s\n", j, v->no, v->no_name, v->no_label);	}	if(num_nodec > 0)		printf("%dのエクセプション戎规を泼年できません—\n", num_nodec);	else{		fputs(lf, pfo);		for(i = 0 ; i < 2 ; i++){			for(j = 0 ; j < num_vec[i] ; j++)				set_global(pfo, vec_table[i][j].no_label);		}		if(!strcmp(default_unused_int, unused_vec[0]))			set_global(pfo, unused_vec[0]);		else if(!strcmp(default_unused_int, unused_vec[1]))			set_global(pfo, unused_vec[1]);		switch(board_mode){		case 1:				// M30262F8FG(OAKS16 MINI)			set_M30262F8FG(pfo, board_mode, max_int);			break;		default:			// M30620FCAFP(OAKS16)			set_M30620FCAFP(pfo, board_mode, max_int);			break;		}		set_comment(pfo, exc_vec);		fputs("\t.section\tfvector", pfo);

⌨️ 快捷键说明

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