VS Code 为 Arduino 提供 header 错误?缺官方header?

VS Code giving header errors for Arduino? Missing official header?

我最近开始为 Arduino 开发。最初我使用 Arduino IDE 但我很快意识到它不符合标准。由于不时需要 IDE 重新启动,开发速度相当慢。我发现 VS Code 带有我喜欢的 Arduino 扩展。但是我遇到了一些问题,我不确定如何解决。

首先,vs 代码抛出#include 错误并要求我更新 IntelliSense。然而它 builds/uploads 并且运行得很好,它还找到了 类 等。在所述包含中定义所以它看起来在某种程度上是误报(即路径包含在 includePath 设置中)。阅读错误消息还表明它在查找 Arduino.h 中引用的名为 "avr/pgmspace.h" 的 header 时遇到问题。我不确定这些错误是否相关。 pgmspace.h无处可寻(Arduino SDK中应该有)。

最后,由于 #include 错误,与特定 header 文件相关的任何内容都不会正确突出显示,只是纯灰色文本,这有点烦人。

有人知道如何解决这个问题吗?我在 Mac 顺便说一句。

更新:不需要安装额外的库。 IntelliSense 只能使用 Arduino 应用程序安装的 headers 进行操作,但其他一些可能会有所帮助。更多更新如下。

VSCode 构建时,它使用 SDK。但是,IntelliSense 无法读取 SDK 文件进行操作(据我所知),这会引发这些烦人的错误并消除大多数代码完成功能。

includePathbrowse.path都需要配置。 includePath 不包含递归(但该功能似乎即将推出)。 browse.path 是递归的,但包括 header 文件的确切位置在 includePath 中对于 IntelliSense 功能仍然是必需的。 browse.path 将使用标签解析器提供诸如 "lightbulb" 之类的工具,您可以单击这些工具来帮助解决您的 includePath 问题。 (来源:What is the difference between "includePath" and "browse.path" in c_cpp_properties.json?


Mac:

avr/pgmspace.h 位于:/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include/avr/pgmspace.h。它在库中编码为 avr/pgmspace.h;因此,我们需要包含 avr 所在的路径。

1。 安装homebrew-avr:

2。编辑 c_cpp_properties.json:

"includePath": [
    "${workspaceFolder}/libraries",
    "/System/Library/Frameworks/Kernel.framework/Versions/A/Headers",
    "/Applications/Arduino.app/Contents/Java/libraries",
    "/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include",
    "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/variants/standard"
],
"browse": {
    "limitSymbolsToIncludedHeaders": false,
    "path": [
        "/System/Library/Frameworks/Kernel.framework/Versions/A/Headers",
        "/Applications/Arduino.app/Contents/Java/"
    ]
},
"forcedInclude": [
    "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h"
],

Windows 10:

1。 安装WinAVR

2。编辑 c_cpp_properties.json:

includePath 修改为如下所示:

"includePath": [
    "{$workspaceFolder}/libraries",
    "C:/Program Files (x86)/Arduino/hardware/tools/avr/lib/gcc/avr/5.4.0/include",
    "C:/Program Files (x86)/Arduino/hardware/arduino/avr/cores/arduino",
    "C:/Program Files (x86)/Arduino/hardware/arduino/avr/variants/standard",
    "C:/Program Files (x86)/Arduino",
],

替代方法(可能是个坏主意):

如果您可以获得任何缺少的库的版本,并且您的 includePath 包含 "${workspaceFolder}/libraries",则您可以将其放入项目的 libraries 文件夹中。确保适当地命名您的库,例如libraries/avr/pgmspace.h。我没有测试过这个方法。


更新:

  • 已从 home.path 更改为 includePath。在此处查看更多信息:vscode-cpptools/FAQ
  • vscode-arduino 库下载的工具在 Windows 10 上不是必需的。
  • 更改了 Windows 配置路径以使用正斜杠而不是转义的反斜杠。

来源和更多提示:Enabling Arduino Intellisense with Visual Studio Code

已接受的答案对我不起作用。无法找到也无法创建 c_cpp_properties.json 文件。另外,我希望它是全球性的,而不仅仅是一个 project/workspace/folder.

因此,对于 VSCode 1.14 (2019),我只是导航到 settings.json(全局版本),然后添加此 json 部分:

"C_Cpp.default.includePath": [
    "C:/Program Files (x86)/Arduino/libraries/**",
    "C:/Program Files (x86)/Arduino/hardware/arduino/avr/cores/arduino/**",
    "C:/Program Files (x86)/Arduino/hardware/tools/avr/avr/include/**",
    "C:/Program Files (x86)/Arduino/hardware/tools/avr/lib/gcc/avr/5.4.0/include/**",
    "C:/Program Files (x86)/Arduino/hardware/arduino/avr/variants/standard/**",
    "C:/Users/<YOUR USERNAME>/.platformio/packages/framework-arduinoavr/**",
    "C:/Users/<YOUR USERNAME>/Documents/Arduino/libraries/**",
    "{$workspaceFolder}/libraries/**",
    "{$workspaceFolder}/**"
],
"C_Cpp.intelliSenseEngine": "Tag Parser"

发布了另一个答案,包含整个过程和有关该方法的所有细节:

我使用 VSC 作为代码编辑器,只需要 intellisense。我在 arduino IDE 首选项中设置“使用外部编辑器”,并使用它进行编译和上传。

我的 win 用户名“bunny”和 Sketchbook 位置是“C:\person\Arduino”以了解文件夹。我正在使用最新的 VSC (1.56.2) 和 ArduinoIDE (1.8.13)

我的 settings.json 是这样的,它与所有包含的特殊库(如 esp8266 等)配合得很好:

{
"C_Cpp.intelliSenseEngine": "Tag Parser",
    "C_Cpp.default.browse.path": [
        "c:/Person/Arduino/libraries",
        "c:/Person/Arduino/hardware",
        "c:/Program Files (x86)/Arduino/hardware",
        "c:/Program Files (x86)/Arduino/libraries",
        "c:/Users/Bunny/AppData/Local/Arduino15/packages",
        "${workspaceFolder}"
    ]
}