加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

IAR 程序优化

(2015-11-13 09:59:53)
标签:

iar

代码优化

分类: 编程笔记

优化与不优化的代码量比较:

 

1, 在未选择优化时

优化选项位置: 工程名右键-> Options->

http://s1/mw690/001lQaoWgy6WXKNobra10&690程序优化" TITLE="IAR 程序优化" />

http://s3/mw690/001lQaoWgy6WXKWCxa262&690程序优化" TITLE="IAR 程序优化" />

选择优化选项:

http://s1/mw690/001lQaoWgy6WXKqJ92of0&690程序优化" TITLE="IAR 程序优化" />

代码量:
http://s7/mw690/001lQaoWgy6WXKvBvtc56&690程序优化" TITLE="IAR 程序优化" />

代码量大小是: 

8 721 bytes of readonly  code memory

    269 bytes of readonly  data memory
    793 bytes of readwrite data memory (+ 12 absolute)

因为超过MCU的最大8Kbit 的 FLASH空间,导致报错。(芯片为STM8S103F3)

 

2,当程序选择优化后:
http://s15/mw690/001lQaoWgy6WXL8wBdA3e&690程序优化" TITLE="IAR 程序优化" />

代码量大小变为:

http://s2/mw690/001lQaoWgy6WXLby6R371&690程序优化" TITLE="IAR 程序优化" />

  7 591 bytes of readonly  code memory
    263 bytes of readonly  data memory
    793 bytes of readwrite data memory (+ 12 absolute)

 

优化后代码节省近500byte


选择优化与不优化时,对程序编译的影响:

1,一般对于程序中,定义了而未使用的变量,如果选择了编译优化,程序一般对于这种程序语句会优化掉,不进行编译。  一般编译时,也会有提示,某变量定义了而未使用。

2,对于编译优化了的语句,在仿真运行时,一般表现为设置不了断点,因为那条语句已经被优化了。

 

这里以一个计算数据类型所占字节长度的程序为例:
特别注意:sizeof();  是一个关键字,而不是一个函数。

使用它时,不需要添加它的头文件,因为没有,它可以直接使用。

 

a,程序的编译过程中,选择不优化时:

http://s6/mw690/001lQaoWgy6X2wO6qIR35&690程序优化" TITLE="IAR 程序优化" />

这时,编译程序,程序会有警告提示:

提示已有定义的变量,而未参与使用。

http://s1/mw690/001lQaoWgy6X2wZp8E8e0&690程序优化" TITLE="IAR 程序优化" />

在定义的11个变量中,仅使用a,b两个变量,其余的9个都是没有使用的。

 

但是由于我们的编译器的优化里面 level选择的是none,所以9条语句依然编译了,依然会运行:

仿真时,会发现这些结果都会运算出来:

 http://s12/mw690/001lQaoWgy6X2yTMiDN9b&690程序优化" TITLE="IAR 程序优化" />

 见上图,图片中a,b,c,d,e,f····

但是会发现,在计算过程中,sizeof()也是都计算出来了,并且都赋值给了对于的变量。

 

 

b,程序的编译过程中,选择优化时,先Level选择 low时:
http://s5/bmiddle/001lQaoWgy6X2zd2ozq54&690程序优化" TITLE="IAR 程序优化" />

编译时,9个警告依然曾在。

仿真时,发现程序仅仅运行了,用到的2个变量,其余的均未赋值过去,但是sizeof()的值都已计算出来。

http://s3/mw690/001lQaoWgy6X2zohAmSb2&690程序优化" TITLE="IAR 程序优化" />

c,如果选择优化等级更高的Medium和High的时候:
http://s2/small/001lQaoWgy6X2ztxRZf11&690程序优化" TITLE="IAR 程序优化" />      http://s10/small/001lQaoWgy6X2zwbb4t89&690程序优化" TITLE="IAR 程序优化" />

 

这时的由于本质上的定义的a,b,c,d····等都是没有使用的,所以全部被优化掉了。

仿真时,发现,都没有计算赋值过去:
http://s10/mw690/001lQaoWgy6X2A8mGxz19&690程序优化" TITLE="IAR 程序优化" />








 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有