本帖最后由 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即可。
这个总结怕是有问题。我试了楼主提供的工程。MDK选用了MicroLIB,而IAR工程的库选项都是Full,IAR的链接器优化也没开。用的不同的库,怎么好直接比较最终生成的程序大小呢。这比的恐怕不是编译器吧。
应该直接看map文件比较
MDK AC6的结果:
- Image component sizes
- Code (inc. data) RO Data RW Data ZI Data Debug Object Name
- 426 16 0 0 0 6299 bsp.o
- 436 64 0 0 4 7210 bsp_fmc_io.o
- 634 20 64 0 173 7458 bsp_key.o
- 136 12 16 0 0 1308 bsp_led.o
- 612 68 63 0 76 15163 bsp_timer.o
- 978 80 35 0 2092 17140 bsp_uart_fifo.o
- 18 0 0 0 0 308 hardfaulthandler.o
- 720 284 1045 0 0 1503 main.o
- 248 56 0 0 68 3458 segger_hardfaulthandler.o
- 36 8 664 0 4096 960 startup_stm32h743xx.o
- 138 12 0 8 4 14390 stm32h7xx_hal.o
- 324 32 0 0 0 11816 stm32h7xx_hal_cortex.o
- 388 20 0 0 0 6601 stm32h7xx_hal_gpio.o
- 1796 48 0 0 0 9521 stm32h7xx_hal_rcc.o
- 2964 154 0 0 0 15072 stm32h7xx_hal_rcc_ex.o
- 102 4 0 0 0 8008 stm32h7xx_hal_sram.o
- 330 32 0 0 0 36501 stm32h7xx_hal_tim.o
- 1776 154 24 0 0 21172 stm32h7xx_hal_uart.o
- 14 0 0 0 0 862 stm32h7xx_it.o
- 320 12 0 0 0 9235 stm32h7xx_ll_fmc.o
- 100 16 16 8 0 4389 system_stm32h7xx.o
- ----------------------------------------------------------------------
- 12520 1092 1964 16 6524 198374 Object Totals
- 0 0 32 0 0 0 (incl. Generated)
- 24 0 5 0 11 0 (incl. Padding)
复制代码IAR的结果
- Module ro code ro data rw data
- ------ ------- ------- -------
- HardFaultHandler.o 18
- SEGGER_HardFaultHandler.o 32
- bsp.o 482
- bsp_fmc_io.o 472 4
- bsp_key.o 680 176
- bsp_led.o 148
- bsp_timer.o 712 77
- bsp_uart_fifo.o 1 024 2 092
- main.o 1 756
- startup_stm32h743xx.o 1 224
- stm32h7xx_hal.o 142 7 12
- stm32h7xx_hal_cortex.o 328
- stm32h7xx_hal_gpio.o 504
- stm32h7xx_hal_rcc.o 1 860
- stm32h7xx_hal_rcc_ex.o 2 768
- stm32h7xx_hal_sram.o 102
- stm32h7xx_hal_tim.o 290
- stm32h7xx_hal_uart.o 1 758
- stm32h7xx_it.o 14
- stm32h7xx_ll_fmc.o 272
- system_stm32h7xx.o 120 5 8
- ----------------------------------------------------
- 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生成的代码就小,仔细看每个文件的话,可以发现有的大有的小。。。但是差距不会很大。
一周热门 更多>