前言
- 最近看了也学了很多东西,但大部分不成系统,也就没办法形成清晰的文章进行分享和记录。但又很久没更新了,索性就分享或者说记录下如何优雅的使用 vscode 进行嵌入式软件开发。
插件
Keil Assistant
- 首先是 Keil,因为 vscode 本身不带有环境。
- 其次是插件 Keil Assistant,这个插件可以让你在 vscode 中直接运行 Keil 进行编译和刷写。但是如果要添加文件或者修改编译选项的话还是要去 Keil 那边改。
- 如果可以的话把 mingw 也装上,方便进行代码查看。
C/C++
- C/C++ 插件,以及他的捆绑包。有这玩意的话可以进行代码格式化,而且 mingw 也需要这玩意来调用。
CodeGeex
- 合适的 AI 工具总是能事半功倍。这个在我看来还是很好用的。毕竟我主要需要这个进行一些重复性的工作,比如变量的写入和注释。毕竟嵌入式的很多时候,算法不如查表。真值表一个个的输入还是太累了,不如一路 tab 下去。
- 当然如果是那种单一批量的修改,还是建议装个 vim 录制下 /手动滑稽。
Serial Monitor
- 串口监听,虽然我一般不会用这个,但聊胜于无,总会有用的。
Todo Tree
- 这个插件可以让你在侧边栏中看到你的 todo ,并且可以很方便的进行管理。这样就可以写一大堆 todo 然后慢慢处理了。
Comment Translate
- 总有注释是英文的,至少不用每次都去查了。建议配置科学使用。
ESP-IDF
- 看需求,不写 esp32 就不用,免得浪费空间。
配置文件
C的配置文件
因为默认 C 的配置文件是拿来编译普通 c 文件的,嵌入式很多库都没有。所以就会看到一堆报错
一般解决方法是关闭错误提示,但嵌入式一般是 C89 标准,所以要是关闭了的话就只能到编译的时候才能看到一些错误,所以我在这分享一下我的配置。
c_cpp_properties.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20{
"configurations": [
{
"name": "gcc-arm",
"includePath": [
// 这个是我的keil的路径,这几个路径根据自己来弄
"D:/Keil_v5/ARM/ARMCC/include/**",
"${workspaceFolder}/**"
],
"compilerPath": "C:/MinGW/bin/gcc.exe",
"cStandard": "c89",
"cppStandard": "${default}",
"intelliSenseMode": "gcc-arm",
"compilerArgs": [
""
]
}
],
"version": 4
}settings.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122{
// 文件关联配置:将特定文件扩展名与语言模式关联
"files.associations": {
"gd32f1x0_it.h": "c" // 强制将.h头文件识别为C语言
},
// 禁用C/C++扩展的语法错误波浪线显示
"C_Cpp.errorSquiggles": "enabled",
// C格式化默认使用vcFormat
"C_Cpp.formatting": "vcFormat",
// 控制块和函数的左大括号位置
"C_Cpp.vcFormat.newLine.beforeOpenBrace.block": "sameLine",
"C_Cpp.vcFormat.newLine.beforeOpenBrace.function": "sameLine",
// 默认宏定义,从工程文件中找,免得宏定义报错
"C_Cpp.default.defines": ["GD32F130_150"],
// ========== 工作区设置 ==========
"workbench.list.smoothScrolling": true, // 启用平滑滚动
"workbench.startupEditor": "newUntitledFile", // 启动时打开空白文件
"workbench.tree.indent": 10, // 资源管理器缩进量为10px
"workbench.editor.highlightModifiedTabs": true, // 高亮修改过的标签页
"workbench.editor.closeOnFileDelete": true, // 文件被删除时自动关闭对应编辑器
"workbench.editor.limit.enabled": true, // 启用编辑器数量限制
"workbench.editor.limit.perEditorGroup": true, // 限制每个编辑器组的数量
"workbench.editor.limit.value": 8, // 每个编辑器组最多8个标签页
// ========== 编辑器设置 ==========
"editor.tabSize": 4, // 缩进4个空格
"editor.detectIndentation": false, // 禁用自动检测缩进
"editor.cursorBlinking": "expand", // 光标闪烁带有扩展动画
"editor.largeFileOptimizations": true, // 大文件优化模式
"editor.accessibilitySupport": "off", // 禁用无障碍支持
"editor.cursorSmoothCaretAnimation": "on", // 启用光标平滑移动动画
"editor.guides.bracketPairs": "active", // 高亮当前作用域的括号对
"editor.inlineSuggest.enabled": true, // 启用内联代码建议
"editor.suggestSelection": "recentlyUsedByPrefix", // 基于前缀的最近使用建议
"editor.acceptSuggestionOnEnter": "smart", // 智能判断Enter键是否接受建议
"editor.suggest.snippetsPreventQuickSuggestions": false, // 代码片段不阻止快速建议
"editor.stickyScroll.enabled": true, // 启用编辑器顶部粘性滚动
"editor.hover.sticky": true, // 悬停提示框保持可见
"editor.suggest.insertMode": "replace", // 建议替换当前文本
"editor.bracketPairColorization.enabled": true, // 启用括号对彩色高亮
// 自动闭合符号配置
"editor.autoClosingBrackets": "beforeWhitespace",
"editor.autoClosingDelete": "always",
"editor.autoClosingOvertype": "always",
"editor.autoClosingQuotes": "beforeWhitespace",
// 单词分隔符定义
"editor.wordSeparators": "`~!@#%^&*()=+[{]}\\|;:'\",.<>/?",
// 保存时执行的代码操作
"editor.codeActionsOnSave": {
"source.fixAll.stylelint": "explicit", // 显式调用Stylelint修复
"source.organizeImports": "never" // 不自动组织import语句
},
"editor.defaultFormatter": "esbenp.prettier-vscode", // 默认格式化工具使用Prettier
// ========== 扩展设置 ==========
"extensions.ignoreRecommendations": true, // 忽略扩展推荐
// ========== 终端设置 ==========
"terminal.integrated.cursorBlinking": true, // 终端光标闪烁
"terminal.integrated.persistentSessionReviveProcess": "never", // 不恢复会话进程
"terminal.integrated.tabs.enabled": true, // 启用终端标签页
"terminal.integrated.scrollback": 10000, // 终端滚动缓冲10000行
"terminal.integrated.stickyScroll.enabled": true, // 终端启用粘性滚动
// ========== 文件排除设置 ==========
// 资源管理器隐藏的文件/文件夹
"files.exclude": {
"**/.idea": true, // IDE配置文件
"**/tmp": true, // 临时文件
"**/.git": true // Git目录
// ...其他版本控制目录和配置文件
},
// 文件监视排除列表
"files.watcherExclude": {
"**/.git/objects/**": true, // Git对象文件
"**/.git/subtree-cache/**": true,
"**/.vscode/**": true // VS Code配置目录
// ...其他构建输出目录
},
// ========== 搜索设置 ==========
"search.searchEditor.singleClickBehaviour": "peekDefinition", // 点击搜索结果行为
"search.followSymlinks": false, // 不追踪符号链接
// 搜索排除列表
"search.exclude": {
"**/*.log": true // 日志文件
// ...其他排除项
},
// ========== 文件嵌套展示 ==========
"explorer.fileNesting.enabled": true, // 启用文件嵌套
"explorer.fileNesting.expand": false, // 默认不展开嵌套文件
// 定义嵌套规则
"explorer.fileNesting.patterns": {
"README.md": "README*,CHANGELOG*,LICENSE,CNAME" // README关联文件
},
// ========== 其他插件设置 ==========
"commentTranslate.multiLineMerge": true, // 合并多行注释翻译
// 拼写检查自定义单词
"cSpell.words": [
// 项目中特定的合法单词
"GigaDevice",
"USART",
"RBNE",
"eeprom",
"halfduplex",
"nvic",
"periph",
"GPIOA",
"GPIOB",
"PUPD",
"MOSI",
"MISO",
"SCLK"
],
"commentTranslate.hover.enabled": true, // 启用悬停翻译
"commentTranslate.source": "Bing", // 使用Bing翻译引擎
"Codegeex.CompletionDelay": 1 // Codegeex补全延迟1秒
}总是要用 git 来做版本管理的嘛,顺便也把我用的
.gitignore也一并放出来吧。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# Keil Generated output files in the sub-directories .\Listings and .\Objects
*.lst
*.o
*.d
*.crf
*.lnp
*.axf
*.htm
*.build_log.htm
*.dep
*.iex
*.i
*_2i
*.l2p
*.fed
*.map
*.hex
*.bin
*.Bak
.vscode
后记
- 因为文章是后面写的,而我 vscode 因为要写很多东西,所以装了一大堆插件,我也不清楚哪个是哪个的。这个配置是我根据
Vue Vben Admin的配置文件修改的,反正删删改改,能用就行。