打印
[牛人杂谈]

为何有时候要慎用pringf()

[复制链接]
599|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
新唐cortex-m051的Flash只有8KB,我的程序编译完之后bin文件竟然有16KB,而我的程序加上注释也只有1300多行,怎么会那么大呢?


笔者不知道是什么问题,于是就开始删减程序,把一些可以要可以不要的程序删除,(就是要了之后会更人性化的部分部分),等删除到printf 的时候,奇怪的事情出现了,我删除了4个printf,bin文件从16KB缩减到13KB,于是我把所有的printf都删除了,程序直接缩减到11KB。后来在一个程序中,非常小的程序中,一个printf函数调用,竟然多了4KB的空间。


由于一个函数而使我的程序大了那么多,我很好奇,于是便去翻查这个函数的原型,在新唐cortex-m0中到底是怎么封装的,可惜却没有找到,于是接下来弄别的程序,也没有管其它了,12月16日,新唐会来南京开巡回演讲,到时候我会问清楚他们的,等有了答案我再和大家分享


对于嵌入式编程来说,每个字节的空间都是那么的珍贵,希望各位同仁在编程的时候,慎用printf,虽然这个函数确实很方便,但是对于空间不足的来说,只能望而却步了,可以用它系统自带的UART功能中的send_to_PC()即发送一个字节通过串口到电脑。

使用特权

评论回复
沙发
dongnanxibei|  楼主 | 2019-4-28 23:48 | 只看该作者
笔者去了新唐Mini51的发布会,这次的板子比去年的M051,功能和附件上多了很多,而不只是一个最小系统,可以在板子焊接新的器件,也自带了一些LED灯和可变电路,还有I2C模块。

  于是我问了一个printf为什么会这么大?

  printf是keil(笔者用的keil开发的)内部的封装,由于可变参等问题,内部的封装非常复杂,新唐的人员也不知道为什么会那么大,但是有个方法可以减少它的大小,方法如下:
Keil的project options上选“Target' -> “Use MicroLib".
  如图:
 

使用特权

评论回复
板凳
dongnanxibei|  楼主 | 2019-4-28 23:48 | 只看该作者
将左上角的Use Miccro LIB复选款打上勾就可以了

使用特权

评论回复
地板
ayb_ice| | 2019-4-29 08:34 | 只看该作者
这有什么奇怪的,printf功能强,微库确实小很多

使用特权

评论回复
5
zhuomuniao110| | 2019-4-29 15:53 | 只看该作者
好用的东西都复杂。

使用特权

评论回复
6
小灵通2018| | 2019-4-29 16:16 | 只看该作者
嵌套了很多层的一个东西。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

187

主题

3489

帖子

16

粉丝