printf到底占用多少代码空间? ---如何节省ROM空间(原创)

技术分类: 微处理器与DSP  | 2008-08-29
作者:walnutcy

  EDN博客精华文章  作者:walnutcy

  偶啊,也做了一回葛朗台,不过为此我觉得荣幸之至,要问为何,还是慢慢往下看吧。

  觉得不错的话,点左上角帮忙顶下噢,谢谢。

  通常我们在做串口打印函数时,会通过库函数vsprintf来实现,代码如下:

程序

程序

  这样代码简便,且出错较少,但缺点是占用RAM,ROM空间太多。且若库函数有些问题的话,便麻烦大了,这次尝试去把printf换成源码,便是由于在打印浮点数时遇到了点问题,出来的始终是错的。(ADS环境下,不知道兄弟们使用的如何?)

  于是找了份printf的源码(在哪找?当然是编译器了,有的编译器是带了这个源码的),并想办法移植过去,我的移植完了就成了下边这个样子,代码如下:

程序

  代码好看多了,编译出来的代码也少了一些,少了多少?(整整2K的BIN空间)。

  满足了吗?如果空间够了可以不往下看了,毕竟下边的处理也是有条件的嘛。

  这里源代码拷过来后,主要是处理函数_out,我的更改后如下:

程序

  如果我一直没用用浮点数打印,我的vprintf为什么要处理呢? 基于这一想法,我又行动起来了,在移植的vprintf代码中,一般会有一个类似于 LIBDEF_PRINTF_FLOATING 的宏,默认一般是1,即支持打印浮点数,我这里没用,当然得学学葛朗台喽,一毛不拔,设置如下:

  #define LIBDEF_PRINTF_FLOATING  0  // walter 20080829 09:55

  重编译,看到了什么??

  快说呀!

  我的代码可是从14904 bytes变为6848 bytes,8K的空间啊!!!

  加上前边的2K,我们就又多了10K的空间。

  我的目的达到了,你的呢? 经过上述的小手术,想必也OK了吧。

0
0
(请您对文章做出评价)
加载中

对文章的评论

更多评论

剩余字数:  

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

  • 博客推荐

  • 论坛推荐

  • 在线研讨会