C語言庫函數中有一批“標准輸入輸出函數”,它是以標准的輸入輸出設備(一般為終端設備)為輸入輸出對象的,其中用得比較多的是printf和scanf函數了。
在嵌入式設備中加入C語言的標准輸入輸出函數,對調試是很有幫助, 這樣就可以通過串口來顯示結果。根據Keil的幫助文檔,雖然printf和scanf函數的高層部分和所使用的目標硬件沒有關系,但是底層部分(物理層)卻與所使用的硬件密切相關,因此在使用這兩個函數之前,需先將與底層相關的程序寫好(一般是串口的初始化函數),放到合適的地方。
以LM4F120 Cortex-M4目標芯片為例,來說明printf, scanf函數的使用方法。
Step 1. 編寫以下兩個輸入輸出函數
1 int fputc(int ch, FILE *f) 2 { 3 UARTCharPut(UART1_BASE, ch); 4 } 5 6 int fgetc(FILE *f) 7 { 8 return UARTCharGet(UART1_BASE); 9 }
上面代碼中L3是LM4F120 通過串口發送一個字符串的函數,L8是通過串口接收一個字符串的函數(該函數會一直等待直到接收到數據)
Step 2. 按照下圖配置工程
Step 3. 添加頭文件<stdio.h>后即可使用
1 int 2 main(void) 3 { 4 char ubuf[20]; 5 6 /* 設置系統時鍾為 50MHz */ 7 SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN); 8 9 /* 初始化串口 */ 10 InitConsole(); 11 12 /* 輸入一個字符串 */ 13 scanf("%s", ubuf); 14 15 /× 顯示輸入的字符串 */ 16 printf("%s", ubuf); 17 18 while(1); 19 }