原创 KEIL MVDK VS IAR EWARM项目实战(谁更有效率??)!!!

2010-7-1 10:20 7158 11 13 分类: MCU/ 嵌入式

KEIL RVMDK VS IAR EWARM<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


项目实战比较(谁更有效率?)!!


                                                       --By dz561(电子561


    KEIL IAR Systems都是嵌入式领域系统开发工具和服务商(IDE)的供应商,前者成立于-1986年,总部在德国(如今已被大名鼎鼎的美国ARM公司收购);后者于成立1983,公司总部位于北欧的瑞典。


二者的最著名的产品分别是 KEIL uVision IDE IAR Embeded Workbench。目前他们最新的产品(用于ARM的开发工具,当然也可以用于开发51单片机)的IDE分别是RealView MDK -ARM4.10)和IAR EWARM 5.40


    对于二者,嘿嘿,各位具有丰富设计经验的GGMM恐怕都不陌生吧,估计大部分的开发人员都用过。因为他们都可以很好的支持各种不同版本的MCU。对于不同的开发环境,用久了,便会日久生情。用得顺不顺手,快不快乐,或喜欢,或讨厌等等,都因人而异的。然而我们不能不考虑这个问题:能选择到最适合自己,更有效率的工具,才是最好的。


先说说本人的个人经历吧。 先说KEIL,个人感觉KEILIDE界面比较通俗易懂,属于平易近人的那种,尤其软件仿真功能做得很不错,各种外设的仿真都很好,软件仿真,没得说,就是栩栩如生,不好一点呢,印象中总是那个大名鼎鼎的文字编辑的BUG了,KEIL的有些版本对于EDIT编辑对于汉字支持,怎一个烂字了得! IAR呢,界面简洁明了,软件仿真虽然没那么强悍,但仿真起来也没什么问题,该咋地就咋地,整体感觉——专业。不好一点呢,就是对初学者来说入来说不太容易掌握。但用上手了,你就会感到有安全感。


    曾几何时,在用51单片机的时候一直用KEIL C51 这个工具,刚刚用的时候从不考虑各种效率和技巧的问题,毕竟当时经验也不是很多,追求的是会用。用久了,对其的各种操作久了,对其风格也渐轻车熟驾,版本前变万变也就那样,操作仍如往常。渐渐的便觉得KEIL还不赖,因此再用其他工具变很容易产生一种排斥之感(地方保护主义,嘿嘿)。


    然而现实总是有压力的,对于学习,也是这样。很多情况下还不得不‘被’接触其他工具。终于有一次项目开发,用到IAR,开发IC也是基于51内核的IC,是TI公司的一片RF IC CC1110。刚开始确实对IAR不感冒,总喜欢拿KEIL来做比较,有一种本能的排斥。总感觉IAR,很小儿科,不专业,比起KEIL来根本不是一个档次。当项目开发完的时候,又用回了KEIL C51。但是,后来发现错了,真的错了。就是我们常说的,当你失去一件宝贵的东西的时候,你才发现,原来学会珍惜,是多么的重要。这次用了KEIL C51,竟然让我时常的怀念起了IAR。。。


    这是为什么呢, 回想当时在用IAR,自己用得很顺手,那感觉就是像座上宝马做开发一样,而现在用KEIL,有时你真的不得不鸟它几句,像驴一样的东西。怀念IAR它简洁明了的界面,高效编译的速度,甚至有时让你感到它的就是对的,错的就是你。想想这次用的KEIL 怎么没有像IAR的那种感觉呢。我想这一切总会是有原因的。



    而现在用上ARM了,开发ICSTM<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />32F系列,基于ARM公司的最新内核CORTEX-M3。目前有个项目既可用KEIL RVMDK平台也可用IAR EWARM平台。但一直想弄个明白,RVMDK VS IAR 到底谁效率更高,下面我用同一个项目做测试比较。希望能解开心中纠结。


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />点击看大图


测试版本:


Keil uVision V4.00,RVMDK 3.5(1999-20009) + IAR EWARM 5.40(2002-2009)


