VS Code 用作嵌入式开发编辑器
使用 Keil MDK 进行嵌入式开发时,Keil 的编辑器相对于主流编辑器而言有些不方便,比如缺少暗色主题、缺少智能悬停感知(比如鼠标停在一个宏上,能自动展开最终的宏结果)、代码补全不好用等等,所以推荐使用 VS Code 来代替 Keil 的编辑器。,而有些代码和头文件会使用这些宏,在使用 VS Code 的时候就会找不到这些宏,从而导致语法错误。中,填入需要的宏(注意:我这里使用的是 Kei
使用 Keil MDK 进行嵌入式开发时,Keil 的编辑器相对于主流编辑器而言有些不方便,比如缺少暗色主题、缺少智能悬停感知(鼠标停在一个宏上,能自动展开最终的宏结果)、代码补全不好用等等,所以推荐使用 VS Code 来代替 Keil 的编辑器。本文用于记录所需的设置项。
如果是第一次使用 vscode ,推荐先看一下《基于Windows 的 VS Code C/C++ 编译环境搭建》这篇文章。
软件安装
- 安装
VS Code - 安装以下插件:
C/C++:必装,提供语法高亮等Bookmarks:选装,设置书签CMake:选装,构建工具,可以用于构建测试 (必须另外安装 CMake 软件和编译器,参考这里)GitLens:选装,显示 Git 提交时间线等Hex Editor:选装,按照 16 进制显示文件内容markdownlint:选装,渲染 Markdown 文件Remote-SSH:选装,连接到远程 SSH,比如 Linux 主机VBS:选装,开发 VBS 脚本TONGYI Lingma:选装,通义灵码,带 AI 的智能补全工具Python:选装,用于 Python 代码开发 (必须另外安装 Python 软件,参考这里)cpp-check-lint:选装,静态代码分析,内置cppcheck和cpplint静态分析工具ShellCheck:选装,检测 shell 代码Bracket Pair Color DLW:选装,彩色括号VSCode Counter:选装,统计代码行数
软件用法和设置
-
使用 VS Code 打开 Keil 工程
打开 VS Code,点击File - Open Folder...选中 Keil 工程文件夹。
-
保存工作区(可选)
主要目的是下次可以双击这个工作区图标来打开工程,一个 Keil 工程只需要保存一次。

-
添加头文件
Keil 工程文件夹内的头文件会自动查找,但工程依赖的一些头文件可能存在其它地方。所有不在工程文件夹内的头文件,都需要手动添加。
-
添加编译器提供的头文件
编译器提供一些特定头文件和 C 库头文件,比如
stdint.h,缺少这个头文件,VS Code 识别不了代码中的uint32_t。 -
添加 CMSIS 提供的头文件
-
其它
首先按下
F1,输入c/c++选择C/C++:Edit configurations(UI):
在Include path中填入需要的头文件路径(注意:我这里使用的是 Keil MDK 编译器)。
-
-
添加宏
编译器会自带一些宏,比如 Keil 编译器则会定义宏
__CC_ARM,而有些代码和头文件会使用这些宏,在使用 VS Code 的时候就会找不到这些宏,从而导致语法错误。这些与编译器相关的宏需要我们自己添加。在
Defines中,填入需要的宏(注意:我这里使用的是 Keil MDK 的 ARMCLANG编译器)
-
从 Keil 中打开 VS Code工作区(可选)

Run Independent:勾选,这样Keil不用等待VSCode执行完成。(这样就可以使用其它自定义工具菜单)。 -
隐藏不需要的文件和文件夹(可选)
- 按下
ctrl+shift+P打开显示所有命令,在输入框中输入settings回车 - 进入
User Settings页面搜索files.exclude
- 按下
-
自动删除每行末尾的空格和制表符(可选)
点击左下角齿轮图标 - Settings,打开设置界面,切换到 User 选项卡,搜索Trim Trailing Whitespace,使能。 -
自动确保文件末尾有且仅有一个换行符(可选)
点击左下角齿轮图标 - Settings,打开设置界面,切换到 User 选项卡,搜索Insert Final Newline和Trim Final Newlines,使能。
自动编译和下载脚本
在 vscode 中编写代码,但编写完的代码要切换到 Keil 中编译和下载,这使得流程有点割裂。我们可以写个脚本代码,来通过脚本调用 Keil 程序编译代码和下载:
- 设置(只需一次):Settings - Auto Save,选择
onFocusChange。这是为了切换到内置终端时自动保存修改的文件。 - 编写 vbs 脚本,实现编译和下载脚本代码,建议脚本和 vscode 工作区在同一目录 (主要为了不必修改目录就可以调用脚本)
- 在 vscode 内置终端(
TERMINAL,如果没有可以 Terminal - New Terminal),输入cscript.exe .\脚本名
代码格式化
安装 C/C++ Extension 扩展后,就可以按下 Shift+Alt+F 组合键,对选中的代码或者文件内的代码自动格式化。VS Code 自带的编辑器本身不懂 C/C++ 的格式化规则,而是调用:
- clang-format(默认)
- 或vcFormat(微软自带的 VC++ 格式化器,Windows 环境下可用)
保存时自动格式化
在 VS Code 的设置(settings.json)里,在左侧窗口找到:Text Editor - Formatting,然后勾选 Editor:Format On Save 。
配置格式化效果
首先在工程根目录新建 .clang-format 文件,这里面描述格式化规则。因为我使用了谷歌的 cpplint 检查代码风格,所以我的自动格式规则基于 Goolge 风格,然后略作调整:
- 要求
{独占一行 - 每行最大字符放宽到 120
- 永不使用 Tab 键,并且缩进宽度是 4 个空格
- 不允许在一行写整个函数,短函数也不行
BasedOnStyle: Google
UseTab: Never # 不使用制表符,用空格代替
IndentWidth: 4 # 缩进宽度
AllowShortIfStatementsOnASingleLine: false
ColumnLimit: 120
SpaceBeforeParens: ControlStatements # 只在控制语句(如if、for、while等)的圆括号前加空格
BreakBeforeBraces: Allman # 大括号总是在新的一行开始。
StatementMacros:
- TEST
AllowShortBlocksOnASingleLine: false # 不允许短的块(如if、for、while的块)放在同一行
AllowShortFunctionsOnASingleLine: Empty # 允许函数放在同一行(空函数可以)
#ForEachMacros:
# - TEST_GROUP
SpacesBeforeTrailingComments: 2 # 注释前的最小空格数(按需调整)
AlignTrailingComments: true # 开启行尾注释对齐
AlignConsecutiveMacros: true # 对齐连续定义的宏(常用于常量注释)
AlignConsecutiveDeclarations: true # 对齐连续变量声明(含注释)
PointerAlignment: Right # 将指针符号*放在变量名旁边(int *tmp)
踩坑
- 特殊不需要自动格式化的代码可以用:
// clang-format off 这里放不需要自动格式化的代码 // clang-format on - 让结构体数组强制换行:在每个元素后加注释(
//),格式化器看到注释,就认为“这一行已经完整”,不会压行。
自定义主题
主题保存在 %USERPROFILE%\\.vscode\\extensions 中,选择其中一个作为模版,在其上进行自定义修改。
我选择 ms-vscode.cpptools-themes-2.0.0 作为模板,将 cpptools_dark_vs_new.json 内容进行修改:
背景 颜色为浅黑色:#212121
注释 颜色为浅灰色:#575E6A
关键字 颜色为蓝色:#569CD6
宏 颜色为蓝色:#61AFEF
函数 颜色为绿色:#6A9955
局部变量 颜色为番茄红:#E06C78
因为关键字和宏的颜色接近,所以代码颜色大约有 5 种,效果为:
一些已知问题和解决办法
1 补全失效、无法跳转
- 文件第一行的 include 会有红波浪,报错提示
command-line error:language modes specified are incompatible; - vscode 无法正确的着色部分代码,比如宏;
- 补全功能完全失效;
- 无法进行文件跳转;

我的工程中使用了 cMake 构建,然后出现了这个问题,也就是 vscode 无法找到头文件了。
解决办法:Ctrl + Shift + P ,输入 configurationProvider
将 CMake Tools 改为 none 。
2 不小心关闭了错误检测
解决办法:Ctrl + Shift + P ,输入 errorSquiggles,选择 Enable。
3 快捷键 Ctrl + Shift + F 无反应
大概率和其它软件的快捷键冲突了。
这里给出一个 Win10 系统会冲突的软件:输入法
打开 设置 界面,点击“时间和语言”界面,在弹出的界面中(如下图所示),点击右侧的 语言 - 中文(简体,中国) - 选项 。
在弹出的“语言选项”中,点击 微软拼音 - 选项 ;
在弹出的“微软拼音”中,点击 按键;
在弹出的“按键”中,找到 热键,关闭“简体/繁体中文输入切换”:
这还没完,如果你安装了“搜狗输入法”,还需要找到 搜狗输入法 - 设置 - 按键 - 系统功能快捷键设置 ,把其中的“简繁切换”关闭(或修改成其它快捷键)。
4 打开的文件中文乱码
可能是 Vs Code 使用的编码与 keil 使用的编码不同导致的。假设 keil 使用 GB2312 编码,将 Vs Code 的编码改为 GB2312 的方法如下:
- 点击左下角齿轮图标 - Settings,打开设置界面,点击 Workspace 选项卡。
- 搜索 “encoding”,找到
Files:Encoding,选择 Simplified Chinese (GB 2312) 编码。
注:如果文件编码格式为 GB 2312,并且悬浮窗口中的中文出现乱码(如下图所示),使用本方法也能解决。
在 VS Code 的 Settings(设置) 界面中,有三个不同的选项卡:User(用户)、Workspace(工作区) 和 Folder(文件夹)。它们分别代表不同层级的配置,优先级和作用范围不同。
- User(用户):全局,适用于当前用户的所有 VS Code 项目,除非被 Workspace 或 Folder 设置覆盖。适用于个人偏好设置,如主题、字体、快捷键等。
- Workspace(工作区):适用于当前打开的 Workspace(工作区),保存在 .vscode/settings.json 文件内(如果工作区是单个文件夹)或者 .code-workspace 文件中。适用于特定项目的配置,如语言特定设置、调试配置、扩展推荐等,会覆盖 User 设置。
- Folder(文件夹):仅适用于当前打开的 单个文件夹(而非工作区)。保存在 .vscode/settings.json 文件内。会覆盖 User 设置,但 Workspace 设置优先级更高。
5 调试变量按照 16 进制显示
在 WATCH 窗口添加变量时,变量名后面增加 ,h ,即可按照 16 进制显示变量值。
6 CMake 生成 Release 可执行文件
VSCode 的 CMake Tools 扩展默认使用 Debug 配置,这是为了便于开发调试。当编译代码时,它会自动添加 --config Debug参数。如果想在 VSCode 中编译 Release 版本,方法如下:
- 打开命令面板(Ctrl+Shift+P)
- 输入 “CMake: Select Variant”
- 选择 “Release”
- 重新构建项目
我使用 CppUtest 做测试,相较于 Debug 版本,Release 版本体积降低了一半多,速度快了一倍多。
注意:如果使用
Release版本,则项目不能在线调试,因为只有Debug版本才生成调试信息。
终端滚动行数少,编译信息显示不全
VSCode 默认情况下,终端的回滚行数为 1000 行,这在编译大型项目时是远远不够的,修改方法是:
- 点击左下角 “Setting”
- 输入
terminal scrollback,找到设置项
- 将数值修改为需要的大小
远程连接
使用 WSL2
vscode 中搜索 WSL 扩展,安装完毕后按下图查看 Ubuntu 系统:
点击 Ubuntu -22.04 右侧的箭头,连接到 Ubuntu :
使用 VMware 虚拟机
- 在 Ubuntu 中安装 OpenSSH 服务器:
sudo apt install openssh-server - 确认 SSH 服务正在运行:
sudo systemctl status ssh - 使用
ifconfig或者ip addr show命令查看 Ubuntu IP 地址,假设为192.168.1.100 - 使用
whoami查看当前登陆用户名,假设为ubuntu-2204 - 在 Windows 中安装 vscode,vscode 中安装 Remote-SSH 插件
- 如下图所示添加远程连接,输入
ssh Ubuntu-204@192.168.1.100
- 找到新添加的连接,如上图蓝框中所示(IP 地址应是 192.168.1.100),点击 IP 地址右侧的箭头(
->)来连接到你的 Ubuntu 虚拟机。注意第一次连接时会要求确认主机并输入密码。 - 安装必要的 vscode 插件
- 打开远程工作区,就可以远程开发了。
如果想免密连接,需要将 Windows 下的公钥添加到 Ubuntu 下的
~/.ssh/authorized_keys文件中。
远程连接踩坑
使用 vscode 打开 U-Boot、Linux 源码,并且通过 File-Save Workspace As... 创建工作区工程文件。但是使用 make clean 清除编译信息时,vscode 会闪烁一下,然后弹出:“Workspace dose not exist” 的提示,工作区也会消失。

这时因为 make clean 把你的 xxxx.code-workspace 当成编译产物删掉了。业界标准做法是把工作区文件放在源码目录之外。
版本控制(Git)
- 打开源代码控制界面
- 输入 message - 点击 Commit
- 首次 Push 前,需要设置远程仓库地址。
- 先在云端新建仓库,可以选择 Gitee 或者 Github 等云平台,获取新建仓库的地址
- 按照下图设置远程仓库地址

- 点击同步按钮,将本地更改上传到远程仓库。
读后有收获,资助博主养娃 - 千金难买知识,但可以买好多奶粉 (〃‘▽’〃)
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)