Как заставить Arduino работать и не давать "не могу открыть исходный файл" avr / pgmspace.h "" на vscode? - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь запрограммировать Arduino в VScode.Проблема в том, что он выдает мне странные ошибки заголовка: cannot open source file "avr/pgmspace.h" (dependency of "C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h")

Это мой arduino.json:

    "board": "arduino:avr:uno"
}

Это мой c_cpp_properties.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
}

Он должен рекурсивно включать все необходимые библиотеки, и даже если он попытается вручную добавить путь к avr/pgmspace.h или его каталогу, он будет выдавать мне те же ошибки.

Как мне решить эту ошибку?

1 Ответ

0 голосов
/ 09 февраля 2019

Значение compilerPath выглядит неправильно, хотя оно используется только в среде IDE, а не для целевой компиляции.Документация гласит:

Абсолютный путь к компилятору, который вы используете для построения своего проекта.Расширение запросит компилятор, чтобы определить системные пути включения и определения по умолчанию для использования с IntelliSense.

В любом случае, я рекомендую настроить его правильно, я смог удалить

"${HOME}/.arduino15/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/../lib/gcc/avr/5.4.0/include",
"${HOME}/.arduino15/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/../lib/gcc/avr/5.4.0/include-fixed",
"${HOME}/.arduino15/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/../lib/gcc/avr/5.4.0/../../../../avr/include"

при настройке

"compilerPath": "${HOME}/.arduino15/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2/bin/avr-g++ -std=gnu++11 -mmcu=atmega328p",

Чтобы выяснить, какой именно компилятор используется, включите подробное ведение журнала в окне вывода:

Файл -> Настройки -> Настройки ->Расширения -> Конфигурация Arduino -> Уровень журнала -> подробный

, который в этом случае также должен помочь вам выяснить, почему компилятор не принимает avr/pgmspace.h.


Вот мои arduino.json

{
    "board": "arduino:avr:uno",
    "port": "/dev/ttyUSB0",
    "sketch": "src/myproject.ino",
    "output": "../build"
}

и c_cpp_properties.json

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

(определение UBRRH для переменной Serial в HardwareSerial.h)

...