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

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

?? uart.c

?? MIPS架構下串口API函數集合,包括getcharputcharscanfprintf
?? C
字號:
/*********************************************************************************************************//*/*  程序名稱: uart_cmd.c /*/*  程序用途:Pmon平臺下串口格式輸入,格式輸出命令函數/*  編寫日期:2005.11.05/*  編寫人員:凱達電子南京研發部    董亮   /*  聯系方式:support@kd-soc.com/*  程序原理:輸出命令通過物理地址調出串口線路狀態寄存器(line status register)中第五位狀態并進行比較操作/*           輸入命令通過物理地址調出串口線路狀態寄存器(line status register)中第二位狀態并進行比較操作          ***********************************************************************************************************//*調用常規函數庫,使用va_arg,va_start,va_end等函數*/#include<stdarg.h>#include<string.h>#include<ctype.h>#include<stdlib.h>#include<rtc.h>/*調用uart口初始化文件*/#include<uart.h>/****************************************************************************************************//*  uart初始化/****************************************************************************************************/void uart_Init(void){	        r16550LCTRL=0x00;              r16550INTEN=0x00;              r16550IIFIFO=0x07;     //00000111        r16550LCTRL=0x80;      //10000000	r16550DLL = 0x18;      //00011000  300 baud [5 MHz crystal:(5M/2)/(6*16*BAUD_DATA)=300 baud]	r16550DLM = 0x00;      // set divisor 12 	r16550LCTRL = 0x03;    //00000011 (8-bit data;1 stop bit;no parity)     		r16550MCTRL = 0x01|0x02|8; //00111011        /* Clear interrupt bits */	r16550INTEN = 0x00;}	/****************************************************************************************************//* test_sendc函數:單個字符輸出*****************************************************************************************************/void test_sendchar(char tdata){	//該判斷語句也可寫為:while((r16550LSTAT & 0x20));	while(!(r16550LSTAT & (0x01<<5))); //等待THR寄存器為空	r16550RXTX = tdata;	}/***************************************************************************************************/ /*  函數名稱: test_sendch/*      /*  函數目的:如字符串結束,則回車換行,符合書寫規范****************************************************************************************************/void test_SendCh(char tdata){        if(tdata == '\n')        {                test_sendchar('\r');        }        test_sendchar(tdata);}/***************************************************************************************************/ /*  函數名稱: test_printf/*      /*  函數目的:利用指針實現簡單的字符串輸出/*     ****************************************************************************************************/void test_printf(char *pbstring){        while(*pbstring)        test_SendCh(*pbstring++);}/***************************************************************************************************/ /*  結構體名稱: printnum/*      /*  結構體目的:作為數字輸出專用,在printf函數中調用,用于輸出各種格式數字/*      ****************************************************************************************************/static unsigned charprintnum(long unsigned int num,int base,int sign,int maxwidth,int lead)                     //結構體定義{	long unsigned int n;	int count;	char toprint[1024];		if((sign==1)&&((long)num<0)){		test_SendCh('-');		num=-num;		if (maxwidth)maxwidth--;	}	count=0;	while((n=num/base)>0){		toprint[count++]=(num -(n*base));		num=n;	}	toprint[count++]=num;	if (maxwidth && count<maxwidth){		for(n=maxwidth-count;n;n--)		test_SendCh(lead);	}	for(n=0;n<count;n++){		test_SendCh("0123456789ABCDEF"[(int)(toprint[count-(n+1)])]);	}}/*******************************************************************************************************/ /*  函數名稱: printf/*      /*  函數目的:實現字符串內格式打印功能/*      說明:test_sendchar函數已經實現單個字符輸出的操作,此函數只需要調用常規函數庫中va_start與va_end/*            函數來測量字符串長度并做相應的頭尾標記,利用循環依次判斷每一個字符并輸出,參考consol中/*            _doprntx函數原理編寫,但將數字格式輸出另做結構體調用,避免冗長的代碼造成后期修改麻煩。/*/*********************************************************************************************************/void printf(char *fmt,...){	va_list ap;	char c,*str;	int lflag,base,sign,width,lead;	va_start(ap,fmt);	for(;*fmt!='\0';fmt++)                                                           //循環開始	{					if(*fmt=='%')                                                            //判斷是否為格式輸出規則		{			lflag=0;base=0;sign=0;width=0;lead=' ';                          //初始化相關參數			fmt++;			if(*fmt=='0')			{				lead='0';				fmt++;			}			while(*fmt>='0'&&*fmt<='9')			{				width*=10;				width+=(*fmt-'0');				fmt++;			}			if ((c=*fmt)=='1') 			{				lflag=1;				c=*++fmt;			}			switch(c)                                                      //不同格式輸出定義 			{				case'b':case'B':base=2;sign=0;break;                   //二進制格式輸出				case'o':case'O':base=8;sign=0;break;                   //八進制格式輸出				case'd':case'D':base=10;sign=1;break;                  //十進制格式輸出				case'u':case'U':base=10;sign=0;break;                  //無符號十進制格式輸出				case'x':case'X':base=16;sign=0;break;                  //十六進制格式輸出				case's':				case'S':for(str=va_arg(ap,char*);*str;str++)           //字符串輸出					test_SendCh(*str);					break;				case'c':				case'C':test_SendCh(va_arg(ap,char));                  //單個字符格式					break;				default:test_SendCh(c);					break;			}						if(base)                                                       //各種格式數字輸出			printnum(lflag ? va_arg(ap,long int):(long int)va_arg(ap,int),				base,sign,width,lead);		}		else  		test_SendCh(*fmt);	}	va_end(ap);}		/***************************************************************************************************//* test_getch函數:單個字符輸入函數   *****************************************************************************************************/char test_getchar(void){        while(!(r16550LSTAT & (0x01<<0)));        return r16550RXTX;}/***************************************************************************************************/ /*  函數名稱: test_getstring/*      /*  函數目的:使用指針實現簡單的字符串輸入****************************************************************************************************/void test_getstring(char *pbstring){        char *pbstring2=pbstring;        char bC;        while((bC=test_getchar())!='\r')              {                if(bC=='\b')                                                               //退格處理                {                        if((int)pbstring2<(int)pbstring){test_printf("\b \b");pbstring--;}                }                else                {                        *pbstring++=bC;test_sendchar(bC);                }        }        *pbstring='\0';                                                test_sendchar('\n');}/***************************************************************************************************/ /*  結構體名稱: GetIntNum/*      /*  結構體目的:作為數字讀入專用,在scanf函數中調用,用于讀入不同格式數字/*      ****************************************************************************************************//*for getintnum--atoi*/int atoi(char *s){  return (int) strtol (s, (char **) 0, 10);}/*strtol函數中使用到的toupper函數*/int toupper(int c){	if (islower(c))		return c - ('a' - 'A'); else		return c;} /*strtol函數中使用到的定義 */#define	 max_allowable(A) 	 (MAXINT(sizeof(int))/A - 1)#define MAXINT(w)	(\		((w) == sizeof(signed char))  ? 0x7F :\		((w) == sizeof(short int)) ? 0x7FFF :\		((w) == sizeof(int)) ? 0x7FFFFFFF : 0\		        )#define	ERANGE		34			        int errno;		       /*atoi函數下使用到的strtol函數*/ //自定義判斷函數,用來判斷輸入字符,只允許數字輸入int pan(unsigned char c){   if (c > '9' || c< '0') return(0);	}long strtol(	const 	char 	*str, 		char 	**endptr, 		int 	base){	long  	i = 0;	int   	s = 1;	int 	c;		// 空格 	while((!isspace(*str))) {		str++;	                       }		// sign flag check 	if (*str == '+') str++;	else if (*str == '-') {		s = -1;		str++;			      }	if (*str == '0') {		if (toupper(*++str) == 'X')	base = 16,str++;		else if (base == 0)		base = 8;		}	if (base == 0) base = 10;		if (base <= 10)	// str to number 		for (; pan(*str); str++) {			if (i < max_allowable(base))				i = i * base + (*str - '0');			else {				i = MAXINT(sizeof(int));				errno = ERANGE;			}		}	else if (base > 10) {		for (; (c = *str); str++) {			if (pan(c))			 	c = c - '0';			else {				c = toupper(c);				if (c >= 'A' && c < ('A' - 10 + base))				 	c = c - 'A' + 10;				else				 	break;			     }			if (i < max_allowable(base))			 	i = i * base + c;			else {			 	i = MAXINT(sizeof(int));				errno = ERANGE;			    }		}	}	 	else	 	return 0;		// negative base is not allowed 		if (endptr) *endptr = (char *) str;	if (s == -1)		i = -i;	return i;}/*getintnum函數中使用到的strlen函數*/int strlen(const char *s){	int	l = 0;	while (*s++) l++;	return l;}/**************************************************************************************************/#define __isalpha(c) (c >'9')#define __isupper(c) !(c & 0x20)int getintnum(void){        char abStr[30];        char *pbstring=abStr;        int wbase=10;        int wminus=0;        int wlastindex;        int wresult=0;        int wi;                test_getstring(pbstring);                if(pbstring[0]=='-'){wminus=1;pbstring++;}                                       //負數                if(pbstring[0]=='0' && (pbstring[1]=='x' || pbstring[1]=='X'))                   //輸入格式為0x十六進制        {                wbase=16;                pbstring+=2;        }                wlastindex=strlen(pbstring)-1;        if( pbstring[wlastindex]=='h' || pbstring[wlastindex]=='H' )                     //輸入格式為h 處理方式        {                wbase=16;                pbstring[wlastindex]=0;                wlastindex--;        }        if(wbase==10)                                                                    //十進制        {                wresult=atoi(pbstring);                                                  //atoi函數轉換成整型量,相關函數上                 wresult=wminus ? (-1*wresult):wresult;        }        else        {                for(wi=0; wi<=wlastindex; wi++)                                         {                        if(__isalpha(pbstring[wi]))                        {                                if(__isupper(pbstring[wi]))                                        wresult=(wresult<<4)+pbstring[wi]-'A'+10;                                else                                        wresult=(wresult<<4)+pbstring[wi]-'a'+10;                        }                        else                        {                                wresult=(wresult<<4)+pbstring[wi]-'0';                        }                }                wresult=wminus ? (-1*wresult):wresult;        }        return wresult;}/********************************************************************************************************//*  函數名稱: test_Scanf/*      /*  函數目的:實現字符串內格式讀入功能/*      說明:test_getchar函數已經實現單個字符輸出的操作,此函數只需要調用常規函數庫中va_start與va_end/*            函數來測量字符串長度并做相應的頭尾標記,利用循環依次判斷每一個字符并讀入/********************************************************************************************************/void test_scanf(char *fmt,...){                                 va_list ap;        char cchar;        int *pwint;        char *pbchar;                va_start(ap, fmt);        while((cchar=*fmt++) != '\0')        {                if(cchar != '%')continue;                                                    //格式輸入                switch(*fmt)                {                        case 's':                                                            //字符串輸入                        case 'S':                                pbchar = va_arg(ap, char *);                                test_getstring(pbchar);                                break;                        case 'i':                                                            //數值輸入                        case 'I':                                pwint = va_arg(ap, int *);                                *pwint =getintnum();                                break;                         case 'c':                                                            //單個字符輸入                        case 'C':                                pbchar = va_arg(ap, char *);                                *pbchar =test_getchar();                                break;                }        }        va_end(ap);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美女屁股眼交3| 从欧美一区二区三区| 国产91对白在线观看九色| 色94色欧美sute亚洲13| 久久久噜噜噜久久中文字幕色伊伊| 亚洲视频每日更新| 国产高清精品在线| 正在播放亚洲一区| 亚洲狠狠爱一区二区三区| 大白屁股一区二区视频| 久久久久久麻豆| 久久精品国产精品亚洲精品| 欧美综合一区二区| 中文字幕在线播放不卡一区| 国产成人av福利| 日韩精品一区在线| 亚洲成人自拍偷拍| 精品视频在线免费| 一区二区成人在线观看| av午夜一区麻豆| 欧美—级在线免费片| 国产精品系列在线观看| 97久久精品人人爽人人爽蜜臀| 91.com视频| 日韩av中文在线观看| 欧美日韩国产区一| 性感美女极品91精品| 欧洲在线/亚洲| 亚洲一区二区欧美日韩| 欧美三级电影在线观看| 亚洲成国产人片在线观看| 精品1区2区3区| 日韩不卡一二三区| 日韩美一区二区三区| 久久er精品视频| www日韩大片| 国产一二精品视频| 国产欧美va欧美不卡在线| 成人网男人的天堂| 亚洲欧美激情视频在线观看一区二区三区| av一本久道久久综合久久鬼色| 中文字幕中文字幕在线一区| 色综合久久综合| 天堂资源在线中文精品| 精品人伦一区二区色婷婷| 国产精品一线二线三线| 亚洲色欲色欲www| 欧美午夜精品久久久久久超碰| 香港成人在线视频| 国产夜色精品一区二区av| 风间由美一区二区三区在线观看 | 成人在线一区二区三区| 久久久91精品国产一区二区精品| 成人精品视频网站| 一区二区三区在线观看动漫| 欧美理论电影在线| 国产伦精一区二区三区| 亚洲天堂免费看| 欧美军同video69gay| 韩国精品在线观看| 亚洲欧美精品午睡沙发| 日韩欧美一区二区三区在线| 国产成人午夜电影网| 亚洲国产日韩在线一区模特| 欧美大片在线观看| 色女孩综合影院| 激情小说欧美图片| 亚洲精品ww久久久久久p站| 欧美一区二区三区啪啪| 白白色亚洲国产精品| 日韩成人免费看| 亚洲少妇30p| 久久夜色精品国产欧美乱极品| 色婷婷久久久综合中文字幕 | xf在线a精品一区二区视频网站| 成人va在线观看| 老司机午夜精品99久久| 亚洲靠逼com| 国产午夜亚洲精品不卡| 欧美精品亚洲二区| av网站免费线看精品| 韩国欧美国产一区| 丝袜亚洲另类欧美综合| 亚洲免费在线看| 久久精品一级爱片| 日韩亚洲欧美中文三级| 欧美亚洲图片小说| 91论坛在线播放| 国产suv精品一区二区6| 日本 国产 欧美色综合| 亚洲一区二区三区四区在线| 国产精品黄色在线观看| 精品福利av导航| 欧美一级久久久| 欧美人妇做爰xxxⅹ性高电影| 91丨porny丨蝌蚪视频| 国产99久久久精品| 国产风韵犹存在线视精品| 久久国产综合精品| 青青草精品视频| 亚洲va欧美va国产va天堂影院| 亚洲免费观看高清完整版在线 | 日韩一区二区三区四区五区六区| 在线观看日韩av先锋影音电影院| av亚洲精华国产精华| 成人性视频网站| 懂色av一区二区三区免费观看| 国产一区二区看久久| 激情六月婷婷久久| 国产一区二区日韩精品| 国内外成人在线| 激情六月婷婷久久| 国产成人亚洲精品狼色在线| 国产精品亚洲专一区二区三区| 美女网站视频久久| 国内精品不卡在线| 国产一区二区三区四区五区入口 | 亚洲日本一区二区| 亚洲人吸女人奶水| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品美女一区二区在线观看| 国产精品久久久久一区| 亚洲欧美激情插| 午夜a成v人精品| 黄色日韩网站视频| 国产精品一区二区在线看| www.日本不卡| 在线观看一区二区视频| 91精品国产综合久久福利软件| 26uuu欧美| 自拍av一区二区三区| 亚洲国产综合视频在线观看| 日韩国产欧美三级| 国产精品一二三四五| 色综合久久六月婷婷中文字幕| 欧美色中文字幕| 精品精品国产高清一毛片一天堂| 国产女同性恋一区二区| 亚洲精品视频一区二区| 午夜精品成人在线视频| 狠狠色丁香婷综合久久| 99久久久无码国产精品| 69精品人人人人| 国产精品欧美久久久久无广告 | 亚洲免费在线观看| 日韩国产欧美三级| 不卡欧美aaaaa| 911精品产国品一二三产区| 国产嫩草影院久久久久| 亚洲成人av福利| 懂色av一区二区三区免费观看 | 欧美系列一区二区| 久久久亚洲国产美女国产盗摄| 亚洲免费观看视频| 久久99精品国产| 欧美中文字幕一区二区三区| 精品久久久久久最新网址| 亚洲婷婷在线视频| 国产一区二区视频在线| 欧美午夜精品久久久久久孕妇| 国产亚洲一区二区三区| 丝袜美腿高跟呻吟高潮一区| av不卡在线播放| 日韩精品一区二区三区老鸭窝| 一区2区3区在线看| 成人看片黄a免费看在线| 欧美成va人片在线观看| 亚洲一线二线三线久久久| 国产成人啪午夜精品网站男同| 884aa四虎影成人精品一区| 中文字幕一区二区不卡| 国产一区二区三区免费观看| 欧美日韩国产综合草草| 国产精品第四页| 国产成人久久精品77777最新版本| 欧美日韩成人在线| 亚洲综合一区二区三区| 国产99久久精品| 精品久久人人做人人爽| 青青草成人在线观看| 欧美日韩一区二区三区四区| 亚洲视频在线观看三级| 成人午夜精品在线| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩精品久久久久久| 欧美日韩欧美一区二区| 一二三四社区欧美黄| 91免费在线看| 亚洲男女一区二区三区| 99久久99久久精品免费看蜜桃 | 精品国产91亚洲一区二区三区婷婷| 亚洲国产欧美另类丝袜| 色狠狠综合天天综合综合| 一区精品在线播放| 99久久精品一区| 1024成人网| 91福利社在线观看| 亚洲美女视频一区| 欧美日韩中文字幕精品| 日韩电影在线观看网站|