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 文件进行操作(据我所知),这会引发这些烦人的错误并消除大多数代码完成功能。
includePath
和browse.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}"
]
}
我最近开始为 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 文件进行操作(据我所知),这会引发这些烦人的错误并消除大多数代码完成功能。
includePath
和browse.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/FAQvscode-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}"
]
}