当前位置: 首页 > article >正文

解决vscode打开一个单片机工程文件(IAR/keil MDK)因无法找到头文件导致的结构体成员不自动补全问题。

最近一直在用vscode安装c/c++插件后编辑STM32标准库(keil MDK)项目源文件,因为我感觉vscode在代码编辑方面比keil MDK本身优秀太多。发现打开工程后,结构体变量的成员在输入“.”后不自己弹出的问题,后来查找各方资料,发现是因为有好多头文件vscode自身无法找到。现在对整个过程做一下总结。

第0步:问题现象

第一步:检查C/C++ 插件配置正确(自动补全选择默认)

第二步:鼠标右键打开工程文件

第三步:右键编辑区---》选择“命令面板”---》C/C++配置(UI)

这个时候会自动生成一个“.vscode”的文件夹,并且自动生成一个“c_cpp_properties.json”的配置文件。

第四步:修改“c_cpp_properties.json”内容:

最后一个include是解决“stdlib.h”等环境头文件无法找到问题,需要根据自己安装路径添加。

最后添加宏定义,这里我是根据另外一篇博客添加的

如何解决VS Code打开Keil项目源码文件时显示红色波浪线的问题?-CSDN博客

"STM32F10X_MD",
"USE_STDPERIPH_DRIVER",
"__CC_ARM",
"__arm__",
"__align(x)=",
"__ALIGNOF__(x)=",
"__alignof__(x)=",
"__asm(x)=",
"__forceinline=",
"__restrict=",
"__global_reg(n)=",
"__inline=",
"__int64=long long",
"__INTADDR__(expr)=0","__irq=",
"__packed=",
"__pure=",
"__smc(n)=",
"__svc(n)=",
"__svc_indirect(n)=",
"__svc_indirect_r7(n)=",
"__value_in_regs=",
"__weak=",
"__writeonly=",
"__declspec(x)=",
"__attribute__(x)=",
"__nonnull__(x)=",
"__register=",
"__breakpoint(x)=",
"__cdp(x,y,z)=",
"__clrex()=",
"__clz(x)=0U",
"__current_pc()=0U",
"__current_sp()=0U",
"__disable_fiq()=",
"__disable_irq()=",
"__dmb(x)=",
"__dsb(x)=",
"__enable_fiq()=",
"__enable_irq()=",
"__fabs(x)=0.0",
"__fabsf(x)=0.0f",
"__force_loads()=",
"__force_stores()=",
"__isb(x)=",
"__ldrex(x)=0U",
"__ldrexd(x)=0U",
"__ldrt(x)=0U",
"__memory_changed()=",
"__nop()=",
"__pld(...)=",
"__pli(...)=",
"__qadd(x,y)=0",
"__qdbl(x)=0",
"__qsub(x,y)=0",
"__rbit(x)=0U",
"__rev(x)=0U",
"__return_address()=0U",
"__ror(x,y)=0U",
"__schedule_barrier()=",
"__semihost(x,y)=0",
"__sev()=",
"__sqrt(x)=0.0",
"__sqrtf(x)=0.0f",
"__ssat(x,y)=0",
"__strex(x,y)=0U",
"__strexd(x,y)=0",
"__strt(x,y)=",
"__swp(x,y)=0U",
"__usat(x,y)=0U",
"__wfe()=",
"__wfi()=",
"__yield()=",
"__vfp_status(x,y)=0"

需要注意的是:第一个第二个宏定义需要与keil MDK或这IAR中设置保持一致。下图是我用的标准库以及使用了stm32f103c8t6单片机。所以需要定义宏“STM32F10X_MD”,"USE_STDPERIPH_DRIVER"。

最终版的c_cpp_properities.json文件如下:

