keil中串列埠重定向問題

2021-08-24 20:16:31 字數 638 閱讀 6097

重定向是指使用者可以自己重寫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 ...