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