据说IAR开发arm比keil方便,没有用过IAR,是这样吗?用过的大虾给说下如何?
据说IAR开发arm比keil方便,没有用过IAR,是这样吗?用过的大虾给说下如何?我主要用keil+jlink来调试arm7了! 我 也想了解 这两个其实都差不多,IAR多了一些调试插件(uCOS、Threadx),
Keil可以做软件直观的IO口的仿真;
楼下继续。。。 重IAR转向KEIL的飘过。。。。 回复【楼主位】edaworld 笨笨小熊
-----------------------------------------------------------------------
lz能不能发一份,keil与arm7教程。谢谢,这方面资料少 没有好与不好,只有会与不会。 还是KEIL(MDK)好。 IAR代码执行效率比MDK高多了,而且比MDK稳定。 IAR单键就可完成编译,下载。mdk需要2个按键。 没有关系的,用熟了,用什么都一样。
没有足够的理由,不要折腾工具,够用就好。
只会keil,不会iar。 en, IAR的编译器是最好的…… 如果两者都用熟的话应该区别不大吧。不过IAR能设置的东西更多一些,有时候会很有帮助 我也觉得IAR是最好的,很多人没做过项目,没做过对比,仅仅听到MDK是原厂的,就产生了盲从。 IAR,MDK都是双鞋子,跑的快不快和鞋子关系不是很大,关键看自己,不是所有的人穿上刘翔的鞋子就能跨栏的 我穿刘翔的鞋子跑 肯定比 我穿自己的鞋子跑的快。
有没有人比较一下。它们俩个编译器 谁 生成 的代码 少。 Micrium.com上面下载的uc/osii2.86在STM32B-EVAL上面的Port。IAR和MDK都是最高优化:
MDK4.11编译结果
Program Size: Code=33466 RO-data=4870 RW-data=196 ZI-data=9296
".\rvmdk\STM3210B-EVAL-OS-Probe.axf" - 0 Error(s), 2 Warning(s).
IAR5.412编译结果
14 412 bytes of readonlycode memory
5 616 bytes of readonlydata memory
8 636 bytes of readwrite data memory
结论:IAR是宝马,MDK是老牛破车。 点击此处下载 ourdev_555184.rar(文件大小:2.80M) (原文件名:Micrium.rar)
Micrium的官方代码在这里,原IAR和MDK项目都是较低优化等级,为了公平起见都开到最高优化等级,其他未作改动,感兴趣的童鞋可以自行比较一下。 我也觉得IAR是最好的,很多人没做过项目,没做过对比,仅仅听到MDK是原厂的,就产生了盲从。
=======================================================================================
搞笑。 MDK不仅效率低下,而且Bug还挺多。Printf函数导致死机一直莫名奇妙的存在,勾microlib的解决方法有的版本好用有的版本就不行,真不知道他们是怎么搞的。 回复【18楼】fetish
mdk不仅效率低下,而且bug还挺多。printf函数导致死机一直莫名奇妙的存在,勾microlib的解决方法有的版本好用有的版本就不行,真不知道他们是怎么搞的。
-----------------------------------------------------------------------
能详细的说说? 转:
RV下使用printf时要加多RETARGET.C
以前CARM下只要加个putchar或getchar就行,现在要加个RETARGET.C,,,,这个文件在arm\Startup 下
这个文件中有个#pragma import(__use_no_semihosting_swi) // disable semihosting
如果这没有这句就会死在SWI_Handler B SWI_Handler这句
具体的大家可以试试..
其实用新的编译器,一定要看一下帮助,这个问题浪费了我20分钟...... 关于在MDK中使用 printf 函数,可以软件仿真,不能硬件仿真的解决
http://blog.csdn.net/laorenshen/archive/2009/11/07/4782339.aspx 说了这么多 看来仁者见仁智者见智啊 re【20楼】:
MDK只要用到了printf()函数,加载到目标CPU上面的就是一堆乱码,main()函数都进不去,跟你说的无关。
但是某些版本可以通过勾上use microlib解决掉。我已经对MDK彻底绝望了,所以那个版本好使哪个不好使记不清了。
你还可以看看15楼的测试结果,MDK生成的代码居然是IAR生成代码量的2倍,这已经不能用垃圾来形容这个编译器了。
垃圾中的垃圾! 回复【23楼】fetish
-----------------------------------------------------------------------
2倍就是垃圾?你开发个IDE、编译器看看是不是垃圾
看来你的水平一定是很垃圾 回复【24楼】qwerttt
回复【23楼】fetish
-----------------------------------------------------------------------
2倍就是垃圾?你开发个ide、编译器看看是不是垃圾
看来你的水平一定是很垃圾
-----------------------------------------------------------------------
MDK的粉丝真不争气啊,现在只能靠抒情来挺这个垃圾乐。./emotion/em006.gif
可惜的是,搞工程靠的是理论和实践,抒情是没有用的。 不能光比代码大小。
否则大家都用汇编算了。
用什么VC,BCB。。。 最好也比比速度。看一些国外测试,RVCT比GCC快不少。但好像没有跟IAR比较的测试。 还用一个问题就是:不是每个人都用UCOS。
编译一般的无OS程序,IAR编译的代码比KEIL少一些,但达不到2倍。
我测试了一下:IAR 297K .KEIL320k。。。BIN文件。
对我来说,无所谓,因为FLASH 512K ... 另外,最好找一些没有针对编译器优化过的代码,我感觉UCOS这类小系统主要应用在低端单片机,IAR无疑是这个领域的王者,其代码很有可能有针对IAR进行过优化。
就我自己写过的CM3和ARM7代码而言(10-30K,没用任何C库,单片机的库也是源码编译),用最高代码优化选项下MDK和IAR编译出来的大小不相伯仲,差别在5%以内。GCC则大20%左右。 不想多加评论,看一下这个帖子.
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3896257&bbs_page_no=1&search_mode=4&search_text=lgl_debug&bbs_id=9999
MDK的优化是有分类的,当你用全是自己定义函数时,你不用MicoLIB程序会小几百字节到1~2K不等,这要看你和程序大小了.
还有实时性优化和函数是否多次调用的函数进行优化.
刚又式了一下,最大与最小的比较如下,用的是KEIL的例子:
D:\Keil\ARM\Boards\Keil\MCBSTM32\USBMem
MicoLIB 关
优化等级 -O0
Program Size: Code=7118 RO-data=4722 RW-data=68 ZI-data=8908
MicoLIB 关
优化等级 -O3
Program Size: Code=5366 RO-data=4722 RW-data=68 ZI-data=8908
MicoLIB 开
优化等级 -O3
Program Size: Code=5118 RO-data=4722 RW-data=68 ZI-data=8812
MicoLIB 开
优化等级 -O0
Program Size: Code=6870 RO-data=4722 RW-data=68 ZI-data=8812
还有速度方面的优化就这样说没有什么意思,要用示波器看实际运行的.
IAR 是分Size和Speed优化的,还有什么循环,函数优化....用的也不是很多. 回复【15楼】june4th
micrium.com上面下载的uc/osii2.86在stm32b-eval上面的port。iar和mdk都是最高优化:
mdk4.11编译结果
program size: code=33466 ro-data=4870 rw-data=196 zi-data=9296
".\rvmdk\stm3210b-eval-os-probe.axf" - 0 error(s), 2 warning(s).
iar5.412编译结果
14 412 bytes of readonlycode memory
5 616 bytes of readonlydata memory
8 636 bytes of readwrite data memory
结论:iar是宝马,mdk是老牛破车。
-----------------------------------------------------------------------
我也编译了一下,Realview MDK 3.50
你楼下的工程,打开后更改配置:
1、优化选 -O3(原来 -O1)
2、去掉按时间优化(原来 -Otime)
3、选 One ELF Section pre function
4、选 microlib
最后结果是:
Program Size: Code=15144 RO-data=4892 RW-data=196 ZI-data=9200 所以呀,差距是绝对不可能这么大的,MDK毕竟也是ARM家的,差距要真这么大,ARM也别出编译器了 另,IAR 对空间的优化确实做得好,好到近乎变态的地步了
我常用的是 AVR
看它生成的代码,简直就是恐怖啊 回【31楼】 Cliff ,
谢谢你提供的参考.
IAR
14 412 bytes of readonlycode memory(CODE)
5 616 bytes of readonlydata memory(RO)
8 636 bytes of readwrite data memory(RW+ZI)
CODE+RO=14 412+5 616=20028
MDK
Program Size: Code=15144 RO-data=4892 RW-data=196 ZI-data=9200
CODE+RO=15144 +4892 =20036
其实相差又有多少呢?
其实用的顺手就可以了,MDK用多多Flash,RAM的区选择,可以单个文件设定的.
在高效运行模式可以把一个C 文件写到一个RAM去运行,那种效率是无法说的,用LPC2210,44B0的话,就知道了.
IAR只有可能写预编译实现在,烦都烦死了.还不一定. 补充:用了 MDK 411
Program Size: Code=15232 RO-data=4892 RW-data=196 ZI-data=9200 回复【25楼】fetish
-----------------------------------------------------------------------
MDK的粉丝真不争气啊,现在只能靠抒情来挺这个垃圾乐。
可惜的是,搞工程靠的是理论和实践,抒情是没有用的
-----------------------------------------------------------------------
你的代码有多少K?你做过产品吗?还工程
就靠优化你的工程就能完成,切,一边玩去
别在这人云亦云
再说你了解IAR优化吗,一个看不懂汇编的人,还说IAR的优化
真搞笑fetish同学 回复【34楼】lgl_debug
其实用的顺手就可以了,MDK用多多Flash,RAM的区选择,可以单个文件设定的.
在高效运行模式可以把一个C 文件写到一个RAM去运行,那种效率是无法说的,用LPC2210,44B0的话,就知道了.
IAR只有可能写预编译实现在,烦都烦死了.还不一定.
-----------------------------------------------------------------------
IAR选用不同的ICF文件即可选择Flash和RAM区,修改ICF文件就可以指定位置。
【36楼】:
摆事实讲道理我可以跟帖,胡乱咒骂只能丢MDK粉丝的脸,没什么别的道理,跪安吧! 回复【37楼】fetish
回复【34楼】lgl_debug
【36楼】:
摆事实讲道理我可以跟帖,胡乱咒骂只能丢mdk粉丝的脸,没什么别的道理,跪安吧!
-----------------------------------------------------------------------
你喜欢IAR可以,但是不要通过贬低MDK的方式
是你先大言不惭,说什么“MDK生成的代码居然是IAR生成代码量的2倍,这已经不能用垃圾来形容这个编译器了。垃圾中的垃圾!”
既然你可以骂,为什么又不允许人家骂你呢?
还是请你先搞懂为什么“MDK生成的代码居然是IAR生成代码量的2倍”
或者,你是否能够回应36楼,说出他“胡乱”的依据?比如一开始的问题:你的代码有多少K?你做过产品吗?
如果你能回答,就是对36楼最好的反击 回复【37楼】fetish
-----------------------------------------------------------------------
这种比较,已经不是热门话题,任何人都可以比较IAR和MDK的优化性能
但选择一个IDE作为产品开发,不是只看优化。
我可不是MDK的粉丝,我用IAR的时候你还在学电路吧
只是我发现fetish说2倍尽然是垃圾,你是在误导初学的人,这么浮躁的愤青
你的摆事实讲道理就是2倍代码的关系吧,只见树叶不见森林
结贴,没必要在往下讨论,踏实做好产品 结果到最后也没有说明白为什么MDK生成的代码是IAR的两倍。楼上的发了那么多牢骚,真正有用的一句也没有讲出来。哎。 O(∩_∩)O哈哈~,还是用mdk了,方便,熟悉,多谢楼上各位了,没想到惹出这么多话题,啊哈哈! ads1.2又何如? IAR有几个问题
1.编译速度比较慢.有时候容易死掉需要有比较好配置的机器才能很好的工作.
2.仿真起来不太好.像cortex/ucos无法仿真任务切换.试了下mdk.仿真好像是很强大. 楼上你说反了,MDK不仅编译出来的代码执行速度慢,而编译时间也要慢得多。同样一个ucos项目,在Athlon1700+的机器上,MDK全部编译要50秒左右,而IAR不到30秒就可以完成。
仿真方面,MDK只支持一种RTOS——他自己的RLARM,其他所有RTOS都不支持。而IAR支持的RTOS就太多了,就仿真这个层面上,MDK依然不及格。而RLARM是MDK独有的,你用了它就要吊死在MDK这棵树上了,同样的IAR的PowerPac也是这个毛病。 只说IDE的程序编辑器,这两家做的都是不及格的水平.......就不能学学eclipse,集成个能用的编辑器么..... 呃,最近看到有人做了个比较新的横向对比:
http://www.mcuzone.com/MAN/MAN3004A_CH.pdf
这对比用的版本都比较新,里面MDK已经用rvds4的编译器了,就DMIPS的成绩来看,keil最好 MDK的好处是可以和gcc结合,源码级调试。
比如说要调试ecos,可以用MDK to 【44楼】 marx ●█〓
PowerPac就是embos。。。呵呵
to 【45楼】 ilovezeno 鸣
eclipse就不能学学IAR和MDK少占点资源。。。呵呵
其实没啥好比的,喜欢用哪个就用哪个。。。一般的应用都可以实现。。。
我是喜欢用IAR,不论用51,AVR,AVR32,SAM8,ARM,430,78k,H8,ColdFire都是统一界面。。。
最不喜欢就是ARM公司自己搞的编译器。。。
从SDT2.5,SDT2.51,ADS1.2,到realview2.0,2.1,2.2,3.0,直到4.0,例程少得可怜,而且稳定性极差,界面乱78糟。。。唯一可以show的就是它的编译效率。。。这个没办法,谁让人家是亲生的呢。。。
另外,我个人觉得大家技术讨论,摆事实讲道理,没必要开骂嘛,对吧。。。 回复【44楼】marx●█〓
-----------------------------------------------------------------------
RTOS的支持,如果你指代码编译,那么,基于标准C的,两家差不多。
不太清楚IAR是否支持C90,MDK v4是已经支持的了。这个是末节。
如果说在调试的时候查看RTOS状态,那么这个是IDE插件开发的问题。
IAR自己不做RTOS,有更开放的接口,所以大家都写插件给他;Keil自己开发RTOS,自然不太乐意让别人的RTOS插件加入进来。
IAR好在统一的界面,所有芯片系列都是那个样子开发。Keil就是绑在ARM上。
编译器和IDE是两个概念。不好混起来讨论。
编辑补充:
IAR基本上专注于编译器,别的都是合作出去,所以,支持的东西会广泛,而且比较好。
Keil调试工具,编译器,RTOS,什么都搞,为保证自己的利益,开放性肯定要差的多,这没太多好说的。 都是牛x 个人感觉IAR比MDK稳定,但仿真没有MDK做的好。 新版的MDK4.x编译慢了好多,旧版本的快
MDK编译的代码大小比IAR大一倍不至于吧,是不是开了最高速度优化啊,优化也有不同方向的 以前用KEIL C51,感觉还好。后来用IAR-》AVR,只是很多标准的C函数不支持,走了很多弯路。在用CM3中,IAR支持行汇编,这个比较方便,还没有试过标准的C函数,是不是都支持。至于大小不是最重要的,有差别,但不会相差太大。 呃,最近看到有人做了个比较新的横向对比:
http://www.mcuzone.com/MAN/MAN3004A_CH.pdf
这对比用的版本都比较新,里面MDK已经用rvds4的编译器了,就DMIPS的成绩来看,keil最好
===============================================
这个结论是:
http://cache.amobbs.com/bbs_upload782111/files_30/ourdev_567416H2PAWC.jpg
各个平台 Dhrystone 最高分比较 (原文件名:Dhrystone.jpg) 下面发一个ICC 11.0,GCC 4.4.4 ,VC++ 9/10,Keil 4.12 最高优化下都能编译通过但 IAR 5.412 / IAR 5.501 在最高优化下无法编译通过的例子程序,在 Debug 模式下都能通过。
具体错误在 IAR 5.412 / IAR 5.501 的优化中不能选择: Type-based alias analysis 这个优化选项。
一个测试 CM3 平台的 FFT 程序;邪门的是在Debug模式下从运行结果看 IAR 比 Keil 快.一些输出结果片段:
MDK FFT 1024 ms:79
MDK FFT 1000 ms:88
IAR FFT 1024 ms:73
IAR FFT 1000 ms:75
同样的程序在 OMAP3530 平台上,不开优化大概在 21/17 ,打开硬浮点和 A8 指令优化后在 9/7 毫秒.
FFT 测试程序ourdev_567419I8JZRV.rar(文件大小:1.48M) (原文件名:FFT.rar)
后注:
在 5 月份向 IAR Email 反映此结果后,在今天最新版的 IAR 5.505 版本中最高优化下已经能够编译通过。 回复【20楼】eworker
转:
rv下使用printf时要加多retarget.c
以前carm下只要加个putchar或getchar就行,现在要加个retarget.c,,,,这个文件在arm\startup 下
这个文件中有个#pragma import(__use_no_semihosting_swi) // disable semihosting
如果这没有这句就会死在swi_handler b swi_handler这句
具体的大家可以试试..
其实用新的编译器,一定要看一下帮助,这个问题浪费了我20分钟......
-----------------------------------------------------------------------
对printf进行重定向,很正常啊~ 学习了 学习中,2个都想搞,这些东西应该切换很快的吧 回复【7楼】schwarz
iar代码执行效率比mdk高多了,而且比mdk稳定。
-----------------------------------------------------------------------
很赞同!!!刚从MDK转向IAR的话有点不习惯,用了一段时间才发现,IAR有很多优点 mark 讨论的这么激烈啊!呵呵! iar 好比vc++ ,keil 好比c++ bu。。。。。 iar好,keil写法好点,严谨度方面iar好。我只用过nec for iar的,感触 mark IAR MDK都用过,但我喜欢IAR,生成代码小,编译速度也快。 说到代码量,你们让GCC用户情何以堪 IAR兼容性能好,你如果更换MCU,基本IAR都有,430,AVR,STM8,FREECALE都有非常多,界面都一样,非常爽
KEIL只有ARM和51的, keil只支持到arm9,iar能到A8 没用用过IAR,感觉MDK也就是不咋的。 学习 好久没碰软件的飘过~ 又来口水战了。 不要过于纠结工具,只是个工具而已 Alien2012 发表于 2013-2-1 23:42 static/image/common/back.gif
不要过于纠结工具,只是个工具而已
对的,赞同! 对MDK发几个牢骚:
1.MDK函数库没有IAR做的好, 试了库函数 很多都没有,而且有点问题,IAR下正确
2.支持中文GB2312也有问题 比如数组 char buf[]="此处为中文.....",转换过的GB2312码有的中文会错误,在IAR下没发现
3.只支持51和ARM,没有iar全
4.S5PV210等最新的cortex芯片IAR支持,MDK没有
5.......
因为编译器的莫名的问题,浪费了我很长时间, 只是习惯了MDK,正适应IAR中。。。。。。 Alien2012 发表于 2013-2-1 23:42
不要过于纠结工具,只是个工具而已
我也表示同意! 用不起正版的IAR和MDK,GCC挺好 yong zhe shun shou jiu hao 关注中!!! 写代码从来没有觉得编译器有什么差异。。。。。可能自己了解不够深,不过一般场合也没有必要那么考虑,只要不给你编译出bug就可以了, 写代码从来没有觉得编译器有什么差异。。。。。可能自己了解不够深,不过一般场合也没有必要那么考虑,只要不给你编译出bug就可以了
页:
[1]