6
votes

Comment faire fonctionner Arduino et ne pas donner "ne peut pas ouvrir le fichier source" avr / pgmspace.h "" sur vscode?

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?


0 commentaires

3 Réponses :


3
votes

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"
}


1 commentaires

J'utilise Windows, il m'est donc très difficile d'utiliser tous les chemins Linux que vous avez.



5
votes

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


1 commentaires

Cela a résolu TOUTES les erreurs que j'avais. +1 à vous monsieur



3
votes

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 était l'ajout du chemin 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 >.


0 commentaires