打印
[STM32F0]

STM32 固件库 太占用FLASH空间了

[复制链接]
5049|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 fuzi2008 于 2016-6-16 12:07 编辑

本人使用STM32F031K4 FLASH --16KB
结果没搞什么,FLASH就没了,当然,有乘除法运算,这个也比较占空间!

但是库代码基本上占去了5KB左右。太惊诧了我!
看来库代码虽然上手好用,但是,真正到优化的时候就是一大问题!




沙发
z_no1| | 2016-6-16 13:52 | 只看该作者
你TIM写了多少东西啊,嫌占地方就自己写呗,反正我512K空间的是不在乎这点啦。

使用特权

评论回复
板凳
fuzi2008|  楼主 | 2016-6-16 14:03 | 只看该作者
z_no1 发表于 2016-6-16 13:52
你TIM写了多少东西啊,嫌占地方就自己写呗,反正我512K空间的是不在乎这点啦。
...

固件库里面的东西,很多函数我并没有直接调用也给链接进去了。现在正在查,怎么回事!

使用特权

评论回复
地板
flydream0| | 2016-6-16 14:13 | 只看该作者
fuzi2008 发表于 2016-6-16 14:03
固件库里面的东西,很多函数我并没有直接调用也给链接进去了。现在正在查,怎么回事! ...

把库内没有用到的函数注释掉撒

使用特权

评论回复
5
fuzi2008|  楼主 | 2016-6-16 14:37 | 只看该作者
本帖最后由 fuzi2008 于 2016-6-16 14:38 编辑

复制了一份tim文件,只抽出使用到的函数,编译出来的效果还是很明显的!

使用特权

评论回复
6
aozima| | 2016-6-16 14:38 | 只看该作者
调试信息关掉,然后有用到的文件中所有函数只链接必要的。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
fuzi2008 + 1 很给力!
7
fuzi2008|  楼主 | 2016-6-16 14:45 | 只看该作者
aozima 发表于 2016-6-16 14:38
调试信息关掉,然后有用到的文件中所有函数只链接必要的。

兄弟,你这建议很给力,不过,我觉得这个选项应该是默认选项,这样能避免更多问题,感觉很困惑!
使用前后,整整差了6KB
使用前:


使用后:


这减肥效果,不看广告,看疗效!

使用特权

评论回复
8
fuzi2008|  楼主 | 2016-6-16 14:52 | 只看该作者
flydream0 发表于 2016-6-16 14:13
把库内没有用到的函数注释掉撒

你这个思路不对,你来看看底下的兄弟的建议才是王道!

使用特权

评论回复
9
fuzi2008|  楼主 | 2016-6-16 15:01 | 只看该作者
这个选项,是优化了相关部分,不过对于某一个特定文件来说并不是一定减小,但是总量是减小了!
选项One ELF Section per Function是如何对C程序代码进行优化呢?  请参考如下**!
------blog.csdn.net/iceiilin/article/details/6091575  

使用特权

评论回复
10
aozima| | 2016-6-16 16:50 | 只看该作者
“One ELF Section per Function”并没有做任何优化

一般来讲,链接时都只会链接有引用到的,但默认某个源文件里面有100个函数,只要你引用了1个,另外99个也会链接进来。
上面这个选项是把这个源文件编译出来的.o文件当成100个独立对象,只链接需要的函数,而不是以文件为单位。

使用特权

评论回复
11
jin8888tian| | 2016-6-16 21:03 | 只看该作者
建议你不要用STM32。汇编语言更适合你

使用特权

评论回复
12
tomzbj| | 2016-6-16 23:33 | 只看该作者
如果是GCC, 可以在CFLAGS里加上-ffunction-sections -fdata-sections
在LDFLAGS里加上-Wl,--gc-sections,这样就不会把没用到的函数链接进来了。

不过16k的mcu还是别上浮点运算了吧。。。特别是printf之类函数,如果用了,32k flash都嫌不够。

使用特权

评论回复
13
zhixiaoyuhong| | 2016-6-17 09:01 | 只看该作者
换IAR。。。

使用特权

评论回复
14
huangqi412| | 2016-6-17 09:03 | 只看该作者
勾选那个ONE ELF....

使用特权

评论回复
15
LearningASM| | 2016-6-17 09:52 | 只看该作者
乘除法运算是整形的还是浮点型的

使用特权

评论回复
16
fuzi2008|  楼主 | 2016-6-17 09:58 | 只看该作者
aozima 发表于 2016-6-16 16:50
“One ELF Section per Function”并没有做任何优化

一般来讲,链接时都只会链接有引用到的,但默认某个源 ...

嗯,你说的更准确!

使用特权

评论回复
17
通宵敲代码| | 2016-6-17 10:00 | 只看该作者
fuzi2008 发表于 2016-6-16 14:45
兄弟,你这建议很给力,不过,我觉得这个选项应该是默认选项,这样能避免更多问题,感觉很困惑!
使用前 ...

应该是你工程里边自己改动了,
这个选项本来就默认是选中的!

说不行是上位程序员坑你呢!

使用特权

评论回复
18
fuzi2008|  楼主 | 2016-6-17 10:00 | 只看该作者
jin8888tian 发表于 2016-6-16 21:03
建议你不要用STM32。汇编语言更适合你

汇编咱还真干过!不是没有!

使用特权

评论回复
19
fuzi2008|  楼主 | 2016-6-17 10:02 | 只看该作者
在这里统一回复啦,谢谢各位,谢谢大家, 咱用STM32 也不是一天两天了,不过对于编译链接方面的事情,还真没怎么注意深入研究过。本次是选用了小FLASH的型号,所以,才深入追究了一下!再次感谢!

使用特权

评论回复
20
fuzi2008|  楼主 | 2016-6-17 10:03 | 只看该作者
通宵敲代码 发表于 2016-6-17 10:00
应该是你工程里边自己改动了,
这个选项本来就默认是选中的!

我自己从头新建的工程,从来没管过!

使用特权

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

本版积分规则

1

主题

29

帖子

1

粉丝