sprintf是一个非常好用的格式打印函数,可以将各种类型的数值或者字符打印到字符串中,方便数据传输。但是对于嵌入式系统来说,特别是小容量的MCU,该函数编译后占用空间较大,使用受限。今天来介绍一个适用于小容量MCU的sprintf函数:mini-printf。
使用该函数只需将两个文件添加到工程中,并包含头文件#include "mini-printf.h"
文件链接:https://pan.baidu.com/s/1iII1CT4eSRF_Vp-NVCO5gw
提取码:d3u0
使用方式如下:
与sprintf类似,只是多了一个参数(第二个参数),其它方面完全一样。
接着来测试一下它的性能。程序如下,打印各种类型的数据到字符串,并输出到串口。
可以看到,十进制、十六进制、字符型、有符号数据、无符号数据均可正常输出。
下面来看下编译后占用flash情况,原工程编译后占用flash大小为3630字节:
添加sprintf函数编译后占用5556字节:
添加mini_snprintf函数编译同样程序,占用4696字节,比sprintf少了将近1KB:
接下来测试一下运行速度,使能了一个定时器,运行前清零,运行后读取定时器的值。并打印出来,对比两者耗时。
使用sprintf函数运行耗时约13.4ms,使用mini_snprintf函数运行耗时11.7ms。(测试用的STM32F103,72M主频)
可以看到,mini-snprintf函数在时间和空间上均有优化,虽然不多,但是对于小容量的单片机,还是非常有优势的。
欢迎关注公众号"嵌入式技术开发",大家可以后台给我留言沟通交流。如果觉得该公众号对你有所帮助,也欢迎推荐分享给其他人。