测试项目: 


pwhid


测试性能主要从以下两个方面来测试:


A. 项目整体编译速度   B. 代码产生效率(即最终代码大小,HEX文件)


测试日期:20100523


 


测试结果及过程:


A.整体编译速度(Built ALL)


在等同配置,即KEIL的时候要求Target 设置的Ouput项:


选上:Debug Information + Create HEX File + Browse Information


其他保持默认(要选中CLIST项)。


同样在IAR环境下,需要尽量配置成等同的配置,其他需要全部选中LIST项。


二者,在Rebuilt All 的时候:


KEIL RVMDK的表现:


编译的完成的速度约为17s(目测速度)


IAR EWARM的变现:


编译完成的速度约为12s(目测速度)


结论:


IAR EWARM的编译速度要比KEIL RVMDK快!


 


也就是说,在你使用KEIL RVMDK编译同一个项目的时候你每一次,都需要多等5秒钟。


这一小5秒,积累起来就成了很大的5秒了,无形中为自己的开发节省了多少时间。


为什么KEIL需要那么长时间呢,主要因为在编译产生 Browse Information的时间太多。


如果把这个取消掉就会快了很多了。


这里有一个使用小诀窍,每一次都Rebuilt ALL,是不明智的,当第一次Rebuilt All的时候


如果其他文件并无改变的话,直接用Built 就行了,这样编译速度就很快了。


B.代码产生效率。


不同的编译器都有自己的不同之点。然而,编译的结果终究是要产生可执行的文件。


点击看大图


点击看大图


这次以HEX文件为例,分别在编译器不优化和最佳优化这两种情况


下作比较。


IDE都不进行优化的时候:


KEIL的优化配置选LEVEL 00IAR的优化配置选NONE,其他默认。


KEIL RVMDK的表现:


HEX文件大小为:68.5KB


IAR EWARM的表现:


HEX文件大小为:48.0KB


结论:


真是不比不知道,一比吓一跳。没想到同一个项目,RVMDK产生的垃圾代码真不少。


IDE都进行最佳优化的时候:


KEIL的优化配置选为LEVEL 03IAR的优化配置选HIGHBALANCE),其他默认。


KEIL RVMDK的表现:


HEX文件大小为:53.6KB


IAR EWARM的表现:


HEX文件大小为:35.7KB


在二者编译器默认的优化配置时


KEIL MVDKdefualt(即LEVEL02),IAR EWARMLOW


二者表现分别是:


53.5KB 45.6KB


结论:


相差8~18KB,还是人比人吓死人,鸡比鸡吓死鸡。


想想,为什么KEIL MVDK的编译效率那么低呢,如果在KEIL未被ARM公司收购之前,KEIL的这般效率,也不足奇怪。究其原因,那是因为KEIL MVDK在编译的时候都统统把文件中所有的函数编译成目标文件了。但是有一些永远都不会用到的(即未调用的函数)。那么如何去掉这个不负责任的编译呢。 有办法,那就是在KEILTARGET 选项上,要选上Use Cross-Module Use MricoLib 这样KEIL的优化效率就飞速提升了,甚至超过了IAR的编译效率(IAR配置为HIGHsize)。 分别如下:


KEIL RVMDK的表现:


HEX文件大小为:33KB


IAR EWARM的表现:


HEX文件大小为:34KB


结论:


得益于ARM的鼎力支持(其实KEIL已属于ARM的一个部门了)KEIL的编译优化方面已有一定的提升。不过IAR也不赖,编译速度一直很稳定。


点击看大图


最后总结:


在这次实测中,发现KEIL 在编译速度方面确实比IAR慢一些,而且奇怪的发现了KEIL每次的编译结果有可能都不一样,要想得到最终结果,你可能需要多编译几次才行,这一点真让人恐怖!


对于IAR,用得多了,偶尔也会发现一些令人不满意的地方,就是,IAR,有时会‘休克’,装死,当然KEIL也多多少少存在一点。 至于是不是IAR本身的问题,这个就不得而知了。 因为XP系统也不是很可靠的东西。另外这次只是中等项目编译的比较。


