fputc函数重写实现printf重定向
一,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重定向相关推荐
- stm32中如何进行printf重定向用于串口调试输出
1 在main中包含stdio.h 文件 2 Target选项框里选Use MicroLib 选项 3 在main中添加UART1_Configuration()初始化的代码 Uart1初始化, vo ...
- 重定向fputc函数实现printf串口发送
对fputs函数的理解 (重定向:重写库函数,对原函数进行覆盖,编译时优先调用重定向的用户函数) fputc()默认是把字符输出到调试器控制窗口,要把数据通过USART输出到串口助手,需对基于fput ...
- C语言的重定向fputc函数
重定向 即自己重写C的库函数 提示 链接器检查到用户编写了与C库函数相同名字的函数时,优先调用用户编写函数,这样就可实现重定向 重定向printf()函数 需重写fputc()这个c标准库函数(pri ...
- STM32 - Printf重定向使用微库、不使用微库(Keil) (转载)
Stm32芯片调试中经常用到串口来打印一些数据,因此如果能使用类似windows的Console中的printf就很完美了~ 方法1--使用微库: 1.使用微库(平台式keil-MDK),点击&quo ...
- Stm32 - Printf重定向(不)使用微库(Keil MDK)
#define DEBUG_USART USART1 stm32芯片调试中经常用到串口来打印一些数据,因此如果能使用类似windows的Console中的printf就很完美了~ 方法1--使用微库: ...
- keil5 stm32f03c8t6 printf重定向到串口和TFT 1.44 LCD屏
效果 keil5工程设置,这一步很重要: 在任意的源文件里重写int fputc(int ch, FILE* f)函数 代码: print.h #ifndef __PRINT_H__ #define ...
- STC15单片机-串口打印printf重定向
printf函数重定向为往串口打印信息 在UART.h.UART1.h和UART.c文件的内容编写好后,在main函数中实现通过串口发送一串字符串和一个不断加1的变量 方法一: 使用sprintf函数 ...
- c语言输入输出重定向到串口,关于printf重定向到串口的问题分析 - 全文
关于printf重定向到串口的问题 简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用semihosTIng(半主机模式), 标准库函数的默认输出设备是显示器,要实现在串口 ...
- STM32 printf 重定向 usart3
jiause 问题描述: 今天调试串口,首先用串口1 printf打印输出,调试成功,在串口1成功的基础上,准备改用串口3 printf结果一直不成功. 串口没有一点反应. 解决过程: ...
最新文章
- 给不爱洗手找个理由——皮肤共生菌可以促进伤口愈合
- mysql 5.6 cmake 安装_Cmake MySQL5.6 编译安装
- Markdown 语法说明
- 摘要:ASP.NET的路由
- find server/ -type d|xargs -I {} echo mkdir /root/{}
- 深度学习--简述卷积层如何检测物体边缘原理
- java基础加强_补充笔记
- 报表被老板吐槽又多又丑?因为你没有掌握这些动态报表的技巧
- HDU 2643 Rank:第二类Stirling数
- Spring Boot:开发常用的热部署方式汇总
- 谁人来帮库克卖“苹果”?
- 藏红花怎么推广?百度下拉词|抖音下拉词框|信息流推广-三剑合璧
- Atitit uke各大事业部规划 约365个事业部
- 谷歌-安卓系统使用必读,什么是root, Recovery, Radio, APP TO SD, Rom
- Cookie和Session
- Convolutional Neural Networks for Sentence Classification(卷积神经网络句子分类)
- Vue中directives用法--自定义指令控制按钮权限
- 高版本CAD如何降低版本?来看这种降低版本方法
- 区块链量化投资系列课程(3)
- android百度地图设置logo,缩放按钮,指南针的位置