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重映射的时候用到的。

  • 10
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

试探你的温柔耶

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值