单片机如果存储空间紧张,就避免用 printf 类的函数

2025 年 6 月 9 日
 liuzhiyong

工作中把一些功能弄到较为低端的单片机,代码是现成的。倒腾之后编译,单片机存储不够了。

使劲把用不到的代码注释掉,存储空间还是不够。最后注释掉 printf 类的函数( sprintf 、snprintf 之类的),立刻节省了很多单片机的存储空间。

5334 次点击
所在节点    程序员
27 条回复
v1
2025 年 6 月 9 日
外挂 eeprom ,片内 boot 引导,从片外 flash 启动固件
tbxark
2025 年 6 月 9 日
大学时候写单片打印设置宏, 只有 debug 的时候开启。release 的时候去掉。
seers
2025 年 6 月 9 日
听说过很多 printf 在单片机造成的 bug ,不知道真的假的
huluhulu
2025 年 6 月 9 日
printf 太占用系统资源了,存储和内容都挺占的,一般用 uart 打印日志比较经济划算。
loveour
2025 年 6 月 9 日
想起来之前同事打日志查性能问题,最后发现最耗的是日志。。
TerryRobles
2025 年 6 月 10 日
单片机也不支持 printf 啊,是我用的太低端吗。
someonesnone
2025 年 6 月 10 日
printf 应该只有 debug 注释开启才启用, 你的环境不区分 debug release 吧...
36963
2025 年 6 月 10 日
用汇编写吧。。。c 再怎么翻译都不如汇编节省的
ysc3839
2025 年 6 月 10 日
printf 整套解析逻辑都是运行时进行的,只要用了,就得把全部代码都打包进去。
有的 printf 实现非常复杂,甚至是图灵完备的
https://news.ycombinator.com/item?id=25691598
levelworm
2025 年 6 月 10 日
这种可以自己写吧?有些最小的 C 库可以试试看。
383394544
2025 年 6 月 10 日
现在的 LLM 有能力把 C 变成可用的汇编代码吗
villivateur
2025 年 6 月 10 日
把 printf 的 %f 功能去掉再试试,打印浮点数极其消耗资源
kira258
2025 年 6 月 10 日
我记得大部分 print 是重定义到串口的,sprintf 这些能少用就少用。如果是 wifi 芯片还好,随便造
junyee
2025 年 6 月 10 日
可以使用微型的 clib 库,或手搓一个 printf .
只要这个函数大概占 1KB 的空间吧.
ayyll
2025 年 6 月 10 日
@383394544 没有 翻译一个函数都够呛 别说整个工程了
multigram
2025 年 6 月 10 日
查下工程 map 文件吧,看下哪些代码占 ROM
ltyj2003
2025 年 6 月 10 日
@383394544 这不该是编译器的活吗?
null2error
2025 年 6 月 10 日
C Standard Library ( libc )受害者+1

ps:C 标准库是非常好的学习对象,无论是代码层面还是应用层面,值得把每个头文件都看一遍
iseki
2025 年 6 月 10 日
记得小时候看过很久远的教程里,就说过 printf scanf 这俩函数背后拖着的一大堆东西,可能把 ROM 干爆(
diivL
2025 年 6 月 10 日
printf 类函数的 fmt 也占不少空间,很可能比函数本身占的还多。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1137456

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX