硬汉嵌入式论坛

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

[开发工具] 【测试帖】比较IAR,MDK的AC5和AC6以及Embedded Studio的CLANG和GCC编译HAL库性能(2019-04-06更新)

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
发表于 2019-3-28 17:54:17 | 显示全部楼层 |阅读模式
鉴于MDK AC5(ARM Compiler5)编译STM32H7的HAL库带Browser Info时速度巨卡,电脑性能稍差点,编译个大点的工程能编译出几十分钟。特此做一个完整的测试
测试条件:
1、IAR8.30开最高等级的最小代码优化,Printf选择small和full均做测试。
2、MDK5.27正式版使用AC5开最高等级优化3,使用的MicroLib。
3、MDK5.27正式版使用AC6开最小代码优化,使用的MicroLib。
4、Embedded Studio4.15 beta版使用GCC开最高等级代码大小优化
5、Embedded Studio4.15 beta版使用CLANG开最高等级代码大小优化
6、全部开启多核并行编译
7、电脑配置是i3-3220,机械硬盘
8、暂未测试芯片实际执行性能。

注意,现在MDK的AC6和IAR打开后都会主动创建Browser Info,在窗口的最下方正中间有个提示。
MDK标识,要等待标识消失才可以使用go to def
1.jpg
IAR标识,要等到进度条到头才可以使用go to def
2.jpg

提供一个STM32H7的例程供大家测评:
MDKIARES-USART.rar (3.47 MB, 下载次数: 858)
8.jpg


先测试编译时间:
MDK5使用AC5带Browser Info
耗时8分51秒

MDK5使用AC6带Browser Info
耗时1分07秒

IAR带Browser Info(IAR的编译速度很快,等Browser Info时间较长)
耗时2分03秒

Embedded Studio4.15使用GCC带Browser Info
耗时38秒

Embedded Studio4.15使用CLANG带Browser Info
耗时21秒

总结,Embedded Studio使用CLANG完胜其它方式。

生成代码大小
MDK5使用AC5:
Total RO  Size (Code + RO Data)                    17060 (16.66kB)
Total RW  Size (RW Data + ZI Data)                 6536 (  6.38kB)
Total ROM Size (Code + RO Data + RW Data)  17120 (16.72kB)

MDK5使用AC6:
Total RO  Size (Code + RO Data)                    15960 (15.59kB)
Total RW  Size (RW Data + ZI Data)                 6544 (  6.39kB)
Total ROM Size (Code + RO Data + RW Data)  15980 (15.61kB)

MDK5使用AC6,开启Link-Time优化(2019-03-29,晚11点)
Total RO  Size (Code + RO Data)                    11476 (  11.21kB)
Total RW  Size (RW Data + ZI Data)                 6512 (   6.36kB)
Total ROM Size (Code + RO Data + RW Data)  11484 (  11.21kB)

IAR(printf选择full):
20 290 bytes of readonly  code memory
    142 bytes of readonly  data memory
6 677 bytes of readwrite data memory

IAR(增加Link优化,printf选择small,新增small测试,2019-03-29,晚10点):
16 734 bytes of readonly  code memory
      90 bytes of readonly  data memory
  6 621 bytes of readwrite data memory

Embedded Studio4.15使用GCC
GCC.jpg

Embedded Studio4.15使用CLANG
CLANG.jpg

Embedded Studio4.15使用CLANG开Link-Time优化,效果明显


Embedded Studio4.16使用GCC开Link-Time优化,继续减小(2019-04-06)
6666.jpg

总结,MDK的AC6生成的代码最小。

现在MDK5的AC6也是用的CLANG,总的来说,无论是编译速度还是生成代码大小,CLANG都表现出巨大优势。

当前HAL库使用AC6编译的警告有点多,可以选择使用AC5的警告临时屏蔽,提供的测试例子是采用的这种方式。

另外使用中文也会有很多警告,所以干脆使用UTF-8编码,就没有警告了,不过程序中的打印有中文的话,串口助手要使用支持UTF-8的,比如SecureCRT即可。








回复

使用道具 举报

27

主题

272

回帖

353

积分

高级会员

积分
353
发表于 2019-3-28 17:55:47 | 显示全部楼层
等待中  别捉急
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2019-3-28 19:58:19 | 显示全部楼层
使用I7 7700K的CPU,M2固态硬盘,编译MDK5 AC5,用时不到2mins
回复

使用道具 举报

