硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1905|回复: 12
收起左侧

[MDK] 吐槽MDK十四宗罪(顺便对比IAR和Embedded Studio)

  [复制链接]

4

主题

61

回帖

73

积分

初级会员

积分
73
QQ
发表于 2021-10-17 09:57:38 | 显示全部楼层 |阅读模式
本帖最后由 偶尔也很菜 于 2021-10-17 11:24 编辑

用了这3个IDE很多年,前几天在群里说MDK不思进取被网友反驳今天就吐槽一下MDK的一些问题:

1. 祖传的单级工程目录。        真的是祖(Keil)传下来的,这个毛病在工程特别复杂时的悲惨情况可参见硬汉做的ThreadX全家桶工程(附图)。就这么一个小问题任凭全世界程序员疯狂吐槽ARM公司却我自巍然不动,你们爱咋咋滴(ARM公司大概率这辈子是不会改了)。

2. 死亡弹窗。
    没错,就是在你忍受完MDK蜗牛般的速度费了好大劲下载完程序开开心心准备调试时突然弹出那个著名Encountered an improper argument窗口,点确定都没用只能动用任务管理器杀死进程,此时保证你心里一万个那个什么马奔过。这个问题在同时打开多个MDK时几率更大,出现的时候也没有任务征兆。有人说退出调试时把断点全部删掉就好了,实测删除断点也不能100%避免这个问题。再说了比起每次Debug完删除断点下次再打上我觉得杀进程更省事儿。ARM公司也知道这个BUG并承诺在将来某个版本中改进,最近MDK用得少了也不知道改进成啥样儿了。(难兄IAR也好不到哪去,自从升级到8.x版本后经常出现突然崩溃。Embedded Studio就稳定多了)

