工作中把一些功能弄到较为低端的单片机,代码是现成的。倒腾之后编译,单片机存储不够了。
使劲把用不到的代码注释掉,存储空间还是不够。最后注释掉 printf 类的函数( sprintf 、snprintf 之类的),立刻节省了很多单片机的存储空间。
![]() |
1
kk2syc 11 天前 ![]() 外挂 eeprom ,片内 boot 引导,从片外 flash 启动固件
|
![]() |
2
tbxark 11 天前
大学时候写单片打印设置宏, 只有 debug 的时候开启。release 的时候去掉。
|
![]() |
3
seers 11 天前 via iPhone
听说过很多 printf 在单片机造成的 bug ,不知道真的假的
|
![]() |
4
huluhulu 11 天前
printf 太占用系统资源了,存储和内容都挺占的,一般用 uart 打印日志比较经济划算。
|
5
loveour 11 天前 ![]() 想起来之前同事打日志查性能问题,最后发现最耗的是日志。。
|
6
TerryRobles 11 天前
单片机也不支持 printf 啊,是我用的太低端吗。
|
7
someonesnone 11 天前 via Android
printf 应该只有 debug 注释开启才启用, 你的环境不区分 debug release 吧...
|
8
36963 11 天前
用汇编写吧。。。c 再怎么翻译都不如汇编节省的
|
![]() |
9
ysc3839 11 天前 via Android
printf 整套解析逻辑都是运行时进行的,只要用了,就得把全部代码都打包进去。
有的 printf 实现非常复杂,甚至是图灵完备的 https://news.ycombinator.com/item?id=25691598 |
![]() |
10
levelworm 11 天前
这种可以自己写吧?有些最小的 C 库可以试试看。
|
![]() |
11
383394544 11 天前
现在的 LLM 有能力把 C 变成可用的汇编代码吗
|
![]() |
12
villivateur PRO 把 printf 的 %f 功能去掉再试试,打印浮点数极其消耗资源
|
13
KeysPAN 11 天前
我记得大部分 print 是重定义到串口的,sprintf 这些能少用就少用。如果是 wifi 芯片还好,随便造
|
14
junyee 11 天前
可以使用微型的 clib 库,或手搓一个 printf .
只要这个函数大概占 1KB 的空间吧. |
16
frankwsh93 11 天前
查下工程 map 文件吧,看下哪些代码占 ROM
|
18
null2error 11 天前
C Standard Library ( libc )受害者+1
ps:C 标准库是非常好的学习对象,无论是代码层面还是应用层面,值得把每个头文件都看一遍 |
19
iseki 11 天前 via Android
记得小时候看过很久远的教程里,就说过 printf scanf 这俩函数背后拖着的一大堆东西,可能把 ROM 干爆(
|
20
diivL 11 天前
printf 类函数的 fmt 也占不少空间,很可能比函数本身占的还多。
|
21
sampeng 11 天前
我都是 output 到串口之类的通信口。。简单可依赖。。。。
|
![]() |
22
muooOOO 11 天前
microLib ,就很香。当然也可以自己写个 print ,能够打印字符串就行了,最多在加一个打印变量
|
24
Niunai 11 天前
缩小程序二进制文件的体积,通用做法是看 map 文件,根据 map 文件裁剪很直观。
|
![]() |
25
spadger 11 天前
|
![]() |
26
wanei 10 天前
串口打印,按位操作,对着自己写的手册 debug
|
27
PanuiQ 10 天前
调试过一个龙芯 2K1000 裸跑的项目的设备驱动移植,printf 没实现,自己整了 3 个函数,分别打印字符串、十进制数和十六进制数,错误打印不出来,需要自己把原来驱动的打印信息,一条拆成好几条打印
|