4

主题

129

回帖

146

积分

初级会员

积分
146
发表于 2019-3-28 22:09:24 | 显示全部楼层
i5-7300HQ,固态,MDK5使用AC6带Browser Info
编译用时:15秒
回复

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2019-3-28 22:25:05 | 显示全部楼层
为什么我用MDK5的AC6编译,一堆错误?
回复

使用道具 举报

4

主题

129

回帖

146

积分

初级会员

积分
146
发表于 2019-3-28 22:40:34 | 显示全部楼层
i5-7300HQ,固态,MDK5使用AC6带Browser Info
编译用时:15秒
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
发表于 2019-3-28 23:14:20 | 显示全部楼层
i5-8600k,机械硬盘,编译时候CPU睿频到4.07GHz
MDK5使用AC5带Browser Info,编译用时:2分17秒
MDK5使用AC6带Browser Info,编译用时:7秒
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-3-29 00:36:44 | 显示全部楼层
爱恋之燕 发表于 2019-3-28 22:25
为什么我用MDK5的AC6编译,一堆错误?

可以使用最新的MDK5.27正式版试试。
回复

使用道具 举报

4

主题

51

回帖

68

积分

初级会员

积分
68
发表于 2019-3-29 11:23:20 | 显示全部楼层
Keil5.27;AMD2700x;固态;内存频率3200
MDK5使用AC5带Browser Info;(一开始在assembling startup_stm32h743xx.s..就得卡住将近40s)
耗时1分14秒
MDK5使用AC6带Browser Info
耗时3秒
Embedded Studio4.15使用GCC带Browser Info
耗时2.7秒
Embedded Studio4.15使用CLANG带Browser Info
耗时1.3秒
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2019-3-29 12:33:33 | 显示全部楼层
你们的电脑怎么都这么强
回复

使用道具 举报

4

主题

42

回帖

54

积分

初级会员

积分
54
发表于 2019-3-29 12:40:01 | 显示全部楼层
我也试了一下,mdk5.20,AC5 耗时5分53秒。
AC6编译不通过,有错误不知为何。

电脑配置AMD A8-7650K

小技巧:如果你电脑的内存较大,虚拟一个内存盘出来,把工程放在内存盘里,或者把obj目录指定到内存盘里,编译速度可以加快很多很多。
我的测试就是把工程放内存盘里测试的,我的内存16G,分了8G做虚拟硬盘。
回复

使用道具 举报

4

主题

42

回帖

54

积分

初级会员

积分
54
发表于 2019-3-29 13:02:24 | 显示全部楼层
这个问题的终极解决方案,还是要彻底抛弃hal,那个库里的程序来回地define,套来套去的,简单的事情搞复杂了。
其实常搞开发,自己看下寄存器手册写点硬件驱动根本就不花不了多少时间,并且自己写了了一次,后的项目也可以继续用下去,付出一回就可以彻底解决编译时间问题。
看下我以前做的F4项目的程序,开browser infor的编译速度: test.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-3-29 15:52:29 | 显示全部楼层
jinggx 发表于 2019-3-29 13:02
这个问题的终极解决方案,还是要彻底抛弃hal,那个库里的程序来回地define,套来套去的,简单的事情搞复杂 ...

AC6是终极方案,管它标准还是HAL,编译这些嗖嗖的。
AC5过两年估计会被淘汰掉。
回复

使用道具 举报

8

主题

94

回帖

118

积分

初级会员

积分
118
发表于 2019-3-29 21:29:09 | 显示全部楼层
我直接用ES打开工程,里面字体编码不对,找不到那里设置了。请问硬汉哥在那里设置呀。
1553865899(1).png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-3-30 00:17:43 | 显示全部楼层
新增IAR的测试,增加Link优化和printf选择small

11.jpg
QQ截图20190329220029.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-3-30 00:18:59 | 显示全部楼层
继续开启MDK5中AC6的Link-Time优化,大小巨减。

Total RO  Size (Code + RO Data)                11476 (  11.21kB)
Total RW  Size (RW Data + ZI Data)              6512 (   6.36kB)
Total ROM Size (Code + RO Data + RW Data)   11484 (  11.21kB)


QQ截图20190329234352.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-3-30 00:19:40 | 显示全部楼层
Oenomaus 发表于 2019-3-29 21:29
我直接用ES打开工程,里面字体编码不对,找不到那里设置了。请问硬汉哥在那里设置呀。

