当前位置:首页 > 单片机 > 小麦大叔
[导读]点击上方“小麦大叔”,选择“置顶/星标公众号”福利干货,第一时间送达大家好,我是小麦,上次写过一篇文章《Keil编译太慢怎么办?教你一招,提速10倍 》,减少了中间文件的生成,确实把编译速度提高了很多,其实没有从根本上解决问题,有大佬提出用直接上AC6。于是我就切换到AC6上尝试...

点击上方“小麦大叔”,选择“置顶/星标公众号”

福利干货,第一时间送达

大家好,我是小麦,上次写过一篇文章 《Keil 编译太慢怎么办?教你一招,提速10倍 》,减少了中间文件的生成,确实把编译速度提高了很多,其实没有从根本上解决问题,有大佬提出用直接上AC6。



于是我就切换到AC6上尝试了一下,效果还是不错的,我就分享一下,感兴趣的小伙伴们可以看一下,希望对你有所帮助。

AC6有何不同?

ARM Compiler 5(及更早版本)使用 armcc 编译器。而AC6(ARM Compiler 6) 用 armclang 替换了 armcc,因此是一个新的编译器。七年前就有人问了这样的问题。

AC6和AC5具体有哪些差异呢?

参考链接:https://developer.arm.com/documentation/100068/0612/migrating-from-arm-compiler-5-to-arm-compiler-6/migration-overview

Arm Compiler 6 基于现代 LLVM 编译器框架。Arm Compiler 5 不是基于 LLVM 编译器框架。因此,将您的项目和源文件从 Arm Compiler 5 迁移到 Arm Compiler 6 ,我们需要注意几点:

  • 调用编译器时命令行选项的差异。
  • 遵守语言标准的差异。
  • 编译器特定关键字、属性和编译指示的差异。
  • 编译器优化和诊断行为的差异。
下面是AC6和AC5的工具链差异:

工具链差异
从这里我们可以看到,出了C编译器和预处理器不同以外,其他基本上都是相同的。

除了工具链的差异,优化也有差异,还有一些默认的差异,包括编译选项,生成的固件命后缀不同等等,详细可以参考上述的链接。至于强不强,用了才知道嘛。

Keil中切换编译器

在Keil MDK 5.27中,我们打开项目选项,就可以切换编译器了,这里包括了AC5和AC6,具体如下图所示;

为了测试,我用CubeMX生成了一个STM32F103CB基于HAL库的Keil MDK工程,使用AC5编译器进行构建;

总共耗时 10 秒;

后面我切换成AC6编译器,进行重新构建;

总共耗时 5 秒;

如果单纯基于HAL库,没有加入其他第三方库的话,直接在项目选项中的编译器选项中,选择AC5和AC6就可以实现无缝切换,这是因为在CMSIS中已经帮你做好了兼容性的处理,在cmsis_compiler.h中,这里的条件编译选项,我们可以发现已经通过判断不同的编译器版本,而包含了不同的头文件,分别是对应armcc和armclag的;如下图所示;

项目已经根据系统进行了选择;

#elif defined (__ARMCC_VERSION) 
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

把大量权重剪成零,只改变了模型中的数值,并不自动缩短运行时间。NPU要从稀疏性中获益,既需要用合适的格式跳过无效计算,也需要避免少数高密度分块拖住整个并行任务。

关键字: NPU 权重 编译器

Tiny Basic for Arduino项目的主要目标是,在现代低功耗MCU平台上重现那充满怀旧感的C64编程环境。如今的微控制器在处理能力和内存容量上远超当年的复古系统,同时价格却仅为过去设备的极小部分。

关键字: MCU 微控制器 Arduino 编译器

无安装次数限制、内置优化工具,可简化并加速嵌入式与边缘AI部署

关键字: 编译器 机器学习 嵌入式

模型搬到端侧,不等于就能更快。边缘计算里的轻量化常见误区,是把参数减掉当成了时延下降。

关键字: 边缘计算 编译器 量化

在微控制单元(MCU)的开发过程中,程序空间的高效利用与管理是保障系统稳定性、安全性的关键环节。MCU的程序存储器(通常为FLASH)中,未被代码或数据占用的空间若处于闲置状态,可能会成为系统潜在的风险点,比如数据残留导...

关键字: MCU 编译器

在系统编程与底层开发领域,结构体作为一种复合数据类型,是构建复杂数据模型的核心工具。然而,结构体的内存布局并非简单的字段大小叠加,其实际占用空间受数据对齐、编译器优化、语言特性等多重因素影响。错误估算结构体大小不仅会导致...

关键字: 编译器 内存

在嵌入式开发中,C语言编写的代码最终会被编译器转化为机器指令,而理解这一转化过程对优化程序性能至关重要。通过反编译工具观察不同优化等级下的汇编代码,开发者能直观看到编译器的"思考方式",从而写出更高效的C代码。

关键字: C语言 反编译工具 编译器

在资源受限的嵌入式系统中,代码空间优化直接影响产品成本与可靠性。通过编译器选项调优、链接脚本定制及代码结构重构的组合策略,可在保持功能完整性的前提下,将Flash占用降低30%-60%。

关键字: 嵌入式代码 编译器 链接脚本

在之前的文章中,我们已经了解到如何在 AMD Versal AIE-ML 架构上创建一个 FFT 应用程序,而无需进行任何 AIE-ML 内核编码,只需使用 AMD DSP 库即可实现。然后,我们还看到了如何利用 Vit...

关键字: 傅里叶变换 人工智能 编译器 MATLAB

在高性能计算领域,循环优化是提升代码执行效率的核心手段。循环展开(Loop Unrolling)通过减少循环控制开销和增加指令级并行性提升性能,而编译器优化选项则通过静态分析自动应用多种优化技术。二者协同使用可产生超越单...

关键字: 编译器 循环展开
关闭