本帖最后由 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即可。
如果开了 lto 出了问题,多数情况下是代码本身就有问题,只是没有暴露出来。
初略比较一下性能,我不是用HAL库,与那个无关,是一段有部分数学运算的的算法,具体什么不重要了,看看时间差别
V6模式
-Oz 18.54ms
-Of 16.55ms
-Os 17.01ms
-O3 16.55ms
V5模式
-O3 开启时间优化和one ELF 15.76ms
有点跌眼镜,V5模式下竟然最快
这个东西还没有顾上去测试,后面做第2版DSP教程了,更新下这个帖子,做个系统的比较。
程序是定时控制ADC采集,然后数据送往DMA,DMA达到慢时中断。
将ADC值打印出来,趋势是对的,但是明显看到输出有问题,信号不连续,连续多个ADC值是相同,所以导致程序结果不对
现在还没查出解决方法,V6的-O3速度还没V5-O3快
已经安装了5.27但是发现界面好像和你发的截图有点不同
QQ截图20190618223525.png (27.97 KB, 下载次数: 0)
下载附件
2019-6-18 22:36 上传
这是我哪里选择错了吗?工程是以前用4.7建的。
用AC6得用UTF-8编码格式,如果要控制串口屏,它的格式是GB2312那有什么方法转换?
一周热门 更多>