我最近开始为Arduino开发。最初,我使用Arduino IDE,但很快就意识到它没有达到标准。由于不时需要重新启动IDE,因此开发速度大大降低。我找到了我喜欢的Arduino扩展与VS Code。但是我有一些问题,我不确定如何解决。
首先,vs代码引发#include错误,并要求我更新IntelliSense。但是它可以构建/上传并完美运行,还可以找到在include中定义的类等,因此在某种程度上看起来是假肯定的(即路径包括在includePath设置中)。读取错误消息还表明,查找在Arduino.h中引用的名为“ avr / pgmspace.h”的标头存在问题。我不确定这些错误是否相关。找不到pgmspace.h(它应该已经包含在Arduino SDK中)。
最后,由于#include错误,与该特定头文件有关的所有内容都不会正确突出显示,而只是纯灰色的文本,这有点令人讨厌。
有人知道如何解决此问题吗?我正在Mac Mac上。
答案 0 :(得分:3)
更新:不需要安装其他库。 IntelliSense只能使用Arduino应用程序安装的标头进行操作,但其他一些方法可能会有所帮助。下面有更多更新。
在构建VSCode时,它将使用SDK。但是,据我所知,IntelliSense无法读取SDK文件进行操作,这会引发这些烦人的错误并消除大多数代码完成功能。
includePath
和browse.path
都需要配置。 includePath
不包含递归功能(但该功能似乎即将推出)。 browse.path
是递归的,但是对于IntelliSense功能,仍需要在includePath
中包含头文件的确切位置。 browse.path
将使用标记解析器来提供诸如“灯泡”之类的工具,您可以单击这些工具来帮助解决includePath
问题。 (来源:What is the difference between "includePath" and "browse.path" in c_cpp_properties.json?)
avr/pgmspace.h
位于:/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include/avr/pgmspace.h
。它被编码为avr/pgmspace.h
到库中;因此,我们需要包含avr
所在的路径。
"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"
],
修改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
。我尚未测试此方法。
更新:
vscode-arduino
库下载的工具。来源和其他提示: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}"
]
}