当前位置:首页 > 单片机 > 单片机
[导读]单片机编程软件是单片机开发不可缺少的工具之一,目前市场流通的单片机编程软件主要为IAR单片机编程软件和KEIL单片机编程软件。本文中,将为大家讲解IAR单片机编程软件编译优化问题,一起来了解下吧。

单片机编程软件是单片机开发不可缺少的工具之一,目前市场流通的单片机编程软件主要为IAR单片机编程软件和KEIL单片机编程软件。本文中,将为大家讲解IAR单片机编程软件编译优化问题,一起来了解下吧。

一、编译优化选项

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

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

二、优化还是不优化

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

所以还是有必要搞明白,优化到底优化了什么,才能决定要不要优化。

三、IAR优化了什么

1.None

有最好的debug支持,变量的生命周期会贯穿它的整个作用域,也就是说编译器不做任何优化,只要是变量的作用域,这个变量就是有效的。

最直观的的体现就是可以在live watch中查看该变量,如果它被优化了,就查看不了了。

2.Low

仍然是具备调试支持的,优化的是变量的生命周期,如果一个变量没有作用了,后面不会用到它了,就会把它优化掉,不让它贯穿它的整个生命周期。

这有什么好处呢?这个变量不存在了,就意味着寄存器的压力减小了很多,可以腾出更多空间给更有需要的变量。

3.Medium

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

· Live-dead analysis and optimization

代码是否可用的分析和优化

· Dead code elimination

无用的代码清除。

· Redundant label elimination

冗余标签消除

· Redundant branch elimination

冗余分支清除,所以可能出现由于对变量和分支的共同优化,导致某些条件分支明明成立却始终不会进入,一个大坑。

· Code hoisting

代码提升,很难理解的名字,其实就是它字面意思,就是把某些代码(变量定义)提到作用域的顶部去,可笑的是定义的顺序不变。也就是说,你定义了全局变量a=1,然后在某个函数里输出a,在下面定义局部变量a=2,最后输出的结果是乱码或者0,这取决于局部变量的默认初始化的值。在函数里真正被输出的,不是全局变量的a,而是局部变量的a,但是这个a只做了定义,初始化还在原位置。

· Peephole optimization

窥孔优化,通俗点说是局部优化,编译器对部分编译的代码,结合目标CPU的指令特点,做一些认为可以提高性能的优化。

· Some register content analysis and optimization

寄存器内容分析与优化

· Static clustering

静态聚类。将在同一模块内定义的静态变量和全局变量布置成使得在相同函数中访问的变量彼此紧密地存储。这使得编译器可以为多个访问使用相同的基指针。

· Common subexpression elimination

公共子表达式消去,在编程中会有很多地方使用相似的表达式,比如:

a=b+c+d;

e=b+c+f;

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

tem=b+c;

a=tem+d;

e=tem+f;

4.High

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

· Instruction scheduling

指令调度,编译器根据自己的指令调度器去重新安排指令,使得处理器运行时出现的资源冲突情况更少,从而减少资源冲突引起的卡顿情况。

· Cross jumping

交叉跳跃

· Advanced register content analysis and optimization

高级寄存器内容分析与优化

· Loop unrolling

循环展开。有一些小的循环体,在编译时就能确定其循环次数,编译器会启发式得试探是否将这个循环体复制展开,展开循环体能减少程序的迭代次数,从而加快程序的运行速度,但会增加代码的大小。

编译器会从速度和代码大小之间去找一个平衡点,优化速度和优化代码大小那个配置就会影响这个优化。

· Function inlining

函数内联

如果一个比较小的函数在编译时已经能确定其准确的定义了,编译器会决定将其内联到调用者的内部,这样就会减小函数调用的开销。

· Code motion

代码移动。对循环不变的表达式和公共子表达式进行移动,避免其被再次评估。这个优化会减小程序代码体积,加快执行速度。

· Type-based alias analysis

基于类型的别名分析。多个指针指向同一块内存,可以互相称之为内存的别名,因为这种情况会导致优化变得很困难,因为编译的时候不知道内存是否存在。所以编译器采用假设按照定义的类型分配了内存去编译优化。

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

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

以上便是小编此次带来的“单片机编程软件”相关内容,希望大家喜欢。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