在嵌入式開發中,常常會通過串列埠列印一些資訊到pc終端,這就需要實現自己的printf函式,下面介紹列印函式print的實現。
print.h
[cpp]view plain
copy
print?
#ifndef __print_h_
#define __print_h_
void
print(
char
* fmt, ...);
void
printch(
char
ch);
void
printdec(
intdec);
void
printflt(
double
flt);
void
printbin(
intbin);
void
printhex(
inthex);
void
printstr(
char
* str);
#define console_print(ch) putchar(ch)
#endif /*#ifndef __print_h_*/
上面print函式為全功能的列印函式,可以實現類似printf的功能,printch實現單個字元的列印、printdec實現十進位制格式數字的列印,printflt實現浮點數的列印,printbin實現二進位制格式數字的列印,printhex實現十六進製制格式數字的列印,printstr實現字串的列印,console_print函式是串列埠單字元列印函式的巨集定義,這裡暫時用pc終端單字元列印函式putchar代替。在實際嵌入式環境下,替換成串列埠單字元列印函式即可。
print.c
[cpp]view plain
copy
print?
#include
#include
#include "print.h"
intmain(
void
)
void
print(
char
* fmt, ...)
pfmt++;
} else
} va_end(vp);
} void
printch(
char
ch)
void
printdec(
intdec)
printdec(dec/10);
printch( (char
)(dec%10 +
'0'));
} void
printflt(
double
flt)
void
printstr(
char
* str)
} void
printbin(
intbin)
printbin(bin/2);
printch( (char
)(bin%2 +
'0'));
} void
printhex(
inthex)
printhex(hex/16);
if(hex < 10)
else
} 編譯執行結果如下:
[cpp]view plain
copy
print?
print: c
print: 1234567
print: 1234567.123456
print: string test
print: 0b1001000110100010111111111
print: 0xabcdef
print: %
如上所示,print函式實現了類似printf的功能。
[cpp]view plain
copy
print?
自己實現printf
原理不是很難網上有很多,自己搜一下就明白了。void printlog const char fmt,看到上面 太簡單了,也許有人會說,這有什麼用?在我看來最大的用處在於寫日誌,如果我們把 稍稍改下就可以把螢幕上的輸出一起輸出到檔案乙份 在初始化處把全域性變數日誌檔案開啟就像這樣 plogfile ...
實現自己的變參函式printf
在c c 標準庫中,變參函式很特別。printf,fprintf,sprintf等都屬於變參函式。如果自己要寫類似的引數可變的函式,通常會用到下面三個函式 include void va start va list ap,last type va arg va list ap,type void v...
自己實現乙個printf函式
在arm嵌入式開發環境中,串列埠一般使用arm pl011的uart實現,uart的實現原理就是實現了乙個8bits寬度,32深度的fifo,不停的往螢幕輸出乙個byte,乙個byte。這個就是硬體的實現,那麼軟體是怎麼實現列印 高階程式語言中定義的char,short,int,long,float...