登录发现更多内容
首页
分类
发帖
账号
自动登录
找回密码
密码
登录
立即注册
立即登录
立即注册
其他登录
QQ
微信
首页
Portal
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
产品教程
BBS
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
开发资料
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
样品购买
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
IoT云平台
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
GitHub
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
技术博客
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
搜索
搜索
热搜:
LoRa
ESP8266
安信可
本版
帖子
用户
请
登录
后使用快捷导航
没有账号?
立即注册
每日签到
任务
广播
导读
排行榜
设置
我的收藏
退出
3
0
0
首页
技术杂谈
›
记一次在AiPi-Open-Kits项目中使用Clangd进行代码补全和 ...
返回列表
记一次在AiPi-Open-Kits项目中使用Clangd进行代码补全和阅读时出现的问题
[ 复制链接 ]
发布帖子
SmileYik
高级会员
3
主题
32
回帖
635
积分
高级会员
高级会员, 积分 635, 距离下一级还需 365 积分
高级会员, 积分 635, 距离下一级还需 365 积分
积分
635
私信
3人留言
楼主
技术杂谈
1207
3
2023-11-21 00:33:28
[i=s] 本帖最后由 SmileYik 于 2023-11-24 18:35 编辑 [/i]
> 本帖最后由 SmileYik 于 2023-11-21 00:38 编辑 ### 记一次在AiPi-Open-Kits项目中使用Clangd进行代码补全和阅读时出现的问题 #### 前言 不知道大家会不会注意到一件事情,就是自己用vscode或者其他编辑工具,如atom、kate等打开项目会出现头文件不存在或者是不能正确显示建议和自动补全,还有时候会出现各种莫名其妙的语法提示错误,这有可能是Clangd出了问题。(不知道你们会不会反正我是遇到了) 编译能过去但是编辑器内显示的情况:  #### 解决方案 ##### 方案1 如果你不使用CMake管理项目,或者不使用bear等工具其他生成 `compile_commands.json`文件的方式,解决方法很简单,在项目文件夹里创建一个 `.clangd`文件,在这文件里写入如下内容后保存,重启LSP服务器即可(记住将 `/path/to/`改为电脑上实际状况下的地址)。在VSCode中重启LSP的方法可以是按下 `CTRL+SHIFT+P`,在弹出输入框中输入 `clangd restart`后找到重启字样的选中按下回车即可。 ``` CompileFlags: Add: - "-I/path/to/aithinker/Project_basic/components/wifi" - "-I/path/to/aithinker/Project_basic/config" - "-I/path/to/aithinker/Project_basic/main" - "-I/path/to/git/aithinker_Ai-M6X_SDK/bsp/board/bl616dk/." - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/crypto/mbedtls/." - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/crypto/mbedtls/mbedtls/include" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/crypto/mbedtls/port" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/crypto/mbedtls/port/platform" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/libc/." - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/libc/newlib/." - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/mm/." - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/mm/tlsf/." - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/net/lwip/lwip/src/include" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/net/lwip/lwip/src/include/compat/posix" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/net/lwip/lwip/src/include/lwip/apps" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/net/lwip/lwip/system" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/net/lwip/lwip_apps/dhcpd/." - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/os/freertos/include" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/os/freertos/portable/GCC/RISC-V/common" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/os/freertos/portable/GCC/RISC-V/common/chip_specific_extensions/RV32I_CLINT_no_extensions" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/os/freertos/posix/include" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/utils/bflb_block_pool" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/utils/bflb_timestamp" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/utils/getopt" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/utils/log" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/utils/log/bflog" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/utils/ring_buffer" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/wireless/wifi6/bl6_os_adapter/include" - "-I/path/to/git/aithinker_Ai-M6X_SDK/components/wireless/wifi6/inc" - "-I/path/to/git/aithinker_Ai-M6X_SDK/drivers/lhal/config/bl616" - "-I/path/to/git/aithinker_Ai-M6X_SDK/drivers/lhal/include" - "-I/path/to/git/aithinker_Ai-M6X_SDK/drivers/lhal/include/arch" - "-I/path/to/git/aithinker_Ai-M6X_SDK/drivers/lhal/include/arch/risc-v/t-head" - "-I/path/to/git/aithinker_Ai-M6X_SDK/drivers/lhal/include/arch/risc-v/t-head/Core/Include" - "-I/path/to/git/aithinker_Ai-M6X_SDK/drivers/lhal/src/flash" - "-I/path/to/git/aithinker_Ai-M6X_SDK/drivers/rfparam/Inc" - "-I/path/to/git/aithinker_Ai-M6X_SDK/drivers/soc/bl616/rf/inc" - "-I/path/to/git/aithinker_Ai-M6X_SDK/drivers/soc/bl616/std/include" - "-I/path/to/git/aithinker_Ai-M6X_SDK/drivers/soc/bl616/std/include/hardware" - "-I/path/to/git/aithinker_Ai-M6X_SDK/toolchain/bin/../riscv64-unknown-elf/include" ``` 以上内容可能会头文件有覆盖不够全面的问题,可以自己按需寻找其他头文件目录加入以上配置文件即可(记得重启LSP服务器)。效果如下,基本上能正常使用语法提示和补全,不存在完全用不了的问题:  ##### 方案2 上一个方案是不依靠 `compile_commands.json`文件,而这个方案则是依靠此文件,同时此方案应该能完整解决莫名其妙报错问题。(电脑因人而异,我自己用起来目前没异常情况) 在拥有 `compile_commands.json`且无 `.clangd`文件情况下,仅简单语法提示,但是不能显示函数功能等,具体如图:  同时当鼠标悬浮到某一单词文本上,LSP服务器就会报错,具体也如下:  此时查阅issue得到相同问题(具体为[# clangd invalid AST **#1582**]([https://github.com/clangd/clangd/issues/1582](https://github.com/clangd/clangd/issues/1582))) 解决方案为在项目根目录创建一个 `.clangd`(或Clangd的全局配置文件内),在其中加入如下内容: ``` CompileFlags: Remove: - '-march=*' - '-fstrict-volatile-bitfields' ``` **注意**:之所以要移除 `-fstrict-volatile-bitfields`是因为对于clangd来说 `-fstrict-volatile-bitfields`参数是不合法的,而之所以要移除 `-march=*`是因为编译时候指定的架构名字,也就是报错里第二行那一大串是作为 `march`参数不合法,故移除 此时重启LSP服务器,可以看见上图中的两个错误消失了,但是鼠标悬浮到代码上还是会出现LSP的 `Request textDocument/hover failed.`错误。 这时候我本来也打算用方案一了,因为我找不到具体报错原因了。直到我用Kate打开项目,重启LSP服务器后,提示如下错误信息:  这下有头绪了,去 `compile_commands.json`文件里搜 `e907`(因为报错提示 `e907`这个参数非法)得到了一个参数是 `-mtune=e907`,将这个参数加入到 `.clangd`文件中,这下文件内容为: ``` CompileFlags: Remove: - '-march=*' - '-fstrict-volatile-bitfields' - '-mtune=*' ``` **注意**:之所以是把 `-mtune=e907` 改为 `-mtune=*` 是因为 `*` 是作为通配符存在,不过使用前者也是没问题的 之后在Kate中重启LSP服务器后,情况依旧如上,但是是换了一个报错:  重复上面方法,去搜 `ilp32f`,得到 `-mabi=ilp32f`,加入 `.clangd` ``` CompileFlags: Remove: - '-march=*' - '-fstrict-volatile-bitfields' - '-mtune=*' - '-mabi=*' ``` 然后重启LSP服务器,功能正常,至此解决。 Kate中正常情况:  VSCode中正常情况: 
点赞
0
收藏
0
淘帖
0
────
0
人觉得很赞
────
回复
使用道具
举报
3 回复
电梯直达
正序浏览
倒序浏览
正序浏览
沙发
496199544
回复
使用道具
举报
2023-11-21 15:26:29
回复
评论
使用道具
举报
板凳
WT_0213
回复
使用道具
举报
2023-11-21 15:28:45
回复
评论
使用道具
举报
地板
心云
回复
使用道具
举报
2024-1-1 11:49:25
👍
回复
评论
使用道具
举报
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
立即登录
手机登录
点评
高级模式
本版积分规则
回帖并转播
回帖后跳转到最后一页
返回
今日推荐
腾讯WorkBuddy 编程测试
Codex的单片机写代码测试结果
记录下 ai编程cursor
BU04 INIT FAILED
Ai-M61-32S-Kit学习与使用
BW16二次开发烧录失败
MDK5.40编译PB-03 SDK
关于蓝牙TB-03F的低功耗和TB系列的定频测试
求助——AiPi-PalChatV1通过UART-MCP控制梁山派(GD32)LED失败
星闪怎么下架了
热帖排行
腾讯WorkBuddy 编程测试
Codex的单片机写代码测试结果
记录下 ai编程cursor
Ai-M62-M10L的学习与使用
[AI-WV02-32S] 能否接入SD card?
BU04 INIT FAILED
PB-03连接不上PhyPlusKit的问题, 请各位大神帮忙看看怎么解决
Ai-M61-32S-Kit学习与使用
统计信息
会员数: 30858 个
话题数: 44826 篇
首页
分类
我的