亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? picddxhi-tech.c

?? Proteus_里調試PIC單片機的.ddx翻譯程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
  說明:
    用HI-TECH 的 PIC C 編譯器生成的目標文件可以打開編譯選項Generate assembler listings,使得輸出文件包括了*.HEX 文件和*.LST 文件. 其中*.HEX 文件用來在Proteus 里當作機器碼執行. 而調試時需要*.LST 文件. 可是PICC 生成的*.LST 文件不能被Proteus 識別. 所以需要用PICddxHI-TECH.exe 將*.LST 翻譯成Proteus 能識別的*.SDI 文件.

*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

//全局常量
//#define	_PUTINFO

//數據結構
typedef struct tagSYMBOITEM{  //符號表項結構
	char name[128];
	long address;
} SYMBOITEM;

typedef struct tagASSIGNEDITEM{  //符號置換項
	char symbo[128];
	char variable[128];
} ASSIGNEDITEM;

typedef struct tagPARRAY PARRAY;

//全局變量
FILE *lstfile;  //Input stream of file.
FILE *sdifile;  //Output stream of file.
PARRAY gSymboTable;  //符號表
PARRAY gAssignedTable;  //符號置換表
HANDLE Heap1;

//初始化指針數組
#define	SYM_GRAIN	32  //指針數組分配粒度
typedef struct tagPARRAY{  //指針數組結構
	void **p;  //指針數組首指針
	long max;  //指針數組元素容量
	long cnt;  //指針數組元素數
} PARRAY;
int PArrayInit(PARRAY *pPArray)
{
	pPArray->max =SYM_GRAIN;
	pPArray->p =HeapAlloc(Heap1,0,sizeof(void *)*pPArray->max);
	if(!pPArray->p){
		fprintf(stderr, "Can't alloc memory.");
		return 0;
	}
	pPArray->cnt =0;
	return 1;
}

//向指針數組增加一個元素
int PArrayAdd(PARRAY *pPArray, void *p)
{
	if(pPArray->cnt >=pPArray->max){
		//若需要更多元素則修改指針數組空間
		pPArray->max +=SYM_GRAIN;
		pPArray->p =
			HeapReAlloc(Heap1, 0, pPArray->p, sizeof(void *)*pPArray->max);
		if(!pPArray->p) return 0;
	}
	pPArray->p[pPArray->cnt] =p;
	pPArray->cnt++;
	return 1;
}

//回收元素空間
//僅對指向元素執行HeapFree操作,若元素數據域包括其他動態分配空間需另行處理
int PArrayClear(PARRAY *pPArray)
{
	unsigned long i;

	for(i =0; i <pPArray->cnt; i++){
		HeapFree(Heap1, 0, pPArray->p[i]);
	}
	pPArray->cnt =0;
	pPArray->max =SYM_GRAIN;
		pPArray->p =
			HeapReAlloc(Heap1, 0, pPArray->p, sizeof(void *)*pPArray->max);
	return 1;
}

void Usage(char *programName)
{
	fprintf(stderr,"\
PIC Debug Data Extractin for HI-TECH PIC C compiler.\n\
\n\
Useage: PICddxHT lst1 lst2 lst3 ... \n\
");	/* Modify here to add your usage message when the program is
	 * called without arguments */
}

/* returns the index of the first argument that is not an option; i.e.
   does not start with a dash or a slash
*/
int HandleOptions(int argc,char *argv[])
{
	int i,firstnonoption=0;

	for (i=1; i< argc;i++) {
		if (argv[i][0] == '/' || argv[i][0] == '-') {
			switch (argv[i][1]) {
				/* An argument -? means help is requested */
				case '?':
					Usage(argv[0]);
					break;
				case 'h':
				case 'H':
					if (!stricmp(argv[i]+1,"help")) {
						Usage(argv[0]);
						break;
					}
					/* If the option -h means anything else
					 * in your application add code here
					 * Note: this falls through to the default
					 * to print an "unknow option" message
					*/
				/* add your option switches here */
				default:
					fprintf(stderr,"unknown option %s\n",argv[i]);
					break;
			}
		}
		else {
			firstnonoption = i;
			break;
		}
	}
	return firstnonoption;
}

//從文本文件里得到一行數據
/*
	buffer		保存從文件里讀到的數據,不小于1024字節
	inflie		文件流指針
	返回讀到的字符數,若沒讀到數據則返回0
*/
int fgetline(FILE *infile, char *buffer)
{
	char *r;

   	r = fgets(buffer, 1024, infile);
   	if(r == NULL){
   		buffer[0] =0;  //清除緩沖區串
   		return 0;  //文件結束返回0
   	}
	else return strlen(buffer);
}

