
本帖最后由 baiyongbin2009 于 2019-3-30 01:29 编辑 鉴于MDK AC5(ARM Compiler5)编译STM32H7的HAL库带Browser Info时速度巨卡,电脑性能稍差点,编译个大点的工程能编译出几十分钟。特此做一个完整的测试+ k, f7 ^ O: V. T; M 测试条件:- D. M( Q1 Z; |+ [) E* r 1、IAR8.30开最高等级的最小代码优化,Printf选择small和full均做测试。 m5 V) m3 i! Y% q 2、MDK5.27正式版使用AC5开最高等级优化3,使用的MicroLib。 3、MDK5.27正式版使用AC6开最小代码优化,使用的MicroLib。0 \; L# K6 g" ] 4、Embedded Studio4.15 beta版使用GCC开最高等级代码大小优化 5、Embedded Studio4.15 beta版使用CLANG开最高等级代码大小优化8 P- z4 ~2 U: U8 ` 6、全部开启多核并行编译7 b, u7 J) H c- A/ ?) M 7、电脑配置是i3-3220,机械硬盘% i8 [% u4 @6 U5 T5 ~ 8、暂未测试芯片实际执行性能。0 i* j2 O* b: }4 |7 D1 R 7 ^; t! c8 R, x: \9 |, E' J; j! z 注意,现在MDK的AC6和IAR打开后都会主动创建Browser Info,在窗口的最下方正中间有个提示。 MDK标识,要等待标识消失才可以使用go to def ![]() IAR标识,要等到进度条到头才可以使用go to def6 ^' A9 m6 v: J4 `) p. n7 } ![]() ![]() 提供一个STM32H7的例程供大家测评: ![]() ![]() - l; E( u( S# S( k7 D/ Q ![]() 先测试编译时间:# C& T9 N+ B# l: g1 V6 n7 y MDK5使用AC5带Browser Info3 \3 h% n3 n }' o4 C, k/ e 耗时8分51秒 MDK5使用AC6带Browser Info5 X# w h5 g! I5 G; y' l4 z 耗时1分07秒5 q* e. u4 s- ?# K" @9 n3 K IAR带Browser Info(IAR的编译速度很快,等Browser Info时间较长) 耗时2分03秒 9 X7 @0 Z4 k2 H: { Embedded Studio4.15使用GCC带Browser Info" P: ^+ Y, g9 N# G1 g; | 耗时38秒 + Z- e! c1 _! m3 C6 m Embedded Studio4.15使用CLANG带Browser Info0 W) [- v, k9 i( o 耗时21秒 总结,Embedded Studio使用CLANG完胜其它方式。 ![]() 生成代码大小 MDK5使用AC5:+ X( A$ D* W9 B! u% v Total RO Size (Code + RO Data) 17060 (16.66kB) Total RW Size (RW Data + ZI Data) 6536 ( 6.38kB)7 I* ? J$ `! g- H2 a0 t, o9 ] Total ROM Size (Code + RO Data + RW Data) 17120 (16.72kB) MDK5使用AC6:; e( }2 Q5 D8 H: h+ i: ?" h Total RO Size (Code + RO Data) 15960 (15.59kB)3 d$ S7 {% E1 `( w& {8 X( a2 A( @% C Total RW Size (RW Data + ZI Data) 6544 ( 6.39kB)1 w4 Y4 C7 O; ?4 I5 |% h" ^% W Total ROM Size (Code + RO Data + RW Data) 15980 (15.61kB) MDK5使用AC6,开启Link-Time优化(2019-03-29,晚11点)$ d" i: i& {: Z- e8 a* Q7 T 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)& M# p: {5 h! v3 h3 ~ IAR(printf选择full): 20 290 bytes of readonly code memory 142 bytes of readonly data memory 6 677 bytes of readwrite data memory * F5 N0 B4 m }9 c IAR(printf选择small,新增small测试,2019-03-29,晚10点):) a+ k W6 q1 d 16 734 bytes of readonly code memory 90 bytes of readonly data memory 6 621 bytes of readwrite data memory( k$ P& o% H1 M: F Embedded Studio4.15使用GCC ![]() ; s* n" O" m" ? l. g# C6 H( q Embedded Studio4.15使用CLANG ![]() 总结,MDK的AC6生成的代码最小。 ![]() 现在MDK5的AC6也是用的CLANG,总的来说,无论是编译速度还是生成代码大小,CLANG都表现出巨大优势。 ( D1 P" Q1 K+ G- q/ u8 y( @ 当前HAL库使用AC6编译的警告有点多,可以选择使用AC5的警告临时屏蔽,提供的测试例子是采用的这种方式。 另外使用中文也会有很多警告,所以干脆使用UTF-8编码,就没有警告了,不过程序中的打印有中文的话,串口助手要使用支持UTF-8的,比如SecureCRT即可。 |
性能越来越强劲的Embedded Studio与MDK和IAR性能PK与模板制作方法. l$ j3 s" ], }4 ~. c y
https://www.stmcu.org.cn/module/ ... &fromuid=330695
(出处: 论坛-意法半导体STM32/STM8技术社区)
8 O3 l& j( F( B. U5 x+ ?
新增两个测试2 {" j. d% d, R
MDK5使用AC6:* h# n1 \, ?* @! V; E0 V
Total RO Size (Code + RO Data) 15960 (15.59kB)' \# z- T+ N& c: a) u
Total RW Size (RW Data + ZI Data) 6544 ( 6.39kB)" z/ m8 q+ e' a
Total ROM Size (Code + RO Data + RW Data) 15980 (15.61kB)
! a( \) z9 R3 d( d
MDK5使用AC6,开启Link-Time优化
Total RO Size (Code + RO Data) 11476 ( 11.21kB)
Total RW Size (RW Data + ZI Data) 6512 ( 6.36kB)! I1 i" H; O' A8 X
Total ROM Size (Code + RO Data + RW Data) 11484 ( 11.21kB)
同时将IAR也是开启Link优化和其它能优化的地方(printf选择small lib)& P2 o: s5 D q' ^
16 734 bytes of readonly code memory
90 bytes of readonly data memory, \( c9 L- r* Z( l4 q J) T
6 621 bytes of readwrite data memory6 O' v* [/ g3 q/ y6 f# l
4 L4 r7 z+ o% i% H" c