比较IAR,MDK的AC5和AC6以及Embedded Studio的CLANG和GCC编译HAL库性能

2020-01-04 19:02发布

本帖最后由 Eric2013 于 2019-3-30 14:44 编辑

MDK AC5(ARM Compiler5)编译STM32H7的HAL库带Browse Info时速度巨卡,电脑性能稍差点,编译个大点的工程能编译出几十分钟。

测试条件:
1、IAR8.30开最高等级的最小代码优化
2、MDK5.27正式版使用AC5开最高等级优化3
3、MDK5.27正式版使用AC6开最小代码优化
4、Embedded Studio4.15 beta版使用GCC开最高等级代码大小优化
5、Embedded Studio4.15 beta版使用CLANG开最高等级代码大小优化
6、全部开启多核并行编译
7、电脑配置是i3-3220,机械硬盘
8、暂未测试芯片实际执行性能。

注意,现在MDK的AC6和IAR打开后都会主动创建Browse Info,在窗口的最下方正中间有个提示。
MDK标识,要等待标识消失才可以使用go to def
QQ截图20190330144146.jpg (34.43 KB, 下载次数: 0) 下载附件 2019-3-30 14:43 上传

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



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

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

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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
82条回答
caixiuwen
2020-01-05 20:18

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

这个总结怕是有问题。我试了楼主提供的工程。MDK选用了MicroLIB,而IAR工程的库选项都是Full,IAR的链接器优化也没开。用的不同的库,怎么好直接比较最终生成的程序大小呢。这比的恐怕不是编译器吧。

应该直接看map文件比较
MDK AC6的结果:

  1. Image component sizes


  2.       Code (inc. data)   RO Data    RW Data    ZI Data      Debug   Object Name

  3.        426         16          0          0          0       6299   bsp.o
  4.        436         64          0          0          4       7210   bsp_fmc_io.o
  5.        634         20         64          0        173       7458   bsp_key.o
  6.        136         12         16          0          0       1308   bsp_led.o
  7.        612         68         63          0         76      15163   bsp_timer.o
  8.        978         80         35          0       2092      17140   bsp_uart_fifo.o
  9.         18          0          0          0          0        308   hardfaulthandler.o
  10.        720        284       1045          0          0       1503   main.o
  11.        248         56          0          0         68       3458   segger_hardfaulthandler.o
  12.         36          8        664          0       4096        960   startup_stm32h743xx.o
  13.        138         12          0          8          4      14390   stm32h7xx_hal.o
  14.        324         32          0          0          0      11816   stm32h7xx_hal_cortex.o
  15.        388         20          0          0          0       6601   stm32h7xx_hal_gpio.o
  16.       1796         48          0          0          0       9521   stm32h7xx_hal_rcc.o
  17.       2964        154          0          0          0      15072   stm32h7xx_hal_rcc_ex.o
  18.        102          4          0          0          0       8008   stm32h7xx_hal_sram.o
  19.        330         32          0          0          0      36501   stm32h7xx_hal_tim.o
  20.       1776        154         24          0          0      21172   stm32h7xx_hal_uart.o
  21.         14          0          0          0          0        862   stm32h7xx_it.o
  22.        320         12          0          0          0       9235   stm32h7xx_ll_fmc.o
  23.        100         16         16          8          0       4389   system_stm32h7xx.o

  24.     ----------------------------------------------------------------------
  25.      12520       1092       1964         16       6524     198374   Object Totals
  26.          0          0         32          0          0          0   (incl. Generated)
  27.         24          0          5          0         11          0   (incl. Padding)
复制代码




IAR的结果
  1.     Module                     ro code  ro data  rw data
  2.     ------                     -------  -------  -------

  3.     HardFaultHandler.o              18
  4.     SEGGER_HardFaultHandler.o       32
  5.     bsp.o                          482
  6.     bsp_fmc_io.o                   472                 4
  7.     bsp_key.o                      680               176
  8.     bsp_led.o                      148
  9.     bsp_timer.o                    712                77
  10.     bsp_uart_fifo.o              1 024             2 092
  11.     main.o                       1 756
  12.     startup_stm32h743xx.o        1 224
  13.     stm32h7xx_hal.o                142        7       12
  14.     stm32h7xx_hal_cortex.o         328
  15.     stm32h7xx_hal_gpio.o           504
  16.     stm32h7xx_hal_rcc.o          1 860
  17.     stm32h7xx_hal_rcc_ex.o       2 768
  18.     stm32h7xx_hal_sram.o           102
  19.     stm32h7xx_hal_tim.o            290
  20.     stm32h7xx_hal_uart.o         1 758
  21.     stm32h7xx_it.o                  14
  22.     stm32h7xx_ll_fmc.o             272
  23.     system_stm32h7xx.o             120        5        8
  24.     ----------------------------------------------------
  25.     Total:                      14 706       12    2 369
复制代码

其中startup_stm32h743xx是汇编,应该去除(IAR开启连接器优化后,startup_stm32h743xx会变小)。
如果只比较这些代码的结果,RO Code和Data加在一起算的话,MDK是13784,IAR是13494。RW Data的话,MDK是2428,IAR是2369。
当然,这个例子也不能说明IAR生成的代码就小,仔细看每个文件的话,可以发现有的大有的小。。。但是差距不会很大。


一周热门 更多>