打印
[牛人杂谈]

新唐cortex-m051中慎用printf()函数

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

沙发
玛尼玛尼哄| | 2016-7-31 23:01 | 只看该作者
格式化输出本来就是很费资源的,内部是个复杂的函数。

使用特权

评论回复
板凳
戈卫东| | 2016-8-1 20:17 | 只看该作者
051不够就换052,054,058,0516.。。。。。。

使用特权

评论回复
地板
h32446975| | 2016-8-2 20:04 | 只看该作者
自己写一个不支持浮点数的printf函数,很少代码就够了。

使用特权

评论回复
5
zhuotuzi| | 2016-8-3 21:50 | 只看该作者
在单片机的实际应用中,都不是用这些的,浪费资源效率低,都是直接发送给串口

使用特权

评论回复
6
glkk| | 2016-8-4 17:12 | 只看该作者
printf()这种东西是标准C函数库的东西,不是MCU厂家的东西,只不过厂家加了一个retarget让他支持串口,一般只做调试用。一般厂家会提供串口驱动,非常省空间。

使用特权

评论回复
7
Harvard| | 2016-8-5 21:45 | 只看该作者
是的  有点危言耸听.过期的经验了 没必要理会 都没有说明是哪个芯片,现在 最高配的M051,就是M0516也就是5-6块钱.  64k的flash写到你手软了 哈哈

使用特权

评论回复
8
heisexingqisi|  楼主 | 2016-8-5 22:49 | 只看该作者
现在都是讲究速度的,空间用不完就浪费了,所以这个只是如果紧缺考虑的。

使用特权

评论回复
9
huangcunxiake| | 2016-8-6 10:53 | 只看该作者
当年51时候是慎用的,现在arm,闪存很大,不需要这样考虑,现在考虑的就是怎么快速的完成开发。

使用特权

评论回复
10
zhuotuzi| | 2016-8-6 13:51 | 只看该作者
从来不用printf,这个调试的时候采用。

使用特权

评论回复
11
heisexingqisi|  楼主 | 2016-8-7 23:13 | 只看该作者
对于嵌入式编程来说,每个字节的空间都是那么的珍贵,所以要尽量用完,不然浪费了。

使用特权

评论回复
12
quray1985| | 2016-8-8 16:37 | 只看该作者
printf这个函数包含的程序占内存挺大的

使用特权

评论回复
13
heisexingqisi|  楼主 | 2016-8-20 20:49 | 只看该作者
051内存小,最好别浪费到调试上。

使用特权

评论回复
14
598330983| | 2016-8-21 00:10 | 只看该作者
实际上在成品上几乎都用不到Printf,都是调试阶段才用的

使用特权

评论回复
15
zhuomuniao110| | 2016-8-22 20:29 | 只看该作者
用它系统自带的UART功能中的send_to_PC()即发送一个字节通过串口到电脑

使用特权

评论回复
16
Thethree| | 2016-8-23 09:18 | 只看该作者
是不是因为太浪费资源了啊

使用特权

评论回复
17
heisexingqisi|  楼主 | 2016-8-25 22:43 | 只看该作者
Thethree 发表于 2016-8-23 09:18
是不是因为太浪费资源了啊

实现的过程太复杂,所以会消耗很多CPU资源,还会浪费很多存储空间。

使用特权

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

本版积分规则

131

主题

2594

帖子

2

粉丝