//判斷字符串是不是一個16進制數(大寫)。返回1表示是16進制串,0則不是。
int IsHex(char *p)
{
	int i;

	for(i =0; i <strlen(p); i++){
		if(p[i] !=0x20) break;
	}
	if(i >=strlen(p)) return 0;
	for(; i <strlen(p); i++){
		if(!((p[i] >='0' && p[i] <='9')||
			(p[i] >='A' && p[i] <='F'))) return 0;
	}
	return 1;
}


//判斷字符串是不是一個10進制數。返回1表示是10進制串,0則不是。
int IsDec(char *p)
{
	int i;

	for(i =0; i <strlen(p); i++){
		if(p[i] !=0x20) break;
	}
	if(i >=strlen(p)) return 0;
	for(; i <strlen(p); i++){
		if(!(p[i] >='0' && p[i] <='9')) return 0;
	}
	return 1;
}

/****分析一行文本****/
/*
返回值代表此行文本格式,可能得值如下:
	0       無效
	1       指令,文本包括:行號,地址,機器碼,指令
	2       跳轉標號,文本包括:行號,地址,標識符
	3       陳述,文本包括:行號,陳述
	4       接上一行,文本包括:起始空格,文本
	5       說明,文本包括:無起始空格的說明
	6		equ定義,文本包括:行號,地址,equ定義
	7		FNSIZE定義,文本包括:行號,FNSIZE定義

輸入參數:
	str     被分析的文本行
輸出參數:
	material    分析結果。
				這是一個MATERIAL數據結構,其中包括了:
				行號,地址,機器碼,指令(或陳述及說明)
說明:此函數用if語句實現二叉樹選擇
*/
typedef struct tagMATERIAL{
	long	LineNumber;	//行號
	long	Address;	//地址
	char	Code[64];	//機器碼
	char	Text[256];	//指令(或陳述及說明)
} MATERIAL;
long AnalyseLine(char *str, MATERIAL *material)
{
	const char scmp1[] ="FNSIZE";
	char *p;
	char s1[1024];
	int a;

	a=strlen(str);
	if(strlen(str)==0) return 0;
	strcpy(s1, str);
	p = strtok(s1, " \t\n");
	if(!p) return 0;
	if(IsDec(p)){  //檢查有無行號(首段字符是不是數字)
		material->LineNumber =atol(p);
		p = strtok(NULL, " \t\n");
		if(!p) return 0;
		if(!IsHex(p)){  //檢查是不是陳述(無地址)
			p[strlen(p)] ='\t';
			strcpy(material->Text, p);
			if(!strncmp(material->Text, scmp1, strlen(scmp1))) return 7;  //是否是FNSIZE陳述
			else return 3;
		}else{
			material->Address =strtol(p, NULL, 16);
			if(material->Address ==0){  //檢查是不是equ定義
				p = strtok(NULL, " \t\n");
				if(!p) return 0;
				p[strlen(p)] ='\t';
				strcpy(material->Text, p);
				return 6;
			}
			p = strtok(NULL, " \t\n");
			if(!p) return 0;
			if(IsHex(p)){  //檢查是不是指令
				strcpy(material->Code, p);
				strcat(material->Code, " ");
				while(1){  //檢查接著有沒有多個機器碼
					p = strtok(NULL, " \t\n");
					if(!p) return 0;
					if(!IsHex(p)) break;
					strcat(material->Code, p);
					strcat(material->Code, " ");
				}
				p[strlen(p)] ='\t';
				strcpy(material->Text, "    ");
				strcat(material->Text, p);
				return 1;
			}else{  //跳轉標號
				p[strlen(p)] =' ';
				strcpy(material->Text, p);
				return 2;
			}
		}
	}else{
		if(p -s1 >=33 && p[0]!=' '){  //檢查是不是接上一行
			p[strlen(p)] =' ';
			strcpy(material->Text, p);
			return 4;
		}
		else{
			p[strlen(p)] =' ';
			strcpy(material->Text, p);
			return 5;  //是說明
		}
	}
}

//獲得.LST文件的起始地址
long fGetFirstAddress(FILE *infile, char *buffer)
{
	long n;
	MATERIAL material;

	while(!feof(infile)){
		fgetline(infile, buffer);
		n =AnalyseLine(buffer, &material);
		if( n ==1) return material.Address;
	}
	return -1;
}

