日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 基礎(chǔ)知識(shí)科普站
[導(dǎo)讀]利用C庫(kù)函數(shù)printf,實(shí)際上就是一個(gè)int型變量封裝在結(jié)構(gòu)體中。

1利用C庫(kù)函數(shù)printf。

步驟:

1)首先需要包含頭文件stdio.h。

2)然后定義文件句柄。實(shí)際上就是一個(gè)int型變量封裝在結(jié)構(gòu)體中。

struct__FILE{inthandle;};

3)定義FILE__stdout;FILE即為_(kāi)_FILE,通過(guò)stdio.h宏定義。

4)實(shí)現(xiàn)函數(shù)

intfputc(intch,FILE*f){chartempch=ch;sendchar(tempch);returnch;}

5)實(shí)現(xiàn)函數(shù)

intsendchar(intch){

if(ch=='n'){

while(!(console_tty_f->lsr&UART_LSR_THRE));

console_tty_f->dll_fifo=0x0d;

}

while(!(console_tty_f->lsr&UART_LSR_THRE));

return(console_tty_f->dll_fifo=ch);

}

由以上代碼可見(jiàn),printf為阻塞函數(shù),采用等待發(fā)完的辦法,可能影響其它進(jìn)程。如果編寫(xiě)非等待的打印函數(shù),可以采用第二種方法。

2利用C庫(kù)函數(shù)vsprintf和變參函數(shù)。

ARM中打印函數(shù)print 的幾種實(shí)現(xiàn)方法

步驟:

1)包含頭文件stdio.h和stdarg.h。

2)編寫(xiě)變參數(shù)函數(shù)。

voidprint(constchar*lpszFormat,...){charszBuffer[PRINT_BUF]={0};

va_listargs;intret;va_start(args,lpszFormat);

ret=vsprintf(szBuffer,lpszFormat,args);

va_end(args);

uart[console_uart].put_2_ring(console_uart,szBuffer,ret);

}

由此可見(jiàn),利用庫(kù)函數(shù)vsprintf格式化輸入字符串,然后在空閑時(shí)發(fā)送。

3自行完成參數(shù)提取,格式化。

步驟:

1)定義可變參數(shù)列表typedefchar*va_list;

2)定義地址對(duì)齊宏

#define_AUPBND(sizeof(int)-1)

#define_ADNBND(sizeof(int)-1)

#define_bnd(X,bnd)(((sizeof(X))+(bnd))&(~(bnd)))

3)定義可變長(zhǎng)參數(shù)提取宏

#defineva_start(ap,A)(void)((ap)=(((char*)&(A))+(_bnd(A,_AUPBND))))

#defineva_arg(ap,T)(*(T*)(((ap)+=(_bnd(T,_AUPBND)))-(_bnd(T,_ADNBND)))

#defineva_end(ap)(void)0

4)編寫(xiě)變參數(shù)函數(shù)。如方法2第2步。

5)實(shí)現(xiàn)vsprintf函數(shù)。實(shí)現(xiàn)源碼較多,如linux等。只是沒(méi)有對(duì)浮點(diǎn)的支持。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