以上是这侧项目的实测结果,但是还不知道程序能不能跑,稳定性能如何。但是无论怎样,是驴是马,跑出来溜溜就知道了。经程序下载检验,一切正常。至于稳定性能如何还有待测试。


如果那个网友感兴趣可以下载到自己的硬件板上做测试。发现什么问题别忘了提出来(硬件平台为STM32F103C8RB,最小系统即可,有USB功能),下面是我测试的程序运行结果和测试文件:


点击看大图


令温馨提示一下:


这里应该算是MDK的一个BUG,


在KEIL MDK中,硬件仿真时,对于数组变量的擦看,如果数组量很多时候,你所看到的数据有可能不对,而IAR EWARM则没有发现这个问题,我曾在21IC上发过贴(有兴趣,可以去搜搜看)


另外,编译器的优化,要慎用。


毕竟这是机器优化,有时会出现一些令人惊奇的,莫名奇妙的错误。


比如说,你在函数内部要使用一个变量的时候,它就无缘无故的把你要想用的变量优化掉了,变成了永远的 unavailable !


最好的办法,是要对自己要写的代码有信心。


 


呀呀USB_hid上位机及程序文件请到dz561的个人博客上下载:


http://www.ednchina.com/blog/itspy


终上PK 结果,心底终于有点数了。整体上,感觉还是IAR略胜一筹。不过话又说回来,事物总会在变的,这些只是工具而已,罗布青菜各有所爱吧。

文章评论2条评论)

登录后参与讨论

用户1369714 2010-9-30 09:30

呵呵,确实得更正一下,对于ARM来说,确实不必用HEX来比效率,但从另一个侧面上反映了二者的效率

用户1461376 2010-9-29 15:43

看了你的文章都不错,这篇却用HEX文件大小来比较.着实让人.... 真比效率,还是比map文件和具体某段代码编译出来指令才有意义.
相关推荐阅读
用户1369714 2012-04-12 12:34
大家好,我是itspy,关于这个博客,请大家看过来!
大家好,我是itspy,关于这个博客...,很失望,以后不会用了 如果大家有什么问题,请到我的另一个博客去留言吧 我也很希望跟大家做交流,有什么技术问题,itspy会很乐意帮助的,新博客欢...
用户1369714 2011-08-07 14:35
uip 移植在rt-thread上的源码
*/本人在以前开发过程中移植uIP到RT-Thread实时线程系统,有需要用到项目中的朋友可以参考一下。 附件是源码包,在以太网驱动采用DM9000,驱动程序和移植文件uipif.c在源码包下(rt...
用户1369714 2011-01-13 10:32
Linux内核的社会视角--Mr. Process的一生
         Linux内核是一个无比复杂的系统,要想看清大致的脉络也非易事。其实,可以把运行中的Linux想像成一个人类的社会,当中的进程就是社会中的人。人有生老病死,进程有创建、异常、终止。人...
用户1369714 2011-01-08 12:39
RT-Thread Radio 网络播放器--初次零距离接触!
      今天很高兴, 收到了RT-Thread Radio套件,还有ffx和RT-Thread工作室写的新书《RT-Thread 实时操作系统 编程指南》。 如此令人快乐的事,如此高兴,实在是想不...
用户1369714 2011-01-05 15:43
如何编写linux的驱动程序
如何编写Linux的驱动程序编写linux驱动程序,应该是一件得心应手的事,因为linux是开源的,从上往下或从下往上,一切都是那么的光明磊落的呈现于眼前。只要你愿意,你可随意了解你所想知道的东西。L...
用户1369714 2010-12-28 10:12
Busybox制作Linux根文件系统
Busybox ——嵌入式Linux中的瑞士军刀利用busybox-1.13.0制作linux根文件系统(yaffs2)源码下载:http://www.busybox.net/downloads/操作...
我要评论
2
11
关闭 站长推荐上一条 /2 下一条