打印
[STM32F1]

为什么IAR6.10与MDK5.11编译的代码空间差异这么大?

[复制链接]
1424|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cyj1232|  楼主 | 2016-6-30 15:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cyj1232 于 2016-6-30 15:06 编辑

同一个简单程序,分别用IAR和MDK各建了一个工程,用IAR编译后CODE只占2K多点的空间,而MDK编译后有6K多,程序功能就是在定时器中断里动态修改定时器的定时值,然后动过外部引脚根据定时值动态的输出高低电平,程序很简单,就是系统配置、时钟配置、端口配置、定时器配置、定时器中断程序组成
    以下是编译设置和编译结果截图:

IAR6.10未优化编译结果.jpg (58.08 KB )

IAR6.10未优化编译结果.jpg

IAR6.10未优化设置.jpg (106.26 KB )

IAR6.10未优化设置.jpg

IAR6.10优化编译结果.jpg (69.55 KB )

IAR6.10优化编译结果.jpg

IAR6.10优化设置.jpg (107.07 KB )

IAR6.10优化设置.jpg

MDK5.11优化编译结果.jpg (49.54 KB )

MDK5.11优化编译结果.jpg

MDK5.11优化设置2.jpg (129.49 KB )

MDK5.11优化设置2.jpg
沙发
Xflyan| | 2016-6-30 15:11 | 只看该作者
可以查看各自生成的MAP文件,看看空间是怎么分配的,多出来的是什么东西

使用特权

评论回复
板凳
MOn51| | 2016-6-30 15:13 | 只看该作者
KEIL 里还要勾选: ONE ELF ...  再编译看看。

使用特权

评论回复
地板
cyj1232|  楼主 | 2016-6-30 15:33 | 只看该作者
果然,选了ONE ELF后小了很多,比IAR优化后还小,这个功能起什么作用?平时用IAR比较多,KEIL基本没有用

MDK5.11优化编译结果ELF.jpg (46.94 KB )

MDK5.11优化编译结果ELF.jpg

MDK5.11优化设置ELF.jpg (135.54 KB )

MDK5.11优化设置ELF.jpg

使用特权

评论回复
5
cyj1232|  楼主 | 2016-6-30 15:37 | 只看该作者
选项One ELF Section per Function的主要功能是对冗余函数的优化。通过这个选项,可以在最后生成的二进制文件中将冗余函数排除掉(虽然其所在的文件已经参与了编译链接),以便最大程度地优化最后生成的二进制代码。百度找的答案

使用特权

评论回复
6
ligoxyz| | 2016-6-30 15:53 | 只看该作者
mark 代码优化

使用特权

评论回复
7
cyj1232|  楼主 | 2016-6-30 15:59 | 只看该作者
刚才看了一下MAP文件,应该是优化掉了一些无用的固件库函数,所以变小了很多

使用特权

评论回复
8
mmuuss586| | 2016-6-30 20:40 | 只看该作者
再把优化级别改高些,代码量更小了

使用特权

评论回复
9
vmoyu| | 2016-7-4 08:47 | 只看该作者
mark

使用特权

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

本版积分规则

14

主题

160

帖子

2

粉丝