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

[复制链接]
1608|8
 楼主| cyj1232 发表于 2016-6-30 15:05 | 显示全部楼层 |阅读模式
本帖最后由 cyj1232 于 2016-6-30 15:06 编辑

同一个简单程序,分别用IAR和MDK各建了一个工程,用IAR编译后CODE只占2K多点的空间,而MDK编译后有6K多,程序功能就是在定时器中断里动态修改定时器的定时值,然后动过外部引脚根据定时值动态的输出高低电平,程序很简单,就是系统配置、时钟配置、端口配置、定时器配置、定时器中断程序组成
    以下是编译设置和编译结果截图:
IAR6.10未优化编译结果.jpg
IAR6.10未优化设置.jpg
IAR6.10优化编译结果.jpg
IAR6.10优化设置.jpg
MDK5.11优化编译结果.jpg
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
MDK5.11优化设置ELF.jpg
 楼主| cyj1232 发表于 2016-6-30 15:37 | 显示全部楼层
选项One ELF Section per Function的主要功能是对冗余函数的优化。通过这个选项,可以在最后生成的二进制文件中将冗余函数排除掉(虽然其所在的文件已经参与了编译链接),以便最大程度地优化最后生成的二进制代码。百度找的答案
ligoxyz 发表于 2016-6-30 15:53 | 显示全部楼层
mark 代码优化
 楼主| cyj1232 发表于 2016-6-30 15:59 | 显示全部楼层
刚才看了一下MAP文件,应该是优化掉了一些无用的固件库函数,所以变小了很多
mmuuss586 发表于 2016-6-30 20:40 | 显示全部楼层
再把优化级别改高些,代码量更小了
vmoyu 发表于 2016-7-4 08:47 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

162

帖子

2

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