3. 速度慢,占用内存也大。
    MDK和IAR能慢到什么程度,同样的机器配置和工程规模实测Embedded Studio开关10次后这两个难兄难弟都还没有启动起来。不仅速度慢而且占用内存大,开两三个MDK就能明显感觉到机器速度变慢。如果说MDK是帕萨特IAR是蒙迪欧那Embedded Studio一定是法拉利458,MDK和IAR提供了一台1.5T发动机的功率和扭矩却成功消耗了8缸发动机的燃油。(其实不是MDK和IAR太慢而是后起之秀Embedded Studio实在太快。MDK退出调试要4~5秒而Embedded Studio只要惊人的0.1秒

4. 断点太多运行后直接进HardFault。
    MDK的断点如果超过8个进Debug后直接无条件进入HardFault,而且退出Debug后程序也不能运行必须重新烧写程序。群里有人说是我的J-LINK的问题,我想说同一个J-LINK为啥IAR和Embedded Studio在这个问题上就稳定如山呢。

5. 单行注释问题。
    这三个兄弟都可以直接使用快捷键注释掉当前行,但是MDK注释当前行的时候必须至少要选中一个字符才行,只把鼠标放在那一行上是不行的。我不知道成功实现这个脱了裤子FP功能的人是谁但他一定是整个ARM公司最靓的仔!

6. 编译代码时Build窗口抢焦点。
    使用笔记本的时候由于屏幕太小经常把Build Output窗口设置为自动隐藏,此时你如果编译代码那奇葩的事情就发生了,你会发现MDK每编译一个文件都会自动弹出Output窗口并不断把焦点抢走,这个时候你是无法写代码的。我想实现这个让人哭笑不得功能的人不一定最靓但一定也是个不世出的天才。

7. 头文件静态检查误报错。
    MDK有代码静态检错功能,这个很好另外两个兄弟都没有这个功能。但做的太不完善,头文件里面会误报错,各种红叉。

8. 进入Debug前不会自动编译修改后的代码。
    IAR和Embedded Studio都可以。MDK非要让你多一个步骤,考验你的APM。至少给个选项啊(知道的麻烦告知下)。
9. 进入Debug模式后无法自动运行程序。
    IAR和Embedded Studio都可以通过RunTo功能实现进入Debug模式后自动运行程序(比如让他们Run to到HardFault_Handler()来间接实现自动运行),但MDK就不行它就只能Run to main(),然后停在那里等待你按F5。

关于上两条问题我说个场景来看看IAR的效率是如何秒杀MDK的。假设你在找一个BUG,这个BUG只有在运行一段时间后才能看出来是否解决。此时正在Debug模式,你突然发现了问题所在需要修改一条代码后再次Debug后再看效果:
● 如果你使的是IAR,那恭喜你,你此时只需要按一下Ctrl+R,然后起身去泡杯咖啡,IAR会自动完成退出Debug模式、自动编译修改后的代码、重新进入Debug、自动运行代码等工作。等你闻到咖啡香气的时候已经看到了程序的运行结果。
● 如果你使的是MDK,那很不幸你要流着泪手动完成以下步骤:
→ 退出Debug模式。
→ 点F7编译代码。
→ 重新进入Debug模式。
→ 再点F5运行程序。
→ 去泡咖啡(如果你还有心情喝的话),等待程序运行结果。

10.头文件编辑时卡顿。
    当工程特别大的时候,编辑头文件时会每隔4~5秒就卡顿2秒钟,我不知道是什么原因但基本没办法在头文件中写代码。

11.Ctrl+TAB键无法切换至最近文件
    IAR和Embedded Studio按下Ctrl+TAB键都是切换到最近的文档,在当你在不同文档来回修改和查看的时候很适合盲操,这也是很多软件的习惯。而MDK偏不是,它是切换到下一个文档,试问切换到下一个文档有多少用处呢,这个功能基本废了。

12.文档选项卡上无关闭键
    只有IAR上有,MDK和Embeded Studio只能点右键再点一下关闭或者按Ctrl+W。细节决定成败。

12.Ctrl+Shift+H
    IAR按Ctrl+Shift+H可以在同名的c文件和h文件之间方便切换,MDK没有这功能,Embeded Studio我也没找到。

13.编译的时候无法查看和更改设置
    IAR和MDK都不行,编译代码的时候你改不了也看不了设置,Embedded Studio又赢了。

14.中文支持
    这个说起来都是泪,3位难兄难弟在这方面处于比谁更烂的状态,而且越来越烂一代不如一代,看人家微软对多语言的支持有多好。

打不动字了,以上问题都是基于Thinkpad X1 2016笔记本i7-6600u+16G内存+固态硬盘+WIN10 20H2版+STM32+J-LINK的测试结果,如果有错误还请指正并欢迎补充。

另外说几个Embedded Studio的问题希望能改进:
1. 自定义关键字的颜色和内置关键字的颜色不能区分,/***/和//两种注释的颜色也不能区分。MDK和IAR就可以。
2. 文档页面上像IAR一样增加个关闭图标啊。何必让用户多点个右键。
3. 调试输出窗口至少能支持中文打印。
4. 能实现IAR的Ctrl+Shift+H功能就更好了。
5. 没找到一键退出Debug模式、重新编译代码、并自动重新进入Debug模式功能(类似IAR的Ctrl+R),这个使用频率非常高,希望知道的朋友告知下。6. 代码折叠功能加上啊!最好再有类似Visual Studio中#region和#endregion的注释块功能,这个IAR和MDK也没有。

Embedded Studio的设置非常灵活,赞一个!改天有空了再写一篇Embedded Studio的使用技巧。



祖传单目录

祖传单目录

死亡弹窗

死亡弹窗

3个IDE的进入Debug后自动运行功能对比

3个IDE的进入Debug后自动运行功能对比
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2021-10-17 10:50:30 | 显示全部楼层
码字不易,点赞

楼主吐槽的基本都是编辑器问题,这个问题在KEIL Studio上已经有质的飞越

Keil Studio已经确定为MDK下一代开发工具,更多功能将在今年年底上线
http://www.armbbs.cn/forum.php?m ... d=107292&fromuid=58
(出处: 硬汉嵌入式论坛)

另外那个多级菜单问题,我不太喜欢这种多级菜单方式,目录多的时候点的很烦,不够一幕了然,现在这种单目录,在显示屏竖屏展示巨爽。

所以我做的Embedded Studio和IAR例子基本不用。


回复

使用道具 举报

4

主题

61

回帖

73

积分

初级会员

积分
73
QQ
 楼主| 发表于 2021-10-17 11:05:36 | 显示全部楼层
确实,目录级别太多了也不够直观,但至少可以让用户有的选嘛,哪怕只有两级目录也能大幅度缓解问题。
回复

使用道具 举报

13

主题

95

回帖

134

积分

初级会员

积分
134
发表于 2021-10-17 15:40:16 | 显示全部楼层
转Embedded Studio使用快一年了,现在MDK基本不用了。最爽的就是没有莫名崩溃的问题了,另外启动加载速度也很喜人。
回复

使用道具 举报

65

主题

432

回帖

632

积分

金牌会员

积分
632
发表于 2021-10-17 20:17:34 | 显示全部楼层
个人喜欢 IAR,从不用MDK,除非看硬汉的例程
回复

使用道具 举报

10

主题

247

回帖

282

积分

高级会员

积分
282
发表于 2021-10-17 20:54:57 | 显示全部楼层
1那怕提供个两级目录都好。
2这个问题,因为一般都是log所以没遇到过
3启动速度无所谓O(∩_∩)O,编译速度才是最重要的,这方面AC6不错。
4同2,我基本不用
5我只用MDK的编译器,所以么……
6这问题……(⊙﹏⊙)编译的时候还码什么代码啊,喝杯茶吃块饼干不好么?(●ˇ?ˇ●)
7这个确实是个大问题,虽然不影响使用,但是那堆红杠杆看的太难受了
8和9并不是什么问题,既然在调试,那一定是确定的版本,不用再编译了。停在main算是提供一个段落感,也方便最后在确定一次。

10、11、12我是用其他编辑器,所以不清楚。
13实际上不是个问题,开始编译意味着这是一个确定的版本,本身就不该再更改设置。实际上,这里最大的问题是,停止编译很慢!
14……万年老问题

总体来说,基本上都是编辑器和调试环境的问题。
编辑器可以使用其他的,甚至可以在其他编辑器里面调用MDK的编译器。调试模式2、4的确做的挫。

不过我也还是对SES比较感兴趣,如果KiCAD新版能解决那几个老问题,我全linux开发环境就齐活了b( ̄▽ ̄)d 
回复

使用道具 举报

0

主题

216

回帖

216

积分

高级会员

积分
216
发表于 2021-10-18 08:53:39 | 显示全部楼层
12的话,在文件空白处右键菜单有跳转到头、源文件功能 mdk.png

回复

使用道具 举报

9

主题

103

回帖

130

积分

初级会员

积分
130
发表于 2021-10-18 10:20:04 | 显示全部楼层
我自己是用和谐版,公司也只是象征性的买了一台。毕竟是白嫖,能用就行
回复

使用道具 举报

14

主题

62

回帖

104

积分

初级会员

积分
104
发表于 2021-10-21 11:01:52 | 显示全部楼层
至于编译速度问题,AC5才存在,AC6已经鸟枪换炮了。 IAR工程的中间文件太大,动不动就是几百兆,每次都要清文件存档,不然盘都不够用了。
同样用最高等级-balance优化,IAR执行速度略微比KEIL高些。
ES在关注,经常用国产芯片,ES还不支持,没敢用。
回复

使用道具 举报

3

主题

337

回帖

346

积分

高级会员

积分
346
发表于 2021-10-21 12:32:04 | 显示全部楼层
这些IDE的源码树管理,都没有CodeBlocks方便。
如果源码树目录层次很深,Keil、IAR把源码加到项目的过程很痛苦。
而Codeblocks只要用“递归添加文件”,它自动把各个层次的文件加入。
回复

使用道具 举报

4

主题

61

回帖

73

积分

初级会员

积分
73
QQ
 楼主| 发表于 2021-10-21 14:42:30 | 显示全部楼层
glory 发表于 2021-10-21 12:32
这些IDE的源码树管理,都没有CodeBlocks方便。
如果源码树目录层次很深,Keil、IAR把源码加到项目的过程很 ...

这确实是个好功能。
回复

使用道具 举报

4

主题

61

回帖

73

积分

初级会员

积分
73
QQ
 楼主| 发表于 2021-10-21 14:44:12 | 显示全部楼层
apleilx 发表于 2021-10-21 11:01
至于编译速度问题,AC5才存在,AC6已经鸟枪换炮了。 IAR工程的中间文件太大,动不动就是几百兆,每次都要清 ...

是的,编译速度是没问题的。但MDK和IAR就是不愿意花一点小功夫把这些编辑器上的小毛病给优化一下。
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2021-10-22 09:43:52 | 显示全部楼层
看来是深度用户,啥都经历过了。 mdk毕竟是行业龙头,相对比较保守,革新的功能不怎么敢贸然加入。 到是可以用ST的IDE作为备用,毕竟免费的才香。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 16:23 , Processed in 0.387935 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表