关于重定向printf出错 Error[Pe020]: identifier "FILE" is undefined 解决方案

STM32的点点滴滴 专栏收录该内容
9 篇文章 1 订阅

IAR或者Keil用到重定向printf函数出现的错误解决方案

我所使用的是STM32F407开发板,在IAR下写程序,Keil遇到这个问题也可以这么解决

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

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

#ifdef __GNUC__
	#define PUTCHAR_PROTOTYPE int _io_putchar(int ch)
#else 
	#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__*/

/******************************************************************
	*@brief  Retargets the C library printf  function to the USART.
	*@param  None 
	*@retval None
******************************************************************/
PUTCHAR_PROTOTYPE
{
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
	return ch;
}

然后编译

出现的警告及错误如下图所示

错误信息

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

**不被重重的击倒,又怎么能华丽的站起。   加油吧!**
©️2022 CSDN 皮肤主题:像素格子 设计师:CSDN官方博客 返回首页

打赏作者

Kevin_8_Lee

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值