查看: 17179|回复: 19

[CodeWarrior] 关于mdk、IAR、CW三个软件的一些体会

[复制链接]

该用户从未签到

5

主题

51

帖子

0

注册会员

Rank: 2

积分
168
最后登录
1970-1-1
发表于 2017-4-24 19:22:51 | 显示全部楼层 |阅读模式
因为工程要求时间比较紧迫,用PE做硬件初始化显然比较快,所以最开始选了CW做开发平台。
但是,随着代码增加,CW的很多弊端就显露出来,后续移植了Keil和IAR两个平台做对比。
同样的代码,三个平台各自显露出一些优缺点。简单写点体会,与大家分享。
1、工程特点。
实时性要求高,成本限制严格,选了cortex m0+平台。
A/D用fifo采集10个通道,20K中断进行通道切换。核心算法处理2.5k中断。
2、CW的优缺点
CW虽然比较慢,但是Eclipse编译环境比较友好,稍微设置一下,代码自动完成和变量查找、提示都比较友善。和360卫士有冲突。
gcc编译速度不错,增量编译也很少有错。编译完的代码执行速度不错,A/D中断执行周期约360,核心算法部分约5600周期。
CW主要问题也出在gcc上。
第一个重要问题是A/D fifo时序混乱。
在代码量较小的情况下,fifo不能按照正确时序弹出,时序变为第一个进去的最后一个出来,其他的按正常顺序。实验过O0-O3各种不同优化等级均无解,但是好在每次编译结果都一样,也就忍耐了。
代码量超过50k后,fifo通道次序变得没有规律,经常出现一定几率的通道错乱。O0-O3不同优化等级每次编译结果都不一样,有时能正确,有时错误。
看汇编代码,非常乱。
第二个问题是PE初始化有大量bug。例如KEA有两个比较器,初始化比较器0,比较器1工作。
3、Keil的优缺点
Keil是ARM家的东西,支持RTX,总体上还是不错的。编译环境简洁明了,上手比较快。
keil工程不支持多级文件夹,这点有点不爽。
开始用5.06编译器。A/D的fifo时序正确,代码总量降低到25k。不过cw代码量大可能是因为.LD文件设了4字节对齐。
执行速度看,A/D中断执行时间与gcc结果基本一致,360周期左右。但是核心线程执行时间达到8200周期,远远超过cw的gcc。速度优化效果不明显。
后续曾想用6.6编译器,但是居然代码不兼容。因为涉及一部分库文件,整体修改工作量挺大,好不容易改过来,一编译,代码只有16k左右。很多程序都被优化掉了,程序无法正确执行,A/D采集时间只有240周期,但是fifo错乱。
并且6.6编译器居然退回到无法查找变量定义,使用极不方便。
由于时间关系,没进一步研究如何改进,直接换了IAR平台。
4、IAR
IAR新版的编译环境说实话是比较烂的,经常容易崩溃,还和FreeMaster等软件有一定冲突,出现过代码假下载的情况(表面下载执行了,但是实际未更新)。另外IAR的增量编译经常出现毛病,所以我尽量都全部编译。
但是
IAR的编译效果非常好。只要不用最高一级优化,A/D中断从未出现问题。
执行速度,A/D中断300周期,汇编代码极其规整,完全没有多余语句。根据汇编结果稍微调整了一下c代码,执行周期降到270周期左右。IAR一段c代码汇编后10条语句,gcc 23条汇编语句。
核心计算线程5400周期,根据汇编稍微优化了一下c代码,降低为4700周期左右。
代码总量,17k。

应该说这次弯路走得可是比较大,但是也比较值得,以前也看过一些mdk、iar、gcc编译器的比较文章,但是总是不得要领,因为从未拿一个工程在三个平台上直接横向对比过。这次真切体会了各种不同编译器的特点。

总结起来就是,如果硬件时序要求严格的代码,最好不要用CW,gcc反汇编后废话太多,跳转太乱。keil 6.6编译器还不成熟,c内嵌汇编代码在往gcc靠。keil5.06编译器代码执行速度一般,稳定性很好,各个优化选项差异不大,ARM也不在支持5编译器。IAR最严谨,语法静态分析和MISRA-C功能都适合程序稳定性要求比较高的场合,代码的可预测性比较高。同时,单就cortex-m0+这个处理器看,IAR代码执行速度最快,最稳定。
编译速度,CW的gcc最好,尤其是增量编译稳定性不错。keil增量编译速度中等,全部编译速度比较慢。IAR的增量编译不稳定,经常出现该编译不编译的现象,但是速度尚可。IAR全部编译虽然支持多核,但速度一般。
IDE环境CW最好,只是对机器要求比较高,最好是固态硬盘,否则启动比较慢。IAR启动速度第二慢,并且不是很友好,没有单个文档的函数和变量列表。keil 5.23启动速度比较快,环境友好度一般,尤其是6.6编译器出现倒退。

现在用Eclipse的IDE,IAR 8.11的编译器,挺爽。
我知道答案 目前已有19人回答
回复

使用道具 举报

  • TA的每日心情
    奋斗
    2021-11-30 16:16
  • 签到天数: 206 天

    连续签到: 1 天

    [LV.7]常住居民III

    74

    主题

    2793

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    7908
    最后登录
    2025-4-11
    发表于 2017-4-24 19:58:22 | 显示全部楼层
    这个分析很666
    来根华子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-6-13 14:18
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    5

    主题

    88

    帖子

    1

    高级会员

    Rank: 4

    积分
    927
    最后登录
    2025-7-3
    发表于 2017-4-24 20:01:37 | 显示全部楼层
    IAR有Eclipse插件,调用IAR编译器也不错
    http://eclipse-update.iar.com/plugin-manager-install.html
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    51

    帖子

    0

    注册会员

    Rank: 2

    积分
    168
    最后登录
    1970-1-1
     楼主| 发表于 2017-4-24 20:53:17 | 显示全部楼层

    仅供参考
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    51

    帖子

    0

    注册会员

    Rank: 2

    积分
    168
    最后登录
    1970-1-1
     楼主| 发表于 2017-4-24 20:53:42 | 显示全部楼层

    现在用的就是这个插件
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-20 15:04
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    49

    主题

    188

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    3279
    最后登录
    2023-7-24
    发表于 2017-4-24 22:17:54 来自手机 | 显示全部楼层
    马克,学习
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2017-4-24 22:20:07 | 显示全部楼层
    很好的工具比较,获益匪浅。实际上对于增量编译颇有微词,增量编译要求最佳的代码最好是增或减代码,以模块为好,但如果是纯粹的增加一些非完全模块化的东西或存在递归或跨模块的调用有可能出问题。而在全部编译感觉IAR比Keil快,比GCC慢。IAR优化效果比KEIL好。也可能是偏见,51下用过Keil,后来就不用Keil了,除非找到的工程只有keil的不得已而为之用用keil。谢谢楼主!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2017-4-24 22:22:32 | 显示全部楼层
    写了半天,发表回复 全没有了。谢谢楼主吧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-12-1 09:30
  • 签到天数: 191 天

    连续签到: 1 天

    [LV.7]常住居民III

    1

    主题

    2405

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5109
    最后登录
    2018-8-10
    发表于 2017-4-25 08:16:02 | 显示全部楼层
    这个分析很666
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    143

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    443
    最后登录
    2020-10-29
    发表于 2017-4-25 11:36:48 | 显示全部楼层
    可否把CW的工程和代码发上来看看?全球的linux,上到超算,集群,下到android 99%都是gcc造出来的,应该不会这么脆弱。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-4 06:17 , Processed in 0.096629 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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