//獲得.LST文件的符號表
/*
infile			輸入文件流
spSymboTable	符號表指針數組結構指針
返回1表示得到符號表,0表示沒得到符號表
*/
int fGetSymboTable(FILE *infile, PARRAY *SymboTable)
{
	const char scmp[] ={"Symbol Table"};
	char buf[1024];
	int rt;
	char *sp;
	int i;
	SYMBOITEM *p;
	int symf;  //符號表開始標志

	fseek(infile, 0, SEEK_SET);
	i =0;
	//尋找符號表,符號表以"Symbol Table"開始
	while(!feof(infile)){
		rt =fgetline(infile, buf);
		if(!strnicmp(buf, scmp, strlen(scmp))){
			i =1;  //置符號表有效標志
			break;
		}
	}
	symf =0;
	if(i){
		i =0;  //i的作用改為SymboTable->p[]下標
		while(!feof(infile)){
			rt =fgetline(infile, buf);
			sp =strtok(buf, " \t\n");
			if(symf)  //避開符號表開始的幾行空白
				if(!sp) return 1;  //符號表以空白行結束
			do{  //行內符號檢查
				if(sp){
					symf =1;  //置符號表開始標志
					//增加一個元素
					p =HeapAlloc(Heap1,0,sizeof(SYMBOITEM));  //分配保存符號表項的空間
					i++;
					strcpy(p->name, sp);
					sp =strtok(NULL, " \t\n");
					p->address =strtol(sp, NULL, 16);
					if(!PArrayAdd(SymboTable, p)){
						fprintf(stderr, "Can't alloc memory.");
						exit(2);
					}
				}
				sp =strtok(NULL, " \t\n");
			}while(sp);
		}
		return 1;
	}
	return 0;
}

//輸出符號表到顯示設備上
int PutSymboTable(PARRAY *SymboTable)
{
	const char sout[] ="%s    %04lX\n";
	long i;
	SYMBOITEM **p;

	p =SymboTable->p;
	for(i =0; i <SymboTable->cnt; i++){
		fprintf(stderr, sout, p[i]->name, p[i]->address);
	}
	return 0;
}

//輸出置換表到顯示設備上
int PutAssignedTable(PARRAY *Table)
{
	const char sout[] ="%s    %s\n";
	long i;
	ASSIGNEDITEM **p;

	p =Table->p;
	for(i =0; i <Table->cnt; i++){
		fprintf(stderr, sout, p[i]->variable, p[i]->symbo);
	}
	return 0;
}

//分析一個陳述文本
/*返回值表示陳述包括的注釋類型:
	0		未知注釋
	1		普通注釋
	2		line注釋
	3		assigned注釋
	4		stored注釋
*/
int AnalyseComment(char *str)
{
	char *bp;

	if(str[0] ==';'){  //判斷是不是一個注釋陳述(以';'開頭)
		bp =strstr(str, " assigned to ");
		if(bp) return 3;
		bp =strstr(str, " stored from ");
		if(bp) return 4;
		bp =strstr(str, "line\t");
		if(bp) return 2;
		return 1;
	}
	return 0;
}

