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 >.