右击这个页面,设置的UTF-8编码
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
发表于 2019-3-30 15:00:50 | 显示全部楼层
4930MX AC5 2分24秒    AC6 6秒
回复

使用道具 举报

8

主题

94

回帖

118

积分

初级会员

积分
118
发表于 2019-3-30 18:19:15 | 显示全部楼层
eric2013 发表于 2019-3-30 00:19
右击这个页面,设置的UTF-8编码

谢谢硬汉哥啦。
回复

使用道具 举报

0

主题

32

回帖

32

积分

新手上路

积分
32
发表于 2019-4-1 14:27:59 | 显示全部楼层
硬汉,打开你给的测试AC5,AC6的例程 ,用AC6编译 ,在屏幕最底部左下方总是出现:
No information available for the selected symbo,然后也不能使用Go to Define 功能,这是何故啊


图片1.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-4-1 14:30:37 | 显示全部楼层
slsxsxsx3 发表于 2019-4-1 14:27
硬汉,打开你给的测试AC5,AC6的例程 ,用AC6编译 ,在屏幕最底部左下方总是出现:
No information availab ...

Link-TIme优化的对勾取消掉,同时优化等级改为0,然后全编译测试。

如果这个时候还是无法查看,是MDK当前版本的bug,暂时无解。
回复

使用道具 举报

0

主题

32

回帖

32

积分

新手上路

积分
32
发表于 2019-4-1 14:39:23 | 显示全部楼层
eric2013 发表于 2019-4-1 14:30
Link-TIme优化的对勾取消掉,同时优化等级改为0,然后全编译测试。

如果这个时候还是无法查看,是MDK ...

按照这个方法试了一下,好像还是不能使用Go To Define 这个功能
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-4-1 14:57:39 | 显示全部楼层
slsxsxsx3 发表于 2019-4-1 14:39
按照这个方法试了一下,好像还是不能使用Go To Define 这个功能

可以使用,是部分函数无法使用。
回复

使用道具 举报

0

主题

32

回帖

32

积分

新手上路

积分
32
发表于 2019-4-1 15:18:10 | 显示全部楼层
eric2013 发表于 2019-4-1 14:57
可以使用,是部分函数无法使用。

怎么我的就用不起来,反正是没有1个函数能用,也没看见Creating Browse Information,用AC5都正常
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-4-1 15:34:43 | 显示全部楼层
slsxsxsx3 发表于 2019-4-1 15:18
怎么我的就用不起来,反正是没有1个函数能用,也没看见Creating Browse Information,用AC5都正常

特别注意,使用AC6时,工程路径切记不要有中文,否则无法使用,看我这里,是正常的
3.gif
回复

使用道具 举报

0

主题

32

回帖

32

积分

新手上路

积分
32
发表于 2019-4-1 16:37:11 | 显示全部楼层
eric2013 发表于 2019-4-1 15:34
特别注意,使用AC6时,工程路径切记不要有中文,否则无法使用,看我这里,是正常的

好了,谢谢硬汉,工程路径一点中文都不能有:
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-4-6 01:54:39 | 显示全部楼层
4.15的beta版本使用GCC的Link-Time优化有问题,使用4.16版本修正了。
Embedded Studio4.16使用GCC开Link-Time优化,继续减小(2019-04-06)

回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2019-4-6 08:27:06 | 显示全部楼层
本帖最后由 hpdell 于 2019-4-6 08:49 编辑
eric2013 发表于 2019-4-6 01:54
4.15的beta版本使用GCC的Link-Time优化有问题,使用4.16版本修正了。
Embedded Studio4.16使用GCC开Link-T ...

我把编译测试工程下来下来测试了一下,使用

MDK5使用AC6带Browser Info
耗时 11s

11s.png

貌似效果杠杆的
使用 ac6 后,貌似 printf 输出不能够使用 中文 了 ?????????
还有使用这个 ac6 的话,貌似 动态内存管理编译出现一大堆错误啊 ??




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-4-6 09:28:58 | 显示全部楼层
hpdell 发表于 2019-4-6 08:27
我把编译测试工程下来下来测试了一下,使用

MDK5使用AC6带Browser Info

使用AC6要做特别修正。
回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2019-4-6 10:48:11 | 显示全部楼层
eric2013 发表于 2019-4-6 09:28
使用AC6要做特别修正。

