關於重定向printf出錯 Error[Pe020]: identifier "FILE" is undefined 解決方案


 IAR或者Keil用到重定向printf函數出現的錯誤解決方案

轉發請注明出處,謝謝

原創:李剴

 

或者 

https://blog.csdn.net/Kevin_8_Lee/article/details/88764700

 

上面第二個是我的在另一個博客平台上的

 

 

OK,進入正題

我所使用的是STM32F407開發板,在IAR下寫程序,Keil遇到這個問題也可以這么解決

 1、我所使用的重定向printf函數如下

在uart.c里面添加一下程序

 1 #ifdef __GNUC__
 2     #define PUTCHAR_PROTOTYPE int _io_putchar(int ch)
 3 #else 
 4     #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
 5 #endif /* __GNUC__*/
 6 
 7 /******************************************************************
 8     *@brief  Retargets the C library printf  function to the USART.
 9     *@param  None 
10     *@retval None
11 ******************************************************************/
12 PUTCHAR_PROTOTYPE
13 {
14     HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
15     return ch;
16 }

 

然后編譯

出現的警告及錯誤如下圖所示

identifier "FILE" is undefined

我google了一下 :
  很多網友的提供的解決方案幾乎一樣, 即 在IAR中
  Options -> General Options -> Library Configuration
  在這里面把Library的選成Full      見下圖

 

 還有的說是添加什么宏之類的,我覺得太麻煩了,並沒有那樣去做。

 而且,向上面那樣做之后, 還不夠,我試了之后還是同樣的錯誤

既然都不可以,那怎么做呢?

 

請思考一下,printf是哪里的函數?
沒錯, 是C里面的函數。既然根源清楚了,那我們就可以大膽的嘗試一下下面的方法了。

在uart.c文件里面包含一個stdio.h的頭文件

 

 然后編譯uart.c文件

 

 

 舒服~~~~~~

2、但是,還沒完

 當在主函數里面編譯的時候出現了以下警告

 

作為一個追求完美的人,這怎么能行

同理,  在前面包含stdio.h這個頭就圓滿了

 

 

0 error(s),0 warning(s)

ok,完美!!!  希望這篇博客對你有所幫助

不被重重的擊倒,又怎么能華麗的站起。 加油吧

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM