少女祈祷中...

前言

  • 最近看了也学了很多东西,但大部分不成系统,也就没办法形成清晰的文章进行分享和记录。但又很久没更新了,索性就分享或者说记录下如何优雅的使用 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 的配置文件修改的,反正删删改改,能用就行。

参考文章