[STM32F0] STM32 固件库 太占用FLASH空间了

[复制链接]
6021|27
 楼主| fuzi2008 发表于 2016-6-16 12:06 | 显示全部楼层 |阅读模式
本帖最后由 fuzi2008 于 2016-6-16 12:07 编辑

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

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

QQ截图20160616115720.jpg
QQ截图20160616120517.jpg

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

把库内没有用到的函数注释掉撒
 楼主| fuzi2008 发表于 2016-6-16 14:37 | 显示全部楼层
本帖最后由 fuzi2008 于 2016-6-16 14:38 编辑

复制了一份tim文件,只抽出使用到的函数,编译出来的效果还是很明显的!
QQ截图20--.jpg
aozima 发表于 2016-6-16 14:38 | 显示全部楼层
调试信息关掉,然后有用到的文件中所有函数只链接必要的。
stm32_lib_size.jpg

评分

参与人数 1威望 +1 收起 理由
fuzi2008 + 1 很给力!

查看全部评分

 楼主| fuzi2008 发表于 2016-6-16 14:45 | 显示全部楼层
aozima 发表于 2016-6-16 14:38
调试信息关掉,然后有用到的文件中所有函数只链接必要的。

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

使用后:
QQ截图20160616144100.jpg

这减肥效果,不看广告,看疗效!
 楼主| fuzi2008 发表于 2016-6-16 14:52 | 显示全部楼层
flydream0 发表于 2016-6-16 14:13
把库内没有用到的函数注释掉撒

你这个思路不对,你来看看底下的兄弟的建议才是王道!
 楼主| fuzi2008 发表于 2016-6-16 15:01 | 显示全部楼层
这个选项,是优化了相关部分,不过对于某一个特定文件来说并不是一定减小,但是总量是减小了!
选项One ELF Section per Function是如何对C程序代码进行优化呢?  请参考如下**!
------blog.csdn.net/iceiilin/article/details/6091575  

QQ截图20160616145724.jpg
aozima 发表于 2016-6-16 16:50 | 显示全部楼层
“One ELF Section per Function”并没有做任何优化

一般来讲,链接时都只会链接有引用到的,但默认某个源文件里面有100个函数,只要你引用了1个,另外99个也会链接进来。
上面这个选项是把这个源文件编译出来的.o文件当成100个独立对象,只链接需要的函数,而不是以文件为单位。
jin8888tian 发表于 2016-6-16 21:03 来自手机 | 显示全部楼层
建议你不要用STM32。汇编语言更适合你
tomzbj 发表于 2016-6-16 23:33 | 显示全部楼层
如果是GCC, 可以在CFLAGS里加上-ffunction-sections -fdata-sections
在LDFLAGS里加上-Wl,--gc-sections,这样就不会把没用到的函数链接进来了。

不过16k的mcu还是别上浮点运算了吧。。。特别是printf之类函数,如果用了,32k flash都嫌不够。
zhixiaoyuhong 发表于 2016-6-17 09:01 | 显示全部楼层
换IAR。。。
huangqi412 发表于 2016-6-17 09:03 | 显示全部楼层
勾选那个ONE ELF....
LearningASM 发表于 2016-6-17 09:52 | 显示全部楼层
乘除法运算是整形的还是浮点型的
 楼主| fuzi2008 发表于 2016-6-17 09:58 | 显示全部楼层
aozima 发表于 2016-6-16 16:50
“One ELF Section per Function”并没有做任何优化

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

嗯,你说的更准确!
通宵敲代码 发表于 2016-6-17 10:00 | 显示全部楼层
fuzi2008 发表于 2016-6-16 14:45
兄弟,你这建议很给力,不过,我觉得这个选项应该是默认选项,这样能避免更多问题,感觉很困惑!
使用前 ...

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

说不行是上位程序员坑你呢!
 楼主| fuzi2008 发表于 2016-6-17 10:00 | 显示全部楼层
jin8888tian 发表于 2016-6-16 21:03
建议你不要用STM32。汇编语言更适合你

汇编咱还真干过!不是没有!
 楼主| fuzi2008 发表于 2016-6-17 10:02 | 显示全部楼层
在这里统一回复啦,谢谢各位,谢谢大家, 咱用STM32 也不是一天两天了,不过对于编译链接方面的事情,还真没怎么注意深入研究过。本次是选用了小FLASH的型号,所以,才深入追究了一下!再次感谢!
 楼主| fuzi2008 发表于 2016-6-17 10:03 | 显示全部楼层
通宵敲代码 发表于 2016-6-17 10:00
应该是你工程里边自己改动了,
这个选项本来就默认是选中的!

我自己从头新建的工程,从来没管过!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

29

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部