Keil 重定向 fputc 函数 以及 printf 函数的代码尺寸测试

article/2025/10/11 17:43:32

本文的开发环境为 Keil + Cortex-M3 内核处理器。

重定向 fputc 函数方法

如果想使用库函数 printf ,必须要将 fputc 重定向到自己的串口上。

术语 重定向 可以理解为用户重写 fputc 函数,在重写的函数体内调用自己硬件的串口发送函数。

在 Keil 环境中,重定向 fputc 函数有两种方法:

  1. 使用微库
    这种方式最简单,直接重写 fputc 函数即可:
int fputc(int ch, FILE *f)
{uart_putc(ch);				// 硬件串口发送函数return ch;
}

说明:使用微库,也就是勾选 Use MicroLib 选项,如下图所示:
在这里插入图片描述

  1. 不使用微库
    这种方式要稍微复杂些。
    首先要告诉编译器不使用半主机,然后再来重写 fputc 函数,此外还要增加附带函数和变量:
/*不使用 MicroLIB,重定向 fputc 函数*/
__asm(".global __use_no_semihosting");FILE __stdout;
FILE __stdin;void _sys_exit(int x)
{x = x;
}int fputc(int ch, FILE *f)
{uart_putc(ch);				// 硬件串口发送函数return ch;
}

说明:如何不使用半主机

  • 对于汇编文件,在文件中添加:IMPORT __use_no_semihosting
  • 对于 C 文件,使用 Arm Compiler 5,在文件中添加:#pragma import(__use_no_semihosting)
  • 对于 C 文件,使用 Arm Compiler 6,在文件中添加:__asm(".global __use_no_semihosting");

注意:同一个工程中,只需在一个文件中添加即可,不用重复添加。

printf 函数的代码尺寸测试

ARM 标准库提供两种打印函数:

  • printf:全功能版本
  • _printf:与 printf 函数相比,不支持浮点数格式化

测试代码尺寸如下表所示:

CodeRORWZI备注
基础版本172435641644
_printf 版本408469641727增加 2700 字节
printf 版本829690841727增加 7124 字节

通过对比可以知道,printf 是一个庞大的函数,其功能也很强大,具体参考这篇文章。






读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
千金难买知识,但可以买好多奶粉


http://chatgpt.dhexx.cn/article/KeSsbe4G.shtml

相关文章

fputc函数