内存管理貌似可以了,修改如下:

                // D1域, AXI SRAM, 512KB 0x24000000
                __ALIGNED(8) uint64_t *AppMallocAXISRAM = (uint64_t *)(AXISRAM_RT_ADDER);

                // D2域, 128KB SRAM1(0x30000000) + 128KB SRAM2(0x30020000) 管理256KB
                __ALIGNED(8) uint64_t  *AppMallocSRAM1 = (uint64_t *)(SRAM1_RT_ADDER);

                // D2域  32KB SRAM3(0x30040000) 这个空间不用管理,预留给 eth 网络使用

                // D3域, SRAM4, 64KB  0x38000000
                __ALIGNED(8) uint64_t  *AppMallocSRAM4 = (uint64_t *)(SRAM4_RT_ADDER);

                // 管理SDRAM_RT_MAX_SIZE的sdram
                __ALIGNED(8) uint64_t   *AppMallocSDRAM = (uint64_t *)(SDRAM_RT_ADDER );

回复

使用道具 举报

1

主题

369

回帖

372

积分

高级会员

积分
372
发表于 2019-4-9 08:43:03 | 显示全部楼层
Program Size: Code=13996 RO-data=1964 RW-data=20 ZI-data=6524  
FromELF: creating hex file...
After Build - User command #1: CopyHex_Flash.bat
d:\Users\xxx\Desktop\MDKIARES-USART\Project\MDK-ARM(AC6)>copy Objects\output.hex ..\output(mdk).hex
已复制         1 个文件。
".\Objects\output.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:14
回复

使用道具 举报

11

主题

91

回帖

124

积分

初级会员

积分
124
发表于 2019-12-14 23:00:22 | 显示全部楼层
eric2013 发表于 2019-4-6 09:28
使用AC6要做特别修正。

为什么我的工程 文件换 AC6后,跑出一大堆警告来了,在AC5下是正常的
123.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2019-12-16 08:40:39 | 显示全部楼层
yuangt 发表于 2019-12-14 23:00
为什么我的工程 文件换 AC6后,跑出一大堆警告来了,在AC5下是正常的

不清楚你这个啥情况。
回复

使用道具 举报

11

主题

91

回帖

124

积分

初级会员

积分
124
发表于 2020-1-5 21:38:20 | 显示全部楼层
硬汉,用你的这个例程,编译成功,也很快,但有的变量还是不能 右键 go to define ,如下图所示:
111111.png
有的函数又可以 go to define ,有的转到错误行去了,这个是哪里没有设置好吗?keil是5.27版本的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-1-6 00:09:36 | 显示全部楼层
yuangt 发表于 2020-1-5 21:38
硬汉,用你的这个例程,编译成功,也很快,但有的变量还是不能 右键 go to define ,如下图所示:

有的函 ...

AC6要注意路径不可以有中文,路径不可以太长,而且打开后要等待进度条完成即可。
回复

使用道具 举报

11

主题

91

回帖

124

积分

初级会员

积分
124
发表于 2020-1-6 14:10:51 | 显示全部楼层
eric2013 发表于 2020-1-6 00:09
AC6要注意路径不可以有中文,路径不可以太长,而且打开后要等待进度条完成即可。

现在是整个工程直接放在D盘根目录下,那个进度条也全部完成,还是会这样,有的定位不到,有的没有问题,你们大家的都没有这个问题吗?
2.png

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-1-6 14:30:12 | 显示全部楼层
yuangt 发表于 2020-1-6 14:10
现在是整个工程直接放在D盘根目录下,那个进度条也全部完成,还是会这样,有的定位不到,有的没有问题, ...

局部变量有这个问题,go to不到对应位置。
回复

使用道具 举报

11

主题

91

回帖

124

积分

初级会员

积分
124
发表于 2020-1-10 14:49:11 | 显示全部楼层
全局变量也一样的,有的可以有的不行,大家都没碰到这个问题吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106678
QQ
 楼主| 发表于 2020-1-10 15:21:33 | 显示全部楼层
yuangt 发表于 2020-1-10 14:49
全局变量也一样的,有的可以有的不行,大家都没碰到这个问题吗?

我也遇到过一次,不行的时候,干脆就全局查询了。
回复

使用道具 举报

73

主题

1193

回帖

1412

积分

至尊会员

积分
1412
发表于 2020-1-11 14:28:16 | 显示全部楼层
请问有必要升级到5.29版本吗?我目前使用5.25
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 10:06 , Processed in 0.390413 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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