三款开源轻量级printf,修一修就能跑~
nanoprintf 是用 C89 编写的,以实现最大的编译器兼容性。>, 有一些朋友问到有没有开源的printf直接可以拿来用的,不想再重复造轮子了,一些老维护项目软件架构也不能随便换,只是想加入这个组件方便以后排查问题,那当然是有的,毕竟开源界的道友们还是非常无私的。所以整体lwprinf功能的选择会更加的丰富,而且这个项目文档案例也比较丰富,根据自己的情况进行功能的选择,挺香的。兼容的输出函
正文
大家好,我是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) 编写,实现了与 printf
、vprintf
、snprintf
、sprintf
和 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进阶专辑
☞ “bug说”专辑
☞ 专辑|手撕C语言
☞ 专辑|经验分享

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