J'essaye de programmer arduino en vscode. Le problème est que cela me donne des erreurs d'en-tête étranges:
ne peut pas ouvrir le fichier source "avr / pgmspace.h" (dépendance de "C: \ Program Files (x86) \ Arduino \ hardware \ arduino \ avr \ cores \ arduino \ Arduino.h")
Voici mon arduino.json:
{ "configurations": [ { "name": "Win32", "includePath": [ "C:\\Program Files (x86)\\Arduino\\tools\\**", "C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\**" ], "forcedInclude": [ "C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino\\Arduino.h" ], "intelliSenseMode": "msvc-x64", "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe", "cStandard": "c11", "cppStandard": "c++17" } ], "version": 4 }
Voici mon c_cpp_properties.json
:
"board": "arduino:avr:uno" }
Il devrait inclure de manière récursive toutes les bibliothèques requises, et même si j'essaye immédiatement d'ajouter le chemin vers avr / pgmspace.h
ou son répertoire, il continue de me donner les mêmes erreurs.
Comment résoudre cette erreur?
3 Réponses :
La valeur compilerPath
semble incorrecte, bien qu'elle ne soit utilisée que par l'EDI et non pour la compilation cible. La documentation dit:
Le chemin absolu vers le compilateur que vous utilisez pour construire votre projet. L'extension interrogera le compilateur pour déterminer les chemins d'inclusion du système et les définitions par défaut à utiliser pour IntelliSense.
En tout cas je recommande de le configurer correctement, j'ai pu supprimer
{ "env": { "arduino.path": "${HOME}/.arduino15/packages/arduino", "arduino.avr.include.path": "${env:arduino.path}/hardware/avr/1.6.23", "arduino.avr.compiler.path": "${env:arduino.path}/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/avr-g++", "arduino.libraries.path": "${HOME}/arduino/sketchbook/libraries", "dummy-last-line": "To allow the second to last line (e.g. the real last line) to always end with a comma" }, "configurations": [ { "name": "Linux", "includePath": [ "./src", "./test", "../arduino_ci/cpp/unittest", "${env:arduino.libraries.path}/SmartLCD", "${env:arduino.libraries.path}/Chronos/src", "${env:arduino.libraries.path}/Time", "${env:arduino.libraries.path}/RTClib", "${env:arduino.avr.include.path}/libraries/Wire/src", "${env:arduino.avr.include.path}/cores/arduino", "${env:arduino.avr.include.path}/variants/standard" ], "browse": { "path": [ "${workspaceFolder}/src" ], "limitSymbolsToIncludedHeaders": true }, "defines": [ "UBRRH" ], "intelliSenseMode": "gcc-x64", "compilerPath": "${env:arduino.avr.compiler.path} -std=gnu++11 -mmcu=atmega328p", "cStandard": "c11", "cppStandard": "c++11" } ], "version": 4 }
lors du paramétrage
{ "board": "arduino:avr:uno", "port": "/dev/ttyUSB0", "sketch": "src/myproject.ino", "output": "../build" }
J'utilise Windows, il m'est donc très difficile d'utiliser tous les chemins Linux que vous avez.
D'après les réponses à ce problème , j'ai ajouté " c: \\ Program Files (x86) \\ Arduino \\ hardware \\ tools \\ avr \\ avr \\ ** "
vers mon chemin d’inclusion dans c_cpp_properties.json
: < pré> XXX
Cela a résolu TOUTES les erreurs que j'avais. +1 à vous monsieur
Pour tous ceux qui trébuchent ici sur un Mac, voici la config qui fonctionne pour moi avec l'Uno:
{ "env": { "arduino_path": "/Applications/Arduino.app/Contents/Java", "arduino_avr_include_path": "${env:arduino_path}/hardware/arduino/avr", "arduino_avr_include2_path": "${env:arduino_path}/hardware/tools/avr/avr/include", "arduino_avr_compiler_path": "${env:arduino_path}/hardware/tools/avr/bin/avr-g++" }, "configurations": [ { "name": "Mac", "defines": [ "ARDUINO=10810", "__AVR_ATmega328P__", "UBRRH" ], "includePath": [ "${workspaceRoot}", "${env:arduino_avr_include_path}/**", "${env:arduino_avr_include2_path}/**" ], "forcedInclude": [ "/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h" ], "intelliSenseMode": "gcc-x64", "cStandard": "c11", "cppStandard": "c++11", "compilerPath": "${env:arduino_compiler_path} -std=gnu++11 -mmcu=atmega328p" } ], "version": 4 }
La clé pour trouver
hardware / tools / avr / avr / include
.
La définition de ARDUINO = 10810
a été identifiée à partir de la sortie de l'exécution Arduino: Vérifiez
avec l'indicateur détaillé.
La définition de __AVR_ATmega328P__
a été ajoutée pour permettre à IntelliSense de compléter correctement les macros de registre brutes (par exemple, _BV ( )
, OCR0A
, TIMSK0
, etc.); la macro correcte à définir a été identifiée sur la base de la puce étant un ATMEGA328P-PU
et par l'inspection du fichier hardware / tools / avr / avr / include / avr / io.h code >.