ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Keil5与VSCode配置Arm Compiler 5.06独立安装指南

Keil5与VSCode配置Arm Compiler 5.06独立安装指南 1. 为什么要把 Arm Compiler 5.06 单独拎出来装搞嵌入式开发的朋友尤其是玩 STM32 这一类 Arm Cortex-M 芯片的大概率都经历过这样的场景项目从同事或者网上拉下来用 Keil5 一打开点编译直接弹出一堆红字核心报错往往就一句——cannot open source input file xxx.h或者更直接的Arm Compiler 5 not found。再一看工程设置里的 Target 选项卡编译器下拉框里只有 Arm Compiler 6压根找不到 AC5 的影子。这个问题的根源得从 Arm 官方对编译器版本的策略调整说起。Arm Compiler 5内部代号 armcc也就是大家常说的 AC5在很长一段时间里是 Keil MDK 的默认编译器大量存量工程、第三方库、芯片原厂例程都是基于它写的。后来 Arm 推出了 Arm Compiler 6基于 Clang/LLVM代号 armclang从 MDK 5.37 版本开始官方安装包里默认就不再附带 AC5 了。这就导致一个很尴尬的局面新装的 Keil5 编译老工程直接歇菜。更麻烦的是很多人同时用 VSCode 写代码靠插件调用编译器做语法检查和 IntelliSense如果 VSCode 找不到 AC5 的路径代码里全是红色波浪线写起来极其难受。所以把 Arm Compiler 5.06 独立安装、并且让 Keil5 和 VSCode 都能正确识别它就成了一个非常实际的需求。这篇内容就是把我自己反复折腾多次的经验整理出来从下载、安装、路径配置到两个 IDE 的对接一步步讲清楚。不管你是刚接触 STM32 的新手还是被编译器版本坑过的老手都能照着做下来。核心关键词就几个Keil5、VSCode、Arm Compiler 5.06、AC5、编译报错围绕这几个点把整个流程打通。需要提前说明的是Arm Compiler 5.06 有多个 update 版本社区里流传最广、兼容性最好的是Arm Compiler 5.06 update 7 (build 960)后面我讲的路径和配置都以这个版本为准其他 update 版本操作逻辑一致只是文件夹名字略有差异。2. 安装前的准备工作与版本选择逻辑2.1 先搞清楚你手里的 Keil5 是什么版本动手之前先打开 Keil5点菜单栏Help - About uVision看清楚版本号。这一步很关键因为它决定了你后面要不要单独装 AC5。如果你的 MDK 版本在5.36 及以下安装包里通常自带 AC5你只需要在工程设置里把编译器切回 AC5 就行不一定需要独立安装。如果你的 MDK 版本是5.37 及以上那基本可以确定默认不带 AC5 了必须手动补装。还有一种情况是安装时勾选了组件但没勾全导致 AC5 缺失这种也得补。我个人的建议是不管你的版本带不带都养成独立安装 AC5 的习惯。原因很简单独立安装的编译器路径清晰、版本可控不会因为 Keil 升级或者重装而丢失VSCode 那边配置起来也更省心。2.2 版本选择为什么偏偏是 5.06 update 7Arm Compiler 5 的版本号一路从 5.01 走到 5.06中间还有一堆 update。为什么大家普遍推荐 5.06 update 7第一5.06 是 AC5 系列的最后一个大版本之后的 AC6 是完全不同的架构语法和优化策略都变了。5.06 update 7 是这个系列的收尾版本bug 修复最全稳定性最好。第二兼容性覆盖最广。大量 STM32 标准外设库、HAL 库的早期版本、以及各种第三方 RTOS比如 FreeRTOS 的老版本移植都是在这个版本下验证过的。用太老的版本可能缺少某些 C99 特性支持用 AC6 又会遇到一堆语法不兼容。第三社区资料最丰富。你遇到任何编译问题搜出来的解决方案基本都是基于 5.06 的踩坑成本最低。提示不要盲目追求最新版本。嵌入式工具链这东西稳定和兼容永远比新特性重要。一个能跑通所有老工程的编译器比一个天天报语法错误的新编译器有价值得多。2.3 下载渠道与文件校验Arm Compiler 5.06 的安装包官方渠道是 Arm 的开发者网站但需要注册账号且流程略繁琐。社区里更常见的做法是从 Keil 官方提供的独立安装包获取文件名通常类似ARM_Compiler_5.06u7.exe或者以.zip形式提供。下载的时候注意几点认准build 960这个版本号这是 update 7 的标识。文件大小大概在几百 MB如果下载下来只有几十 KB那多半是下载页面而不是安装包本身。下载完成后右键看属性确认是可执行文件或者完整的压缩包。我踩过的一个坑是从某些第三方站点下载的安装包被重新打包过安装后路径里多了一层奇怪的目录导致 Keil 死活识别不到。所以尽量用官方或者可信来源的包省得后面排查半天。3. Arm Compiler 5.06 的独立安装实操3.1 安装路径的选择原则双击安装包第一步就是选安装路径。这一步看着简单其实很讲究。默认路径一般是C:\Keil_v5\ARM\ARM_Compiler_5.06u7或者类似的位置。我的建议是路径里绝对不要有中文和空格。这是嵌入式工具链的通病很多老工具对中文路径支持极差轻则报错重则直接崩溃。用纯英文、无空格的路径比如D:\Tools\ARM_Compiler_5.06u7。路径不要太深。有些工具对路径长度有限制嵌套太深容易出问题。和 Keil 主目录放在同一盘符下方便管理也避免跨盘符引用时的一些奇怪问题。安装过程本身没什么难度一路 Next 就行。安装完成后去你选的路径下看一眼应该能看到bin、include、lib这几个核心目录。bin目录里最关键的可执行文件是armcc.exe这是 AC5 的编译器主程序后面配置路径就是指向它所在的目录。3.2 验证安装是否成功装完之后别急着开 Keil先在命令行里验证一下。打开 CMD 或者 PowerShellcd 到bin目录执行armcc --version如果输出类似Arm Compiler 5.06 update 7 (build 960)的信息说明编译器本身没问题。如果提示不是内部或外部命令那要么是路径不对要么是文件缺失得回头检查。这一步很多人会跳过结果后面 Keil 里配了半天不生效最后发现是安装包本身有问题。先验证再配置能省掉大量无效排查。3.3 关于环境变量的取舍网上有些教程会让你把 AC5 的bin目录加到系统环境变量PATH里。我的建议是非必要不加。原因在于如果你电脑上同时装了 AC5 和 AC6或者装了多个版本的 AC5环境变量里混在一起很容易导致调用错版本。Keil 和 VSCode 都是通过显式路径来指定编译器的不依赖环境变量。保持环境变量干净反而能避免很多版本冲突的玄学问题。当然如果你习惯在命令行里直接敲armcc那加一下也无妨但要注意顺序把你想默认用的那个版本放在前面。4. 让 Keil5 正确识别并使用 AC54.1 在工程设置里切换编译器打开你的 Keil5 工程点工具栏的魔术棒图标Options for Target进入Target选项卡。这里有一个ARM Compiler的下拉框。如果你之前只看到Use default compiler version 6之类的选项说明 Keil 还没识别到 AC5。这时候下拉框里可能只有 AC6 的选项或者干脆是空的。正确的状态是下拉框里能看到Use default compiler version 5或者直接列出Arm Compiler 5.06 update 7这样的具体版本。选中它然后点 OK。4.2 手动添加编译器路径关键步骤如果下拉框里没有 AC5 选项就需要手动添加。操作路径是在Target选项卡的编译器下拉框旁边点Manage或者直接进Project - Manage - Project Items不同版本入口略有差异。找到编译器管理界面点Add或者Browse。定位到你 AC5 安装目录的上一级也就是包含ARM_Compiler_5.06u7这个文件夹的目录或者直接定位到bin目录的上一级。选中后确认Keil 会自动扫描该目录下的编译器信息。这里有个细节Keil 识别编译器靠的是目录里的一个描述文件通常是ARM_Compiler_5.06u7根目录下的相关配置。所以你指向的路径必须是安装根目录而不是bin目录本身。指向bin目录是识别不到的这是新手最容易犯的错。添加成功后回到Target选项卡下拉框里应该就能看到 AC5 了。选中它重新编译工程之前那些因为编译器缺失导致的报错基本就消失了。4.3 编译验证与常见报错对照切换编译器后点Rebuild全量编译一次。这时候可能还会遇到一些报错但性质已经变了——不再是找不到编译器而是代码层面的兼容性问题。下面这张表是我整理的高频报错和对应处理思路报错信息可能原因处理思路Arm Compiler 5 not found路径未配置或配置错误检查是否指向安装根目录cannot open source input file头文件路径未包含在 C/C 选项卡添加 Include Pathsidentifier xxx is undefined缺少宏定义检查 Define 里的宏是否完整xxx.h: No such file库文件版本不匹配确认使用的库与 AC5 兼容L6218E: Undefined symbol链接阶段缺文件检查是否漏加 .c 或 .s 文件注意切换编译器后建议做一次全量 Rebuild而不是增量编译。因为不同编译器生成的中间文件格式不同增量编译可能残留旧文件导致链接错误。4.4 一个容易被忽略的细节Target 选项卡的 XTAL 变灰有朋友反馈切换编译器后Target选项卡里的XTAL晶振频率输入框变灰了改不了。这个现象通常和芯片型号选择有关。如果你选的芯片型号不对或者芯片包没装全Keil 会限制某些参数的编辑。解决办法是确认Device选项卡里选的芯片型号和实际硬件一致并且对应的芯片包Pack已经正确安装。装好芯片包后XTAL 一般就能正常编辑了。这个细节虽然和编译器没直接关系但在配置过程中经常一起出现顺手解决掉。5. VSCode 对接 AC5 的完整配置5.1 为什么 VSCode 也需要单独配置很多人以为 VSCode 只是个编辑器编译还是靠 Keil。但实际上VSCode 的 C/C 插件需要知道编译器的位置才能提供准确的语法检查、跳转和补全。如果它找不到 AC5代码里会满屏红色波浪线虽然不影响 Keil 编译但写代码的体验极差。所以 VSCode 这边的配置目标很明确让 C/C 插件知道 AC5 的头文件在哪、编译器在哪从而提供正确的 IntelliSense。5.2 配置 c_cpp_properties.json在 VSCode 里打开你的工程文件夹按CtrlShiftP输入C/C: Edit Configurations (JSON)会生成或打开.vscode/c_cpp_properties.json文件。核心配置项如下{ configurations: [ { name: STM32_AC5, includePath: [ ${workspaceFolder}/**, D:/Tools/ARM_Compiler_5.06u7/include, D:/你的工程依赖库路径/** ], defines: [ STM32F103xB, USE_HAL_DRIVER ], compilerPath: D:/Tools/ARM_Compiler_5.06u7/bin/armcc.exe, cStandard: c99, cppStandard: c11, intelliSenseMode: windows-gcc-arm } ], version: 4 }几个关键点解释一下includePath里必须加上 AC5 的include目录否则标准头文件找不到。compilerPath指向armcc.exe这是让插件识别编译器类型的关键。defines里的宏要和 Keil 工程里C/C选项卡的 Define 保持一致否则条件编译的代码会显示异常。intelliSenseMode选windows-gcc-arm是比较接近 AC5 行为的选项虽然 AC5 不是 GCC但 IntelliSense 模式选这个兼容性最好。5.3 用 tasks.json 实现 VSCode 内编译如果你希望直接在 VSCode 里按快捷键就能编译可以配置tasks.json。在.vscode目录下新建tasks.json{ version: 2.0.0, tasks: [ { label: Build with AC5, type: shell, command: D:/Tools/ARM_Compiler_5.06u7/bin/armcc.exe, args: [ -c, ${file}, -o, ${fileDirname}/${fileBasenameNoExtension}.o, -I, D:/Tools/ARM_Compiler_5.06u7/include, -I, ${workspaceFolder}/Inc ], group: { kind: build, isDefault: true }, problemMatcher: [$gcc] } ] }这样配置后按CtrlShiftB就能对当前文件做单文件编译快速验证语法。注意这只是单文件编译完整工程还是建议用 Keil 或者 Makefile 来构建。5.4 VSCode 插件搭配建议光配好编译器还不够几个插件能大幅提升体验C/C微软官方提供 IntelliSense 核心功能必装。Cortex-Debug如果你用 J-Link 或 ST-Link 调试这个插件能让你在 VSCode 里打断点调试。ARM Assembly看汇编代码时语法高亮调试底层问题时有用。Chinese (Simplified)汉化界面看个人习惯。装插件的时候注意C/C 插件版本更新较快有时候新版本对老编译器的支持会有变化。如果配置后 IntelliSense 异常可以尝试回退到稍早的稳定版本。6. 常见问题排查与避坑经验6.1 编译报错排查速查表实际折腾过程中问题往往不是单一的而是好几个叠在一起。我把最常见的几类问题整理成表方便对照排查现象排查方向解决动作Keil 下拉框无 AC5路径未添加手动 Add 安装根目录添加后仍不显示路径指向错误确认指向根目录而非 bin编译报头文件缺失Include 路径不全补全 C/C 选项卡路径VSCode 满屏红线compilerPath 错误检查 armcc.exe 路径宏定义不生效defines 不一致与 Keil 工程宏对齐链接报未定义符号源文件漏加检查工程文件列表编译速度异常慢优化等级过高调试阶段用 -O06.2 路径配置的三个高频坑第一个坑是路径含中文。我见过太多人把工具装在D:\软件\Keil这种路径下结果各种莫名其妙的报错。嵌入式工具链对中文路径的容忍度极低务必用纯英文。第二个坑是路径含空格。Program Files这种带空格的路径在某些命令行调用场景下会被截断导致找不到文件。虽然加引号能解决一部分问题但不如一开始就避开。第三个坑是斜杠方向。Windows 下路径用反斜杠\但在 JSON 配置文件里反斜杠是转义字符必须写成双反斜杠\\或者正斜杠/。VSCode 的配置文件里推荐统一用正斜杠省心。6.3 多版本编译器共存的隔离策略如果你电脑上同时有 AC5 和 AC6甚至多个 AC5 版本隔离策略很重要每个版本装在不同的独立目录目录名带版本号比如ARM_Compiler_5.06u7、ARM_Compiler_6.19。Keil 工程里通过Target选项卡切换不同工程用不同编译器互不影响。VSCode 的c_cpp_properties.json可以配置多个 configuration按工程切换。不要依赖环境变量来区分版本显式路径最可靠。6.4 关于 Keil5 与 C51 共存的注意事项有些朋友既要搞 STM32又要搞 51 单片机会在一台电脑上同时装 Keil MDK 和 Keil C51。这两个虽然都是 Keil 家的但安装目录和注册机制是独立的。共存的关键是装在不同目录分别激活。MDK 管 ARMC51 管 8051两者的编译器、芯片包、License 都不通用。装的时候注意别覆盖了对方的目录。另外C51 有 2K 代码限制的版本如果需要解除限制那是另一套授权流程和 AC5 的配置没有关系别混在一起搞。6.5 烧录失败与编译器的关系偶尔有人问烧录失败是不是编译器的问题。绝大多数情况下烧录失败和编译器无关。烧录走的是调试器ST-Link、J-Link 等和芯片的通信编译器只负责把源码变成可执行文件。烧录失败常见原因调试器驱动没装好、芯片供电异常、SWD 接线错误、芯片被读保护等。排查烧录问题先看调试器能不能识别到芯片再看下载算法配置对不对和 AC5 没关系。把这两类问题分开能少走很多弯路。7. 我个人的几点实操体会折腾这套环境这么多次有几个体会特别深。第一配置类问题先验证工具本身再验证配置。很多人一上来就改配置改了半天发现是安装包本身有问题。先命令行跑一下armcc --version确认工具没问题再动配置效率高得多。第二路径问题占了所有问题的七成以上。中文、空格、斜杠方向、指向层级这几个点反复检查能解决大部分玄学报错。第三Keil 和 VSCode 的配置要分开理解。Keil 管的是实际编译构建VSCode 管的是编辑体验和 IntelliSense。两者配置逻辑不同不要指望配好一个另一个自动生效。分开配各自验证。第四保留一份能跑通的配置备份。.vscode目录、Keil 的工程配置文件这些配好之后备份一份。换电脑或者重装系统时直接复制过去能省掉大量重复劳动。最后分享一个小技巧如果你经常在不同项目间切换可以把 AC5 的路径配置写成一个模板新工程直接套用只改工程相关的 Include 路径和宏定义。这样每次新建工程不用从零配起几分钟就能进入写代码的状态。
返回列表