web-dev-qa-db-ja.com

Arduinoのヘッダーエラーを与えるVSコード?公式ヘッダーがありませんか?

私は最近Arduinoの開発を始めました。最初はArduino IDEを使用しましたが、すぐには標準に達していないことに気付きました。IDEを時々再起動する必要があるため、開発がかなり遅くなりました。大好きになったArduino拡張機能付きのVS Codeを見つけましたが、いくつか問題があり、解決方法がわかりません。

まず、vsコードは#includeエラーをスローし、IntelliSenseを更新するように要求します。ただし、ビルド/アップロードして完全に正常に動作します。また、上記のincludeで定義されているクラスなども検出するため、何らかの方法で誤検知のように見えます(つまり、パスはincludePath設定に含まれています)。エラーメッセージを読むと、「avr/pgmspace.h」と呼ばれるArduino.hで参照されているヘッダーの検索に問題があることがわかります。これらのエラーが関連しているかどうかはわかりません。 pgmspace.hが見つかりません(Arduino SDKに含まれているはずです)。

最後に、#includeエラーのために、その特定のヘッダーファイルに関連するものは適切に強調表示されず、プレーングレーのテキストであり、少し煩わしくなります。

誰でもこれを修正する方法を知っていますか?私はMacを使っています。

Error messages

6
sebrock

更新:追加のライブラリをインストールする必要はありません。 IntelliSenseは、Arduinoアプリによってインストールされたヘッダーのみを使用して動作できますが、他のいくつかは役立つ場合があります。以下の更なるアップデート。

VSCodeのビルド時には、SDKが使用されます。ただし、IntelliSenseはSDKファイルを読み取って操作することはできません(私の知る限り)。これにより、これらの迷惑なエラーが発生し、ほとんどのコード補完機能が排除されます。

includePathbrowse.pathの両方を構成する必要があります。 includePathは再帰的には含まれません(しかし、その機能は間もなく登場するようです)。 browse.pathは再帰的ですが、ヘッダーファイルの正確な場所をincludePathに含めることは、IntelliSense機能に必要です。 browse.pathは、タグパーサーを使用して、「電球」などのツールを提供します。このツールをクリックすると、includePathの問題の解決に役立ちます。 (ソース: c_cpp_properties.jsonの「includePath」と「browse.path」の違いは何ですか?


マック:

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"
],

ウインドウズ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"${workspaceFolder}/libraries"が含まれていれば、おそらくプロジェクトのincludePathフォルダーに入れることができます。ライブラリの名前空間を適切に設定してください。 libraries/avr/pgmspace.h。この方法はテストしていません。


更新:

  • Home.pathからincludePathに変更されました。詳細はこちら: vscode-cpptools/FAQ
  • vscode-arduinoライブラリによってダウンロードされたツールは、Windows 10では必要ありません。
  • エスケープされた円記号の代わりにスラッシュを使用するようにWindows構成パスを変更しました。

ソースおよびその他のヒント: Visual Studio CodeでArduino Intellisenseを有効にする

5
Joe Sadoski

受け入れられた答えは私にとってはうまくいきませんでした。 c_cpp_properties.jsonファイルが見つからないか、作成できません。また、1つのプロジェクト/ワークスペース/フォルダーだけでなく、グローバルにしたかったのです。

したがって、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

1
Vitox