正文


大家好,我是bug菌,又见面了~

上一次发文<为何单片机总跟printf过不去呢?>, 有一些朋友问到有没有开源的printf直接可以拿来用的,不想再重复造轮子了,一些老维护项目软件架构也不能随便换,只是想加入这个组件方便以后排查问题,那当然是有的,毕竟开源界的道友们还是非常无私的。

那么接下来就给大家推荐三个轮子,后续自己根据实际项目需求进行修一修基本就能用了~

1

xprintf

xprintf 是一个紧凑的字符串 I/O 库。 它非常适用于程序存储器不足以用于常规 printf 函数的微型微控制器。 

推荐的用途是:将格式化的字符串写入 LCD 或 UART 以及用于调试/维护控制台。

可以使用配置选项配置 xprintf 以减小模块大小。

下表显示了 Cortex-M3 (gcc -Os) 中代码大小的示例。 long long 和 float 需要 C99 或更高版本。

输入图片说明

源码和使用说明都在如下路径:

http://elm-chan.org/fsw/strf/xprintf_j.html

2

lwprintf


lwprintf-Lightweight printf library optimized for embedded systems,lwprintf是针对嵌入式系统优化的轻量级 stdio 管理器。 

用 C 语言 (C11) 编写,实现了与 printfvprintfsnprintfsprintf 和 vsnprintf 兼容的输出函数,只需要几 kB 的非易失性存储器,较低的内存占用,适用于嵌入式系统.

并且对所有 API 函数的可重入访问,能够在多个线程打印到同一输出流可选支持,还允许多个输出流函数(与仅支持一个输出流函数的标准不同)来分离应用程序的各个

部分。

所以整体lwprinf功能的选择会更加的丰富,而且这个项目文档案例也比较丰富,根据自己的情况进行功能的选择,挺香的。

开源地址如下:

https://github.com/MaJerle/lwprintf

3

标题3

最后一个是nanoprintf了,作者项目的初衷是:

想要一个单文件公共域的 printf,在最小配置(引导加载程序等)中小于 1KB,在启用浮点花里胡哨的情况下小于 3KB。

在固件工作中,通常希望 stdio 的字符串格式没有 syscall 或文件描述符层要求;在想要登录小缓冲区或直接发送到总线的小型系统中,几乎不需要它们。此外,许多嵌入式 stdio 实现比它们需要的更大或更慢——这对于 bootloader 工作很重要。如果你不需要任何 syscall 或 stdio 的花里胡哨,可以简单地使用 nanoprintf 并精简构建。

nanoprintf是 snprintf 和 vsnprintf 的一种嵌入式系统实现,旨在符合 C11 标准。

nanoprintf 不分配内存,使用不到 100 字节的堆栈,并且在打开所有花里胡哨的情况下进行优化时,其 ARM Cortex-M 对象代码小于 5KB(在 x64 上略大,您无论如何都不想使用它)。

nanoprintf 是 STB 库样式的单个头文件。存储库的其余部分是测试和基架,不需要使用。nanoprintf 是用 C89 编写的,以实现最大的编译器兼容性。如果启用了浮点转换或大修饰符,则需要 C99 或 C++11 编译器(对于 uint64_t 和其他类型)。nanoprintf 确实包含标准标头,但仅将它们用于类型和参数列表;不会对 stdlib / libc 进行调用,但编译器可能发出的任何内部 double-to-float 转换 ABI 调用除外。

nanoprintf 是静态可配置的,因此可以在大小、编译器要求和功能集之间找到平衡。

开源地址如下:

https://github.com/charlesnicholson/nanoprintf

其实三个小组件的代码量不大,却融入了开发者这对各种使用场景的设计取舍和考量,大家有时间可以细品一下代码,会有不少新收获~

最后

      好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个~

唯一、永久、免费分享嵌入式技术知识平台~

推荐专辑  点击蓝色字体即可跳转

☞  MCU进阶专辑

☞  嵌入式C语言进阶专辑

☞  “bug说”专辑

☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

☞ 专辑 | 从单片机到Linux

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