/****************************************功能:写一个字节到文件流中*参数:* c 写入的字符* stream 流指针*返回值:* 成功返回字符* 失败返回EOF或errno*************************************/ int fputc(int c, FILE *stre…

标准c库:fputc,fgetc,feof

1、了解标准c库fopen等用法&#xff08;点击跳转&#xff09; 2、fputc写一个字符到文件 #include <stdio.h>int main() {FILE *fp;fp fopen("./test.txt","w");//int fputc(int c, FILE *stream);fputc(a,fp);fclose(fp);return 0; }3、fputc写一…

文件的输入输出函数

文章目录 前言字符输入输出函数 - fgetc和fputc文本输入输出函数 - fgets和fputs格式化输入输出函数 - fscanf和fprintf二进制输入输出函数 - fread和fwrite 前言 在文件操作函数&#xff08;一&#xff09;中&#xff0c;我们已经学会了怎样正确地打开和关闭一个文件&#xf…

计算机网络 | 传输层的两个重要协议——TCP、UDP

目录 传输层概述 传输层的作用 运输层端口号、复用与分用的概念 发送方的复用和接收方的分用 UDP和TCP的对比 TCP的流量控制 TCP的拥塞控制 TCP的差错控制 UDP的差错控制的和流控 TCP的封装格式 TCP主要特点 TCP的连接 可靠传输的工作原理 TCP连接的三次握手和四次挥…

以太网协议

以太网(Ethernet) 以太网是一种局域网技术,其规定了访问控制方法、传输控制协议、网络拓扑结构、传输速率等,完成数据链路层和物理层的一些内容,它采用一种称作CSMA/CD的媒体接入方法,其意思是带冲突检测的载波侦听多路接入(Carrier Sense, Multiple Access with Collisi…

传输层TCP协议和UDP协议

传输层协议 文章目录 传输层协议传输层&#xff1a;传输层协议&#xff1a;UDP协议&#xff1a;TCP协议&#xff1a;UDP协议和TCP协议的比较&#xff1a;适用场景&#xff1a; 传输层&#xff1a; 传输层是OSI中最重要&#xff0c;最关键的一层,是唯一负责总体的数据传输和数据…

文件传输协议FTP

文件传输协议FTP(File Transfer Protocol)是因特网中使用最广泛的文件传输协议。FTP使用交互式的访问&#xff0c;允许客户指定文件的类型和格式(如指明是否使用ASCII码)&#xff0c;并允许文件具有存取权限(如访问文件的用户必须经过授权&#xff0c;并输入有效的口令)。 文件…

传输层协议详解

一、传输层的概念和服务 1、传输层的基本概念 传输层负责端到端之间的数据传输控制传输层依赖于网络层的服务&#xff0c;对应用层提供传输服务 2、传输层的功能 跟踪会话 跟踪源主机和目的主机上应用程序间的每次通信 数据分段 将数据分段&#xff0c;并管理每个分段 …

TCP-面向连接的传输层协议

TCP 主要特点工作方式建立连接---三次握手为什么 TCP 建立连接需要三次握手&#xff0c;而不是两次&#xff1f;连接终止---四次挥手为什么要四次挥手为什么要等待2MSL TCP流量控制TCP拥塞控制1.慢开始和拥塞避免2.快重传和快恢复 传输控制协议&#xff08;TCP&#xff0c;Tran…

简介 传输层协议——UDP协议

UDP协议&#xff1a; UDP&#xff1a;User Datagram Protocol 用户数据报协议 UDP简介&#xff1a; UDP是一种面向无连接的传输层协议&#xff0c;UDP数据包括目的端口号和源端口号信息&#xff0c;由于通讯不需要连接&#xff0c;所以可以实现广播发送。UDP提供面向事务的简…

TCP(传输控制协议详解)详解

TCP协议的特点 &#xff08;1&#xff09;TCP协议是面向连接的运输层协议 在数据传输前必须建立连接&#xff0c;数据传输之后释放连接。 &#xff08;2&#xff09;TCP提供可靠交付的服务 所谓可靠是指在传输过程中无重复&#xff0c;无丢失&#xff0c;无错误。但是同时会…

TCP/IP协议(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)

TCP/IP协议 TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff09;是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议&#xff0c;而是指一个由FTP、SMTP、TCP、UDP、IP等协…

用户数据报协议UDP和传输控制协议TCP

目录 UDP UDP的功能 UDP的特点 UDP的首部格式 TCP TCP的功能 TCP的特点 TCP面向流的概念 套接字&#xff08;socket) 无连接工作流程和面向连接的工作流程对比 UDP UDP的功能 UDP只在IP的数据报服务上增加了很少一点功能&#xff1a; 1.复用和分用功能 2.差错检测…

TCP(传输控制协议)

TCP 最主要的特点 TCP 是应用程序在使用 TCP 协议之前&#xff0c;必须先建立 TCP 连接。 在传送数据完毕后&#xff0c;必须释放已经建立的 TCP 连接面向连接的运输层协议每一条 TCP 连接只能有两个&#xff0c;每一条 TCP 连接只能是(一对一)点对点TCP 提供的服务。 通过 TCP…

传输层-传输控制协议(TCP)

目录 TCP 协议概述TCP 报文段结构TCP连接管理三次握手四次挥手 TCP 可靠数据传输TCP拥塞控制 TCP 协议概述 传输控制协议&#xff08;TCP&#xff09;是Internet传输层协议。提供面向连接、可靠、有序、字节流传输服务。 面向连接&#xff1a;应用程序在使用 TCP 之前&#x…

传输控制协议---TCP协议【详解】

目录 一、协议简介 二、TCP报文格式 1、字段解析 2、报文解析 三、TCP的重传机制 1、超时重传 2、快速重传 3、 SACK 方法 4、Duplicate SACK 四、TCP的滑动窗口机制 五、流量控制 六、拥塞机制 1、慢启动 2、拥塞避免算法 3、拥塞发生 4、快速恢复 七、TCP的三…

传输控制协议(TCP)

可靠的流传输服务 传输控制协议&#xff08;TCP&#xff0c;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。本文介绍TCP把他当成TCP/IP网际协议族的一部分&#xff0c;是一个独立的通信协议。 五个可靠交付特征 1.面向流…

传输控制协议TCP

一、概述 概念&#xff1a;传输控制协议&#xff08;TCP&#xff0c;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP最主要的特点&#xff1a; &#xff08;1&#xff09;TCP是面向连接的运输层协议。 &#xff08;2&a…

[2] SDL的基础知识以及利用SDL播放视频

此博文相关知识点从雷神的博客以及视频学习&#xff0c;截图也是用了他的课件, 雷神博客地址&#xff1a;http://blog.csdn.net/leixiaohua1020/ 日期&#xff1a;2016.10.1 作者&#xff1a;isshe github&#xff1a;github.com/isshe 邮箱&#xff1a;i.ssheoutlook.com …

Start Game:SDL2简介

Start Game&#xff1a;SDL2简介 官网简介&#xff1a; Simple DirectMedia Layer是一个跨平台开发库&#xff0c;旨在通过OpenGL和Direct3D提供对音频、键盘、鼠标、操纵杆和图形硬件的低级别访问。它被视频播放软件、模拟器和流行游戏使用&#xff0c;包括Valve的获奖目录和许…