找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7084|回复: 1
打印 上一主题 下一主题
收起左侧

Error[Pe020]: identifier "FILE" is undefined 解决方案

[复制链接]
跳转到指定楼层
楼主
IAR或者Keil用到重定向printf函数出现的错误解决方案



转发请注明出处,谢谢
原创:李剀
  1. https://www.cnblogs.com/kevin-nancy/articles/10585199.html
复制代码

或者
  1. https://blog.csdn.net/Kevin_8_Lee/article/details/88764700
复制代码
上面两个是我在CSDN和博客园的博客地址,现在发布至51hei论坛,希望帮助到大家





下面进入正题

我所使用的是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.         *@brief  Retargets the C library printf  function to the USART.
  8.         *@param  None
  9.         *@retval None
  10. ******************************************************************/
  11. PUTCHAR_PROTOTYPE
  12. {
  13.         HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
  14.         return ch;
  15. }
复制代码

然后编译
出现的警告及错误如下图所示



我google了一下 :
很多网友的提供的解决方案几乎一样, 即 在IAR中
Options -> General Options -> Library Configuration
在这里面把Library的选成Full      见下图






还有的说是添加什么宏之类的,我觉得太麻烦了,并没有那样去做。

而且,向上面那样做之后, 还不够,我试了之后还是同样的错误


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

请思考一下,printf是哪里的函数?
没错, 是C里面的函数。既然根源清楚了,那我们就可以大胆的尝试一下下面的方法了。


在uart.c文件里面包含一个stdio.h的头文件




然后编译uart.c文件


舒服~~~~~~


2、但是,还没完

当在主函数里面编译的时候出现了以下警告




作为一个追求完美的人,这怎么能行

同理,  在前面包含stdio.h这个头就完美了



  1. 0 error(s),0 warning(s)
复制代码
ok,完美!!!  希望这篇博客对你有所帮助


  1. 不被重重的击倒,又怎么能华丽的站起。   加油吧
复制代码




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:675030 发表于 2020-12-7 09:57 | 只看该作者
这个方法 完美的解决了我的问题 谢谢分享您的经典方法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表