硬體平台:lpc1768開發板
軟體平台:keil4.7.4
在vc平台下程式設計時包含stdio.h函式再呼叫printf函式即可將想要列印的內容輸出到控制台上(stdout),但在keil開發環境下並沒有控制台,所以想要呼叫printf函式需要將printf函式的輸出重新定向到uart上,在uart上使用串列埠除錯助手接收列印資訊。
keil中是通過fpuc()和fgetc()兩個函式來建立printf函式和硬體平台之間的鏈結的,所以我們只需要填充這兩個函式就可以實現基本的printf和scanf函式功能。
retartget.c
#include #include #include #pragma import(__use_no_semihosting_swi)
//¸ãîä¼þêçîªáëê¹óãprintfîä¼þºíscanfîä¼þ
extern int sendchar(int ch); /* in serial.c */
extern int getkey(void); /* in serial.c */
extern long timeval; /* in time.c */
struct __file ;
file __stdout;
file __stdin;
int fputc(int ch, file *f)
int fgetc(file *f)
int ferror(file *f)
void _ttywrch(int ch)
void _sys_exit(int return_code)
同時將串列埠的輸出連線到這兩個函式,這裡使用uart0
int sendchar(int ch)
int getkey(void)
至此printf函式和scanf函式基本功能可以使用,在實際除錯過程中將uart0通過串列埠線與電腦的串列埠除錯助手連線即可看見列印資訊。 Keil重定向printf到串列埠UART輸出
下面是我搜尋到的可以借鑑的討論 我的評述 評述 在乙個晶元系統裡,uart的驅動是廠商自己寫好的,那他們是怎麼關聯printf到uart的呢?有人說,printf最終是呼叫了putchar,我搜尋了原始碼,沒有這個函式,估計是開發工具,像keilc u3,裡面已經整合了putchar。於是我奇怪,這...
模擬實現printf函式,完成函式呼叫
通過函式原型可以看出printf函式其實是乙個可變引數函式,在printf函式中只需要知道傳入函式的第乙個引數,就可以根據該引數在棧中的儲存位置獲取後面引數的位置及資訊了。printf函式第乙個引數const cahr format,該字串內包含並確定了後面引數的輸出格式,比如 c d d x 等等...
Keil 函式內聯 inline
內聯函式是指 當編譯器發現某段 在呼叫乙個內聯函式時,它不是去呼叫該函式,而是將該函式的 整段插入到當前位置。這樣做的好處是省去了呼叫的過程,加快程式執行速度,但是因為把內聯函式拷貝了很多份,所以程式大小也變大了。當我們在程式裡呼叫函式時,要花時間執行下面幾個步驟 1.保護現場,就是先將主調函式裡的...