打印
[牛人杂谈]

新唐cortex-m051中慎用printf()函数----一个printf()函数4kB大小

[复制链接]
1111|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Micachl|  楼主 | 2016-3-12 21:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近整合项目,遇到一个问题,我一开始没有注意,后来才慢慢发现,那就是我的程序已经烧不进去芯片中,经过翻查手册后才发现,新唐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()即发送一个字节通过串口到电脑。

沙发
yanxinboy| | 2016-3-13 18:03 | 只看该作者
printf 既不是ARM 封装的也不是新唐封装的,是标准输出出入,在STDIO.H里面有。楼主应该在IDE里能直接找到原形。 具体问题我不知道。但你这个去问新唐好像不大好吧。

使用特权

评论回复
板凳
orangebanana| | 2016-3-27 21:03 | 只看该作者
和行数关系不大,看看你程序中开辟的变量是不是多

使用特权

评论回复
地板
DreamofOven| | 2016-3-29 21:04 | 只看该作者
用microlib吧,那种printf还是不要用了,少开全局变量

使用特权

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

本版积分规则

43

主题

300

帖子

1

粉丝