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