一直听说IAR编译效率很高,今天就用Keil和IAR同时编译了dhrystones测试程序测试了一下效率~
这里使用的C51和IAR C/C++ Compiler for 8051都是目前(2010.11)我能找到的最新版。
关于Dhrystone测试的简短介绍可见http://baike.baidu.com/view/1885614.htm
Keil uVision V4.10, C51 Compiler V9.02
使用
9级代码体积优化
Program Size: data=15.1 xdata=5523
code=5179
182 dhrystones/second
使用
9级代码速度优化
Program Size: data=15.1 xdata=5523
code=5313
189 dhrystones/second
使用
8级代码速度优化
Program Size: data=15.1 xdata=5523 const=0
code=5597
198 dhrystones/second
使用
8级代码速度优化,
LX51链接
Program Size: data=15.1 xdata=5523 const=0
code=5594
198 dhrystones/second
使用
11级代码速度优化,
LX51链接
Program Size: data=15.1 xdata=5523 const=0
code=5594
198 dhrystones/second
Keil C51编译效率测试
IAR Embedded Workbench, IAR C/C++ Compiler for 8051 7.60.1 (7.60.1.40026)
代码体积优化(最高)
4 962 bytes of CODE memory
25 bytes of DATA memory (+ 7 absolute )
5 704 bytes of XDATA memory
64 bytes of IDATA memory
8 bits of BIT memory
211 dhrystones/second
代码速度优化(最高)
4 733 bytes of CODE memory
25 bytes of DATA memory (+ 7 absolute )
5 704 bytes of XDATA memory
64 bytes of IDATA memory
8 bits of BIT memory
255 dhrystones/second
IAR C/C++ Compiler for 8051编译效率测试
为了保证测试的公平性,在测试时使用了统一的第三方仿真软件Raisonance 8051 Simulator来仿真。先用keil和IAR编译出hex文件,然后一起放到Simulator里去仿真。仿真时使用AT89S51,12MHz晶振。
IAR在编译时printf库大小选择为medium。
看来在该测试中
IAR的代码优化确实做得很恐怖的,无论是代码大小和速度都要比keil C51更胜一筹~
更神奇的是在这个测试中代码速度优化生成的代码比体积优化还小!仔细检查了输出的raw-binary格式文件,确实是速度优化时更小!
在使用
Keil的实验中发现,在本测试程序中,8级优化和11级优化,使用BL51或LX51,在速度上都没有区别。使用lx51做链接器的优点就是能
省3个字节。
另外,在本测试程序中,无论开启还是关闭全局寄存器着 {MOD}对代码速度和性能都
没有影响。
使用9级优化(Common Block Subroutines)会减慢程序运行的速度(189 dhrystones/second),甚至比8级优化时还慢。不过可以缩小些代码体积,这点经验大家可以借鉴下。
顺便附上个IAR EW8051 V7.60 完全光盘Full正式版下载链接(感谢formula555):
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4131100&bbs_page_no=1&bbs_id=9999
测试程序见附件,大家也可以自己试一下。
点击此处下载
ourdev_601488JZZ3L4.rar(文件大小:192K) (原文件名:dhrystone.rar)
C51中的 _at_ 在 IAR 中怎样实现的 ?
unsigned char xdata FSCON _at_ 0xFC00;
unsigned char xdata FSCMD_at_ 0xFC01
你是对的,
对于扩展特殊功能寄存器(0xFC00-0xFC08) 不能用 __sfr
FSCON fc00H ------00 ---- ---- ---- ---- ---- ---- IFEN BOOT
FSCMD fc01H -----000 ---- ---- ---- ---- ---- COMD.2 COMD.1 COMD.0
FSDAT fc02H 00000000 FSDAT.7 FSDAT.6 FSDAT.5 FSDAT.4 FSDAT.3 FSDAT.2 FSDAT.1 FSDAT.0
LOCK fc03H ----0000 ---- ---- ---- ---- ILKF DLKF PLKF FLKF
PADRD fc04H --000000 ---- ---- PADRD.5 PADRD.4 PADRD.3 PADRD.2 PADRD.1 PADRD.0
XADRL fc05H 00000000 XADR.7 XADR.6 XADR.5 XADR.4 XADR.3 XADR.2 XADR.1 XADR.0
XADRH fc06H -0000000 ---- XADR.14 XADR.13 XADR.12 XADR.11 XADR.10 XADR.9 XADR.8
YPADR fc07H 00000000 YADR.7 YADR.6 YADR.5 YADR.4 YADR.3 YADR.2 YADR.1 YADR.0
YADRH fc08H -0000000 ---- YADR.14 YADR.13 YADR.12 YADR.11 YADR.10 YADR.9 YADR.8
只能
__no_init __xdata volatile unsigned char FSCON @0xFC00;
__no_init __xdata volatile unsigned char FSCMD @0xFC01;
__no_init __xdata volatile unsigned char FSDAT @0xFC02;
__no_init __xdata volatile unsigned char LOCK @0xFC03;
__no_init __xdata volatile unsigned char PADRD @0xFC04;
__no_init __xdata volatile unsigned char XADRL @0xFC05;
__no_init __xdata volatile unsigned char XADRH @0xFC06;
__no_init __xdata volatile unsigned char YADRL @0xFC07;
__no_init __xdata volatile unsigned char YADRH @0xFC08;
__no_init __xdata volatile unsigned char PADRM @0xFC0F;
一周热门 更多>