VS Code给出Arduino的标题错误?缺少官方标题?

时间:2018-09-08 10:35:45

标签: arduino visual-studio-code arduino-uno

我最近开始为Arduino开发。最初,我使用Arduino IDE,但很快就意识到它没有达到标准。由于不时需要重新启动IDE,因此开发速度大大降低。我找到了我喜欢的Arduino扩展与VS Code。但是我有一些问题,我不确定如何解决。

首先,vs代码引发#include错误,并要求我更新IntelliSense。但是它可以构建/上传并完美运行,还可以找到在include中定义的类等,因此在某种程度上看起来是假肯定的(即路径包括在includePath设置中)。读取错误消息还表明,查找在Arduino.h中引用的名为“ avr / pgmspace.h”的标头存在问题。我不确定这些错误是否相关。找不到pgmspace.h(它应该已经包含在Arduino SDK中)。

最后,由于#include错误,与该特定头文件有关的所有内容都不会正确突出显示,而只是纯灰色的文本,这有点令人讨厌。

有人知道如何解决此问题吗?我正在Mac Mac上。

Error messages

3 个答案:

答案 0 :(得分:3)

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

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

includePathbrowse.path都需要配置。 includePath不包含递归功能(但该功能似乎即将推出)。 browse.path是递归的,但是对于IntelliSense功能,仍需要在includePath中包含头文件的确切位置。 browse.path将使用标记解析器来提供诸如“灯泡”之类的工具,您可以单击这些工具来帮助解决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",
],

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

如果可以获得任何缺少的库的版本,则可能在libraries包含includePath的情况下放入项目的"${workspaceFolder}/libraries"文件夹中。确保适当地命名您的库的名称空间,例如libraries/avr/pgmspace.h。我尚未测试此方法。


更新:

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

来源和其他提示:Enabling Arduino Intellisense with Visual Studio Code

答案 1 :(得分:0)

接受的答案对我不起作用。找不到或创建c_cpp_properties.json文件。另外,我希望它具有全球性,而不仅限于一个项目/工作区/文件夹。

因此,对于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"

发布了有关整个过程以及有关该方法的所有详细信息的另一个答案:Visual Studio Code includePath

答案 2 :(得分:0)

我使用 VSC 作为代码编辑器,并且只需要智能感知。我在 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}"
    ]
}