[麦麦茶水间] 【每周分享】Keil编译器AC5和AC6的区别和使用

[复制链接]
2247|6
 楼主| dffzh 发表于 2025-7-16 17:28 | 显示全部楼层 |阅读模式
在Keil的ARM Compiler编译器配置中,经常用到的有AC5和AC6两个版本,如下图所示,那这两个版本有什么区别呢?我们怎么选择呢?本文给大家简单解释一下。
当你选择AC5编译器时,界面如下所示:
而C/C++菜单下面的编译优化等级如下图所示,共有4种优化等级供选择:
当你选择AC6编译器时,界面如下所示:
而C/C++菜单的名称变成了C/C++(AC6),从这里可以看出,Keil默认编译器应该是VC5,并且下面的编译优化等级如下图所示,共有7种优化等级供选择:
先解释一下VC5的4种优化等级:
Level 0(-O0):近乎不优化,用于调试代码,出现代码行不能设置断点的时候可以这么设置试试;
Level 1(-O1):部分优化,去除未调用的内联函数或者静态函数,关闭debug窗口优化,此状态也能用于调试;
Level 2(-O2):默认优化等级,如果处于debug状态,部分代码行将不能被调试;
Level 3(-O3):除了和等级2执行相同的优化以外,还有空间和时间之间的平衡优化在生成的代码中比等级2更重的空间或时间。
再解释一下VC6的7种优化等级:
-O0:没有优化,不推荐在ARMCompiler6.6中使用;
-O1: 有限优化,这是源代码调试的推荐级别;
-O2:优化速度,由于许多循环展开和函数内联,代码大小将增加;
-O3:优化速度,比-O2生成的代码更快,但更大;
-Ofast:暂未没有找到资料;
-Os: 平衡的优化,优化速度,代码大小的增加是合理的;
-Oz:纯粹优化代码大小。
总之:
AC5提供了4种不同的优化级别,它们的行为和优化等级相关,优化等级越高,代码越小。
AC6各个优化等级不存在直接的关系,可以将项目在各个优化等级下进行编译,选择最优的优化等级即可。

作者分别用AC5和AC6的默认优化等级编译了一套程序,可以对比看下两者的生成代码的大小,区别还是比较大的:
另外,如果出现类似下面这种在编译时报很多警告的情况(来自帖子https://bbs.21ic.com/icview-3466614-1-1.html),也可以尝试将编译器改成VC5试试:
如果出现操作跳转变量或者函数等到其定义的地方时报错的情况,也可以尝试将编译器改成VC5试试(来自作者实操):

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
huangcunxiake 发表于 2025-7-17 10:52 | 显示全部楼层
AC5优化更好?

评论

可以这么说,我一般都用AC5编译。  发表于 2025-7-17 11:10
21mengnan 发表于 2025-7-25 16:47 | 显示全部楼层
可能AC6考虑的更多。

评论

应该是,版本高一点,可能兼容性功能上什么的更多吧。  发表于 2025-7-25 17:13
xuanhuanzi 发表于 2025-7-26 21:49 | 显示全部楼层
在类型存储上两者差别挺大。
四十四次日落 发表于 2025-9-27 15:36 | 显示全部楼层
核心差异:AC5 基于 ARM Compiler 5,支持较旧 ARM 内核(如 Cortex-M0/M3),兼容性强但优化一般;AC6 基于 LLVM 架构,支持新内核(如 Cortex-M7/M85),代码密度、执行效率更优,且对 C++11 及以上标准支持更好。
使用建议:旧项目维护选 AC5;新项目尤其是用新内核、需高效代码或 C++ 开发时,优先用 AC6,注意部分旧库需适配,可通过 Keil 工程设置快速切换编译器版本。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

143

主题

1393

帖子

23

粉丝
快速回复 在线客服 返回列表 返回顶部