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

93 天前
 liuzhiyong

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

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

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

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

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

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

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

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

© 2021 V2EX