关注

VScode使用Clangd和Keil Assistant开发MCU工程

网上已经有很多VScode搭配Keil Assistant使用的教程了,这里就不在赘述了。 

文章主要介绍Clangd的插件的使用,该插件在keil生成的MCU工程下使用较少,网上翻了很久也没有找到案例。

首先在Vscode的插件商店里安装Clangd插件,需要注意的是Clangd和C/C++插件功能一致,会导致冲突,需要将C/C++卸载或者禁用。安装完成后随便打开一个你的工程会发现有很多报错。这个是正常的,clangd并不能自动识别你的keil工程所包含的头文件路径和标准库头文件。

先说下标准库头文件怎么添加,找到你clangd的全局配置文件“config.yaml”,如果是从VScode安装的一般在C:\Users\xxx\AppData\Local\clangd下(xxx是你自己的系统用户名。

具体配置贴在下边了,需要注意的是   

- -isystemC:/msys64/ucrt64/include  # 这里的C:/msys64/ucrt64/include替换成你自己的标准库路径每个人都不相同,不确定的可以用索引软件搜索"string.h"所在位置。

# ==================== 代码补全配置 ====================
Completion:
  # 在函数调用时显示参数列表分隔符提示(如逗号)
  ArgumentLists: Delimiters

# ==================== 内联提示配置 ====================
InlayHints:
  # 显示代码块的结束位置提示(如显示 "}" 对应的起始位置)
  BlockEnd: true
  
  # 显示函数参数的默认值提示
  DefaultArguments: true
  
  # 类型名称显示限制:0 表示不限制,显示完整类型名
  TypeNameLimit: 0

# ==================== 悬停提示配置 ====================
Hover:
  # 显示类型的别名信息(如 typedef、using 定义)
  ShowAKA: true

# ==================== 诊断配置 ====================
Diagnostics:
  # 禁用未使用头文件的警告(设置为 None 表示完全关闭) 不关闭你的头文件包含会一直警告
  UnusedIncludes: None
  
  # 抑制特定类型的诊断警告:
  Suppress: 
    - 'drv_unknown_argument'     # 忽略未知编译器参数的警告
    - 'unused-includes'          # 忽略未使用头文件的警告(与上条配合)
    - 'pp_file_not_found'        # 忽略预处理器找不到文件的警告

# ==================== 编译标志配置 ====================
CompileFlags:
  # 添加系统头文件搜索路径(关键配置!)
  Add: 
    - -isystemC:/msys64/ucrt64/include  # 添加 MSYS2 UCRT 环境的系统头文件路径
  
  # 移除特定的编译器标志(通常用于解决兼容性问题)
  Remove: 
    - -mlongcalls                    # 移除长调用优化(常见于嵌入式开发)
    - -fstrict-volatile-bitfields    # 移除严格易失性位域处理
    - -fno-shrink-wrap               # 移除禁止收缩包装优化
    - -fno-tree-switch-conversion    # 移除禁止开关转换优化

这样你的项目就能定位到标准库的路径了,项目头文件路径需要在项目根目录创建一个compile_commands.json文件,手动包含你项目设置的头文件路径,这个如果是cmake可以直接生成的,可惜keil工程并不能这样,不过我从别的大佬哪里找到了一键生成工具,你只需要放到项目根目录下就可以,自动生成了。

原文链接:vscode使用clangd代替C/C++配置C项目(附keil生成对应的compile_commands.json) – 知秋的个人Blog

生成后重启你的VScode,能够正常索引到你的头文件就配置成功了。clangd插件设置里可以添加一些参数,这个不添加也不影响正常使用。

核心功能参数

  1. --background-index

    • 作用:启用后台索引,在空闲时分析项目代码

    • 效果:提供更快的代码补全和导航,但会增加初始内存使用

  2. --compile-commands-dir=$(workspaceFolder)/ 

    • 作用:指定编译数据库 compile_commands.json的目录

    • $(workspaceFolder):VSCode 变量,指向项目根目录

    • 重要性:这是 clangd 正确理解项目结构的关键配置

    • 这个可能会导致你生成的配置文件不会被正确识别,不建议用。

  3. -j=12

    • 作用:设置并行工作线程数为 12

    • 建议:根据 CPU 核心数调整(通常设为 CPU 核心数)

代码分析增强

  1. --clang-tidy

    • 作用:集成 clang-tidy 静态分析工具

    • 效果:提供代码质量检查、风格建议和潜在错误检测

  2. --all-scopes-completion

    • 作用:启用全作用域代码补全

    • 效果:不仅补全当前作用域的符号,还包括全局和命名空间中的符号

补全体验优化

  1. --completion-style=detailed

    • 作用:显示详细的补全信息

    • 效果:补全时显示函数签名、返回类型、文档注释等

  2. --header-insertion=iwyu

    • 作用:使用 "include-what-you-use" 策略插入头文件

    • 效果:自动插入必要的头文件时,遵循最小化包含原则

性能与缓存

  1. --pch-storage=disk

    • 作用:将预编译头文件(PCH)存储在磁盘

    • 优势:减少内存占用,但可能略微降低加载速度

    • 替代方案memory(更快但占用更多内存)

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/NiceNikeyo/article/details/156157223

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--