私は最近Arduinoの開発を始めました。最初はArduino IDEを使用しましたが、すぐには標準に達していないことに気付きました。IDEを時々再起動する必要があるため、開発がかなり遅くなりました。大好きになったArduino拡張機能付きのVS Codeを見つけましたが、いくつか問題があり、解決方法がわかりません。
まず、vsコードは#includeエラーをスローし、IntelliSenseを更新するように要求します。ただし、ビルド/アップロードして完全に正常に動作します。また、上記のincludeで定義されているクラスなども検出するため、何らかの方法で誤検知のように見えます(つまり、パスはincludePath設定に含まれています)。エラーメッセージを読むと、「avr/pgmspace.h」と呼ばれるArduino.hで参照されているヘッダーの検索に問題があることがわかります。これらのエラーが関連しているかどうかはわかりません。 pgmspace.hが見つかりません(Arduino SDKに含まれているはずです)。
最後に、#includeエラーのために、その特定のヘッダーファイルに関連するものは適切に強調表示されず、プレーングレーのテキストであり、少し煩わしくなります。
誰でもこれを修正する方法を知っていますか?私はMacを使っています。
更新:追加のライブラリをインストールする必要はありません。 IntelliSenseは、Arduinoアプリによってインストールされたヘッダーのみを使用して動作できますが、他のいくつかは役立つ場合があります。以下の更なるアップデート。
VSCodeのビルド時には、SDKが使用されます。ただし、IntelliSenseはSDKファイルを読み取って操作することはできません(私の知る限り)。これにより、これらの迷惑なエラーが発生し、ほとんどのコード補完機能が排除されます。
includePath
とbrowse.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
が配置されているパスを含める必要があります。
"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
に"${workspaceFolder}/libraries"
が含まれていれば、おそらくプロジェクトのincludePath
フォルダーに入れることができます。ライブラリの名前空間を適切に設定してください。 libraries/avr/pgmspace.h
。この方法はテストしていません。
更新:
vscode-arduino
ライブラリによってダウンロードされたツールは、Windows 10では必要ありません。ソースおよびその他のヒント: Visual Studio CodeでArduino Intellisenseを有効にする
受け入れられた答えは私にとってはうまくいきませんでした。 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