zoukankan      html  css  js  c++  java
  • 关于重定向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,完美!!!  希望这篇博客对你有所帮助

    不被重重的击倒,又怎么能华丽的站起。   加油吧
  • 相关阅读:
    深入理解jsonp跨域请求原理
    vue项目性能优化总结
    脱离Office约束,C#结合Mpxj组件完美解析MSProject(.mpp)文件
    将list转换成DataTable
    json时间格式化
    C# DES加密解密
    asp.net mvc ViewBag常用操作
    Jquery ajax与asp.net MVC前后端各种交互
    存储过程实现树形目录外联其他表实现每个节点的统计
    CSS自定义右键菜单
  • 原文地址:https://www.cnblogs.com/kevin-nancy/p/10585199.html
Copyright © 2011-2022 走看看