//翻譯一個assigned注釋到ASSIGNEDITEM數據結構
int TranslateAssignedToItem(char *instr, PARRAY *table, ASSIGNEDITEM *item)
{
	const char scmp[] =" assigned to ";
	char *p, *p1;
	char *buf;
	long i;
	SYMBOITEM *symp;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产传媒一区在线| 国产91精品欧美| 欧美激情一区二区三区四区| 欧美在线免费视屏| 国产夫妻精品视频| 奇米888四色在线精品| 欧美激情一区三区| 日韩一区二区三| 欧美性一二三区| 成人精品在线视频观看| 久久99精品久久久久久动态图| 伊人色综合久久天天人手人婷| 久久婷婷国产综合国色天香| 欧美艳星brazzers| 99久久伊人网影院| 国产盗摄视频一区二区三区| 美女尤物国产一区| 亚洲va国产va欧美va观看| 国产精品久久久久久亚洲毛片 | 性感美女久久精品| 中文字幕中文字幕中文字幕亚洲无线| 日韩一本二本av| 欧美日韩国产另类不卡| 91一区一区三区| aaa国产一区| 成人深夜在线观看| 国产成人免费高清| 国产成人免费xxxxxxxx| 国产一区福利在线| 韩国v欧美v亚洲v日本v| 久久激五月天综合精品| 日韩高清在线电影| 丝袜美腿亚洲色图| 午夜亚洲国产au精品一区二区| 一区二区欧美视频| 亚洲一区二区免费视频| 亚洲黄色在线视频| 亚洲国产一区二区三区青草影视| 亚洲视频中文字幕| 亚洲免费av在线| 亚洲精品国产品国语在线app| 综合久久久久综合| 日韩女优电影在线观看| 国产精品欧美一级免费| 国产欧美一区二区在线| 久久精品人人爽人人爽| 久久久精品欧美丰满| 2019国产精品| 久久久久久久久久久久久久久99 | 精品影院一区二区久久久| 日本91福利区| 久久er精品视频| 国产美女在线精品| 成人涩涩免费视频| 一本大道av伊人久久综合| 色爱区综合激月婷婷| 亚洲成av人片在线观看| 精品国产人成亚洲区| 亚洲免费成人av| 亚洲午夜久久久| 亚洲国产视频一区二区| 亚洲一区电影777| 午夜电影网亚洲视频| 一区二区三区四区在线免费观看| 亚洲欧洲日韩综合一区二区| 亚洲va国产va欧美va观看| 亚洲少妇30p| 老司机一区二区| 中文字幕综合网| 亚洲妇女屁股眼交7| 久久激情五月激情| 成人小视频免费在线观看| 91丨porny丨户外露出| 欧美美女一区二区三区| 日韩欧美aaaaaa| 成人欧美一区二区三区| 亚洲成av人片在www色猫咪| 国产真实乱子伦精品视频| 暴力调教一区二区三区| 欧美日本国产一区| 中文字幕国产一区| 婷婷亚洲久悠悠色悠在线播放| 国产精品99久久久久久有的能看| av影院午夜一区| 9191精品国产综合久久久久久 | 99re亚洲国产精品| 欧美日韩成人在线| 日本一区二区在线不卡| 日韩二区三区四区| 成人18视频日本| 日韩一区二区三区免费看| 欧美极品少妇xxxxⅹ高跟鞋| 视频一区在线视频| 成人丝袜高跟foot| 精品免费视频一区二区| 亚洲麻豆国产自偷在线| 久久99最新地址| 欧美日韩视频在线一区二区| 国产午夜精品久久久久久免费视 | 成人午夜激情片| 欧美福利视频导航| 国产精品久久久久天堂| 精彩视频一区二区三区| 欧美亚洲国产bt| 久久精品水蜜桃av综合天堂| 日韩精品视频网站| 日本精品一级二级| 久久久久久久久伊人| 男女男精品网站| 欧美性受xxxx| 国产精品女上位| 国内久久婷婷综合| 91.xcao| 亚洲欧美一区二区三区极速播放| 国产精品综合在线视频| 日韩欧美激情四射| 三级精品在线观看| 色偷偷久久一区二区三区| 国产精品视频第一区| 国产一区二区免费看| 精品久久久久久久久久久久久久久久久| 一区二区三区欧美亚洲| av资源站一区| 中文字幕综合网| 91啦中文在线观看| 亚洲欧美中日韩| 不卡一区二区在线| 国产精品毛片高清在线完整版| 国产成人精品三级| 久久亚洲一级片| 国产一区999| 久久久99久久| 国产99久久久国产精品| 久久精品视频免费| 国产一区二区三区高清播放| 久久伊人蜜桃av一区二区| 久久aⅴ国产欧美74aaa| 久久久综合九色合综国产精品| 久久97超碰色| 久久综合狠狠综合久久综合88| 极品尤物av久久免费看| 久久综合国产精品| 成人av在线观| 伊人性伊人情综合网| 欧美日韩精品电影| 免费人成网站在线观看欧美高清| 精品欧美一区二区在线观看| 国产精品一二三区在线| 国产精品第四页| 在线看国产一区二区| 五月天精品一区二区三区| 欧美不卡一二三| 国产福利一区二区三区| 亚洲日本在线视频观看| 欧美三级电影在线看| 日韩电影在线看| 久久亚洲精品小早川怜子| av福利精品导航| 亚洲综合色丁香婷婷六月图片| 欧美日韩性生活| 激情六月婷婷综合| 中文字幕成人网| 日本久久一区二区三区| 日韩av一二三| 国产调教视频一区| 91福利精品视频| 精品一区二区三区日韩| 国产精品成人免费| 欧美男男青年gay1069videost| 韩国精品久久久| 亚洲人成7777| 欧美成人女星排名| 94-欧美-setu| 麻豆精品视频在线观看| 国产精品福利一区| 正在播放亚洲一区| 成人网男人的天堂| 日韩成人一区二区三区在线观看| 国产亚洲精品bt天堂精选| 在线欧美日韩精品| 国产精品一二三四| 午夜不卡av在线| 1024精品合集| 久久先锋影音av鲁色资源| 欧美在线不卡一区| 国产精品911| 男男成人高潮片免费网站| 亚洲色图19p| 久久久不卡网国产精品一区| 欧美吻胸吃奶大尺度电影 | 日韩成人dvd| **欧美大码日韩| 日韩精品资源二区在线| 97久久精品人人澡人人爽| 男女视频一区二区| 亚洲国产日韩av| 国产精品久久久久永久免费观看 | 精品免费视频一区二区| 欧美色综合久久| 成人美女在线观看|