web-dev-qa-db-fra.com

VS Code donnant des erreurs d'en-tête pour Arduino? En-tête officiel manquant?

J'ai récemment commencé à développer pour Arduino. Au départ, j'ai utilisé l'Arduino IDE mais j'ai vite réalisé qu'il n'était pas à la hauteur. Le développement était considérablement plus lent avec la nécessité de IDE redémarre de temps en temps). J'ai trouvé VS Code avec l'extension Arduino que j'ai appris à aimer, mais j'ai quelques problèmes et je ne sais pas comment le résoudre.

Tout d'abord, le code vs génère des erreurs #include et me demande de mettre à jour IntelliSense. Cependant, il construit/télécharge et fonctionne parfaitement bien, il trouve également les classes, etc. définies dans lesdites inclusions, il semble donc que ce soit un faux positif d'une certaine manière (c'est-à-dire que le chemin est inclus dans les paramètres includePath). La lecture du message d'erreur montre également qu'il a des problèmes pour trouver un en-tête référencé dans Arduino.h appelé "avr/pgmspace.h". Je ne sais pas si ces erreurs sont liées. pgmspace.h est introuvable (il aurait dû être inclus dans le SDK Arduino).

Enfin, en raison de l'erreur #include, tout ce qui est lié à ce fichier d'en-tête particulier ne sera pas mis en surbrillance correctement et est juste du texte gris clair qui est un peu ennuyeux.

Quelqu'un sait comment résoudre ce problème? Je suis sur un Mac btw.

Error messages

6
sebrock

Mise à jour : les bibliothèques supplémentaires n'ont pas besoin d'être installées. IntelliSense peut fonctionner en utilisant uniquement les en-têtes installés par l'application Arduino, mais quelques autres peuvent vous aider. Plus de mises à jour ci-dessous.

Lors de la génération de VSCode, il utilise le SDK. Cependant, IntelliSense ne peut pas lire les fichiers SDK pour fonctionner (pour autant que je sache), ce qui jette ces erreurs ennuyeuses et élimine la plupart des capacités de complétion de code.

includePath et browse.path doit être configuré. includePath n'inclut pas récursivement (mais cette fonctionnalité semble arriver bientôt). browse.path est récursif, mais l'inclusion de l'emplacement exact des fichiers d'en-tête est dans includePath est toujours nécessaire pour les fonctionnalités IntelliSense. browse.path utilisera le Tag Parser pour fournir des outils tels que "l'ampoule" sur laquelle vous pouvez cliquer pour résoudre votre problème includePath. (Source: Quelle est la différence entre "includePath" et "Browse.path" dans c_cpp_properties.json? )


Mac:

avr/pgmspace.h est situé à: /Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include/avr/pgmspace.h. Il est codé dans les bibliothèques comme avr/pgmspace.h; pour cette raison, nous devons inclure le chemin dans lequel avrest situé.

1. Installer homebrew-avr :

2. Modifiez 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. Installer WinAVR

2. Modifiez c_cpp_properties.json:

Révisez includePath pour ressembler à ceci:

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

Méthode alternative (probablement une mauvaise idée):

Si vous pouvez obtenir une version d'une bibliothèque manquante, vous pouvez probablement l'installer dans votre dossier libraries de votre projet si votre includePath inclut "${workspaceFolder}/libraries". Assurez-vous d'espacer correctement vos bibliothèques, par exemple libraries/avr/pgmspace.h. Je n'ai pas testé cette méthode.


Mises à jour:

  • Modifié de home.path pour inclurePath. Voir plus ici: vscode-cpptools/FAQ
  • Les outils téléchargés par le vscode-arduino les bibliothèques ne sont pas nécessaires sous Windows 10.
  • Changement des chemins de configuration Windows pour utiliser des barres obliques au lieu des barres obliques inversées.

Source et autres conseils: Activation d'Arduino Intellisense avec Visual Studio Code

5
Joe Sadoski

La réponse acceptée n'a pas fonctionné pour moi. Impossible de trouver ou de créer le fichier c_cpp_properties.json. Aussi, je voulais que ce soit global, et pas seulement sur un projet/espace de travail/dossier.

Donc, pour VSCode 1.14 (2019), je viens de naviguer jusqu'à settings.json (le global), et j'ajoute cette section 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"

Publié une autre réponse avec la procédure entière et tous les détails sur l'approche: Visual Studio Code includePath

1
Vitox