一,printf重定向原理

1,自己重写C的库函数

链接器检查到用户编写了与C库函数相同名字的函数时,优先调用用户编写函数,这样就可实现重定向

2,重定向printf()函数

需重写fputc()这个c标准库函数(printf()在c标准库函数实质是一个宏,实际是调用fputc()函数)

说明

fputc()默认是把字符输出到调试器控制窗口,要把数据通过USART输出到串口助手,需对基于fputc()的printf()系列函数

的输出都重定向到USART端口上去,要想使用USART功能,需重定向fputc()函数

二,操作步骤

1,在工程文件中实现fputc

///重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{/* 发送一个字节数据到串口 */USART_SendData(USART3, (uint8_t) ch);/* 等待发送完毕 */while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);      return (ch);
}///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
int fgetc(FILE *f)
{/* 等待串口输入数据 */while (USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET);return (int)USART_ReceiveData(USART3);
}

2,勾选micro库

在使用串口printf的时候发现的这个疑问,勾与不勾什么区别呢?google一下

作用:

1:使用printf的时候重映像使用。

2:以下的解释貌似很官方:

(1) microlib中是用C写的时候相比,包括ARM编译器工具链的标准C库的基于ARM的嵌入式应用提供了高度优化的库,

(2) microlib中提供所需的许多嵌入式系统显著代码大小的优点。

(3) microlib中和标准C库之间的主要区别是:

(4) microlib中是专为深度嵌入式应用。

(5) microlib中被优化使用比使用ARM标准库更少的代码和数据存储器。

(6) microlib中已经设计没有操作系统的工作,但是这并不妨碍它被与任何操作系统或RTOS如Keil RTX一起使用。

(7) microlib中不包含任何文件I/ O或宽字符支持。

(8) 由于microlib中进行了优化,以尽量减少代码大小,一些功能将会比ARM编译工具提供了标准C库函数更慢执行。

(9) microlib中双方和ARM标准库都包含在Keil MDK-ARM。

从默认的C库之间的差异更详细的信息

在嵌入式应用程序中使用microlib中,选择的μVisionmicrolib中的复选框,然后编译应用程序。

的μVision链接你的程序与microlib中,并迅速和容易降低你的程序的大小。

我是在printf重映射的时候用到的。

fputc函数重写实现printf重定向相关推荐

  1. stm32中如何进行printf重定向用于串口调试输出

    1 在main中包含stdio.h 文件 2 Target选项框里选Use MicroLib 选项 3 在main中添加UART1_Configuration()初始化的代码 Uart1初始化, vo ...

  2. 重定向fputc函数实现printf串口发送

    对fputs函数的理解 (重定向:重写库函数,对原函数进行覆盖,编译时优先调用重定向的用户函数) fputc()默认是把字符输出到调试器控制窗口,要把数据通过USART输出到串口助手,需对基于fput ...

  3. C语言的重定向fputc函数

    重定向 即自己重写C的库函数 提示 链接器检查到用户编写了与C库函数相同名字的函数时,优先调用用户编写函数,这样就可实现重定向 重定向printf()函数 需重写fputc()这个c标准库函数(pri ...

  4. STM32 - Printf重定向使用微库、不使用微库(Keil) (转载)

    Stm32芯片调试中经常用到串口来打印一些数据,因此如果能使用类似windows的Console中的printf就很完美了~ 方法1--使用微库: 1.使用微库(平台式keil-MDK),点击&quo ...

  5. Stm32 - Printf重定向(不)使用微库(Keil MDK)

    #define DEBUG_USART USART1 stm32芯片调试中经常用到串口来打印一些数据,因此如果能使用类似windows的Console中的printf就很完美了~ 方法1--使用微库: ...

  6. keil5 stm32f03c8t6 printf重定向到串口和TFT 1.44 LCD屏

    效果 keil5工程设置,这一步很重要: 在任意的源文件里重写int fputc(int ch, FILE* f)函数 代码: print.h #ifndef __PRINT_H__ #define ...

  7. STC15单片机-串口打印printf重定向

    printf函数重定向为往串口打印信息 在UART.h.UART1.h和UART.c文件的内容编写好后,在main函数中实现通过串口发送一串字符串和一个不断加1的变量 方法一: 使用sprintf函数 ...

  8. c语言输入输出重定向到串口,关于printf重定向到串口的问题分析 - 全文

    关于printf重定向到串口的问题 简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用semihosTIng(半主机模式), 标准库函数的默认输出设备是显示器,要实现在串口 ...

  9. STM32 printf 重定向 usart3

    jiause 问题描述: 今天调试串口,首先用串口1 printf打印输出,调试成功,在串口1成功的基础上,准备改用串口3 printf结果一直不成功. 串口没有一点反应. 解决过程:         ...

最新文章

  1. 给不爱洗手找个理由——皮肤共生菌可以促进伤口愈合
  2. mysql 5.6 cmake 安装_Cmake MySQL5.6 编译安装
  3. Markdown 语法说明
  4. 摘要:ASP.NET的路由
  5. find server/ -type d|xargs -I {} echo mkdir /root/{}
  6. 深度学习--简述卷积层如何检测物体边缘原理
  7. java基础加强_补充笔记
  8. 报表被老板吐槽又多又丑?因为你没有掌握这些动态报表的技巧
  9. HDU 2643 Rank:第二类Stirling数
  10. Spring Boot:开发常用的热部署方式汇总
  11. 谁人来帮库克卖“苹果”?
  12. 藏红花怎么推广?百度下拉词|抖音下拉词框|信息流推广-三剑合璧
  13. Atitit uke各大事业部规划 约365个事业部
  14. 谷歌-安卓系统使用必读,什么是root, Recovery, Radio, APP TO SD, Rom
  15. Cookie和Session
  16. Convolutional Neural Networks for Sentence Classification(卷积神经网络句子分类)
  17. Vue中directives用法--自定义指令控制按钮权限
  18. 高版本CAD如何降低版本?来看这种降低版本方法
  19. 区块链量化投资系列课程(3)
  20. android百度地图设置logo,缩放按钮,指南针的位置

热门文章

  1. BERT所占内存的计算
  2. 梧桐落雨,烟水迷离,莺啼江南岸!
  3. 动态规划求解多段图问题
  4. 简单的python脚本-如何写一个简短(200行)的Python脚本
  5. 风雨哈佛路,我在折戟沉沙的路上浴火重生
  6. 重复读取输入流InputStream
  7. Minimit Anima – 硬件加速的 CSS3 动画插件
  8. 一个很简单的基于栈式过程虚拟机的实现,它运行目标平台【x86】的原生代码。
  9. passwd -l 锁与linux用户属性修改与sbin/nologin区别
  10. matlab toolbox 介绍,Matlab Robotic Toolbox使用简介(1)