Keil切换到armclang编译器,到底强在哪里?
时间:2021-10-09 15:07:31
[导读]点击上方“小麦大叔”,选择“置顶/星标公众号”福利干货,第一时间送达大家好,我是小麦,上次写过一篇文章《Keil编译太慢怎么办?教你一招,提速10倍 》,减少了中间文件的生成,确实把编译速度提高了很多,其实没有从根本上解决问题,有大佬提出用直接上AC6。于是我就切换到AC6上尝试...
点击上方“小麦大叔”,选择“置顶/星标公众号”福利干货,第一时间送达
于是我就切换到AC6上尝试了一下,效果还是不错的,我就分享一下,感兴趣的小伙伴们可以看一下,希望对你有所帮助。
AC6和AC5具体有哪些差异呢?参考链接:工具链差异 从这里我们可以看到,出了C编译器和预处理器不同以外,其他基本上都是相同的。除了工具链的差异,优化也有差异,还有一些默认的差异,包括编译选项,生成的固件命后缀不同等等,详细可以参考上述的链接。至于强不强,用了才知道嘛。 为了测试,我用CubeMX生成了一个STM32F103CB基于HAL库的Keil MDK工程,使用AC5编译器进行构建; 总共耗时 10 秒;后面我切换成AC6编译器,进行重新构建; 总共耗时 5 秒;如果单纯基于HAL库,没有加入其他第三方库的话,直接在项目选项中的编译器选项中,选择AC5和AC6就可以实现无缝切换,这是因为在CMSIS中已经帮你做好了兼容性的处理,在 项目已经根据系统进行了选择;
大家好,我是小麦,上次写过一篇文章 《Keil 编译太慢怎么办?教你一招,提速10倍 》,减少了中间文件的生成,确实把编译速度提高了很多,其实没有从根本上解决问题,有大佬提出用直接上AC6。
AC6有何不同?
ARM Compiler 5(及更早版本)使用 armcc 编译器。而AC6(ARM Compiler 6) 用 armclang 替换了 armcc,因此是一个新的编译器。七年前就有人问了这样的问题。https://developer.arm.com/documentation/100068/0612/migrating-from-arm-compiler-5-to-arm-compiler-6/migration-overviewArm Compiler 6 基于现代 LLVM 编译器框架。Arm Compiler 5 不是基于 LLVM 编译器框架。因此,将您的项目和源文件从 Arm Compiler 5 迁移到 Arm Compiler 6 ,我们需要注意几点:- 调用编译器时命令行选项的差异。
- 遵守语言标准的差异。
- 编译器特定关键字、属性和编译指示的差异。
- 编译器优化和诊断行为的差异。
Keil中切换编译器
在Keil MDK 5.27中,我们打开项目选项,就可以切换编译器了,这里包括了AC5和AC6,具体如下图所示;cmsis_compiler.h中,这里的条件编译选项,我们可以发现已经通过判断不同的编译器版本,而包含了不同的头文件,分别是对应armcc和armclag的;如下图所示;#elif defined (__ARMCC_VERSION) 




