IAR 程序优化
标签:
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
因为超过MCU的最大8Kbit 的 FLASH空间,导致报错。(芯片为STM8S103F3)
2,当程序选择优化后:
http://s15/mw690/001lQaoWgy6WXL8wBdA3e&690程序优化" TITLE="IAR
代码量大小变为:
http://s2/mw690/001lQaoWgy6WXLby6R371&690程序优化" TITLE="IAR
优化后代码节省近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条语句依然编译了,依然会运行:
仿真时,会发现这些结果都会运算出来:
但是会发现,在计算过程中,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
这时的由于本质上的定义的a,b,c,d····等都是没有使用的,所以全部被优化掉了。
仿真时,发现,都没有计算赋值过去:
http://s10/mw690/001lQaoWgy6X2A8mGxz19&690程序优化" TITLE="IAR

加载中…