重定向是指使用者可以自己重寫c語言的庫函式,當聯結器檢查到使用者編寫了與c語言庫函式相同名字的函式時,優先採用使用者編寫的函式,這樣就可以對庫函式進行修改了。
若要printf( )函式工作,需要把printf( )函式重新定向到串列埠函式。
為了實現重定向 printf( ) 函式,需要重寫fputc( )這個c標準庫函式,因為printf()在c標準庫函式中實質是乙個巨集,最終是呼叫了fputc( )函式。
fputc(int ch, file *f)函式可在main.c檔案中編寫,如下:
int fputc( int ch , file *f)
usart_senddata( usart1 , (u8)ch ) ;
while(usart_getflagstatus(usart1 , usart_flag_tc) = = reset)
return ch;
使用printf()之前需要完成以下配置:
1、在main.c檔案包含「stdio.h」
2、在main.c檔案中加入 fputc( int ch , file *f) 函式**
3、在工程屬性對話方塊中選擇「target」選項卡,在「code generation」 區域中選中「use microlib」 選項
Linux基礎入門 串列埠重定向
3.解決方案 有些程序出現使用printf 無法列印資訊到串列埠 預設linux 設定了列印緩衝功能,當列印緩衝區未滿情況下,不列印。如果需要列印,增加fflush stdout 語句或者以 n結尾,用於重新整理緩衝區,即可列印。在系統或者程序中,關閉了printf功能,將輸入輸出重定向到 dev ...
Keil重定向printf到串列埠UART輸出
下面是我搜尋到的可以借鑑的討論 我的評述 評述 在乙個晶元系統裡,uart的驅動是廠商自己寫好的,那他們是怎麼關聯printf到uart的呢?有人說,printf最終是呼叫了putchar,我搜尋了原始碼,沒有這個函式,估計是開發工具,像keilc u3,裡面已經整合了putchar。於是我奇怪,這...
STM32 HAL庫 printf 串列埠重定向
在對printf重定向之前,一定不要有printf,否則程式馬上跑飛。在main函式之前加上如下 對串列埠進行重定向,當然,串列埠一定要初始化之後再用printf,否則程式雖然不會飛,但是printf也不會有結果 ifdef gnuc define putchar prototype int io ...