关于重定向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,完美!!!  希望这篇博客对你有所帮助

不被重重的击倒,又怎么能华丽的站起。   加油吧

 

转载于:https://www.cnblogs.com/kevin-nancy/p/10585199.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值