{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**","D:\\Program Files (x86)\\MDK\\ARM\\ARMCC\\include"],"defines": ["STM32F10X_MD","USE_STDPERIPH_DRIVER","__CC_ARM","__arm__","__align(x)=","__ALIGNOF__(x)=","__alignof__(x)=","__asm(x)=","__forceinline=","__restrict=","__global_reg(n)=","__inline=","__int64=long long","__INTADDR__(expr)=0","__irq=","__packed=","__pure=","__smc(n)=","__svc(n)=","__svc_indirect(n)=","__svc_indirect_r7(n)=","__value_in_regs=","__weak=","__writeonly=","__declspec(x)=","__attribute__(x)=","__nonnull__(x)=","__register=","__breakpoint(x)=","__cdp(x,y,z)=","__clrex()=","__clz(x)=0U","__current_pc()=0U","__current_sp()=0U","__disable_fiq()=","__disable_irq()=","__dmb(x)=","__dsb(x)=","__enable_fiq()=","__enable_irq()=","__fabs(x)=0.0","__fabsf(x)=0.0f","__force_loads()=","__force_stores()=","__isb(x)=","__ldrex(x)=0U","__ldrexd(x)=0U","__ldrt(x)=0U","__memory_changed()=","__nop()=","__pld(...)=","__pli(...)=","__qadd(x,y)=0","__qdbl(x)=0","__qsub(x,y)=0","__rbit(x)=0U","__rev(x)=0U","__return_address()=0U","__ror(x,y)=0U","__schedule_barrier()=","__semihost(x,y)=0","__sev()=","__sqrt(x)=0.0","__sqrtf(x)=0.0f","__ssat(x,y)=0","__strex(x,y)=0U","__strexd(x,y)=0","__strt(x,y)=","__swp(x,y)=0U","__usat(x,y)=0U","__wfe()=","__wfi()=","__yield()=","__vfp_status(x,y)=0"]}],"version": 4
}

最终效果:

最后总结:其实结构体成员无法自动补全,无法打开头文件对应的是同一个问题就是vscode自身无法找到头文件的原因。通过自己创建c_cpp_properities.json可以完美解决此类问题。

补充:使用vscode打开IAR工程也是相同的做法:添加c_cpp_properties.json文件,内容基本一致。

http://www.lryc.cn/news/2398520.html

相关文章:

  • Python 在金融中的应用- Part 1
  • 【Node.js 深度解析】npm install 遭遇:npm ERR! code CERT_HAS_EXPIRED 错误的终极解决方案
  • Vue内置组件Teleport和Suspense
  • Java网络编程实战:TCP/UDP Socket通信详解与高并发服务器设计
  • vue+threeJs 绘制3D圆形
  • Silky-CTF: 0x02靶场
  • Kafka 的优势是什么?
  • 基于FPGA + JESD204B协议+高速ADC数据采集系统设计
  • 微服务中引入公共拦截器
  • Ubuntu20.04 LTS 升级Ubuntu22.04LTS 依赖错误 系统崩溃重装 Ubuntu22.04 LTS
  • C++11:unique_ptr的基本用法、使用场景和最佳使用指南
  • 测量3D翼片的距离与角度
  • 零基础学习计算机网络编程----socket实现UDP协议
  • 谷歌地图2022高清卫星地图手机版v10.38.2 安卓版 - 前端工具导航
  • RAG的ETL Pipeline源码解读
  • 杭州白塔岭画室怎么样?和燕壹画室哪个好?
  • Linux文件系统:从VFS到Ext4的奇幻之旅
  • 5月底 端午节
  • 为何选择Spring框架学习设计模式与编码技巧?
  • 软件评测师 综合测试 真题笔记
  • 晶台光耦在手机PD快充上的应用
  • JS对数据类型的检测
  • llama.cpp:纯 C/C++ 实现的大语言模型推理引擎详解一
  • 【亲测有效 | Cursor Pro每月500次快速请求扩5倍】(Windows版)Cursor中集成interactive-feedback-mcp
  • BaseTypeHandler用法-笔记
  • 鸿蒙OSUniApp集成WebGL:打造跨平台3D视觉盛宴#三方框架 #Uniapp
  • 华为盘古 Ultra MoE 模型:国产 AI 的技术突破与行业影响
  • Payload CMS:开发者优先的Next.js原生开源解决方案,重新定义无头内容管理
  • CRM管理软件的数据可视化功能使用技巧:让数据驱动决策
  • linux批量创建文件