6 IAR的编译优化

2018-09-27  本文已影响265人  Savior2016

1 编译优化选项

在iar中可以设置代码的编译优化等级,在工程名上右键选Options...,在弹框中选C/C++ Compiler--Optimizations,如下图所示。


iar option

左边的level里面是优化等级,右边的是附加选项。如果不想往下看了又有bug体质,就把这里的level选到None上面,点击OK。

2 优化还是不优化

优化的目的简单来说主要有两个,减少代码量和提高程序运行效率。随之而来的是什么呢?如果编译器误认为你写的延时是“低效率”代码,如果编译器认为某些变量的生命周期可以提前结束了,如果编译器认为某些变量你定义了没有使用就是没用,就会原地爆炸了。
所以还是有必要搞明白,优化到底优化了什么,才能决定要不要优化。

3 IAR优化了什么

这个在iar的用户手册中有详细的描述,这里简单介绍一下,需要详细了解的到文章底部去拿iar的用户手册,在129页:

None

有最好的debug支持,变量的生命周期会贯穿它的整个作用域,也就是说编译器不做任何优化,只要是变量的作用域,这个变量就是有效的。
最直观的的体现就是可以在live watch中查看该变量,如果它被优化了,就查看不了了。

Low

仍然是具备调试支持的,优化的是变量的生命周期,如果一个变量没有作用了,后面不会用到它了,就会把它优化掉,不让它贯穿它的整个生命周期。
这有什么好处呢?这个变量不存在了,就意味着寄存器的压力减小了很多,可以腾出更多空间给更有需要的变量。

Medium

除了上述优化以外,还加入了很多新的优化。

a=b+c+d;
e=b+c+f;

这个时候可以优化成这样:

tem=b+c;
a=tem+d;
e=tem+f;

High

最高程度的优化。具备以上所有的优化之外,还有:

说明:上面有些优化,可以在iar中配置是否要使用。

高级别的优化选项回增加代码编译的时间,并且会在调试的时候出现一些困难,比如有时候想在某个位置打断点却发现打不上,因为那里的代码已经被优化掉了,有时候想看某些变量的值,却发现live watch显示这个变量无法查看,也是被优化掉了。

4 官方文档

主要的就是这些,其他的可以自己查看文档。
关注微信公众号“稳准快”,发送IAR用户手册领取。

稳准快
上一篇 下一篇

猜你喜欢

热点阅读