Найти в Дзене
K12 :: О ESP32 и не только

Настройка PlatformIO или "работа над ошибками"

Оглавление

Доброго дня, уважаемый читатель! Сегодня поговорим о часто встречающихся проблемах (особенно у новичков), и методах борьбы с ними. Вы поставили крутой и мощный VS Code, сверху накатили PlatformIO, заполировали всё это C/C++ IntelliSense, и уже приготовились писать крутой и красивый код! Ага, щаз....

Получите и распишитесь - вагон и маленькая тележка проблем и ошибок. А Вы что думали, в сказку попали? Visual Studio Code — это мощный современный редактор исходного кода, который работает на компьютере и доступен для Windows, macOS и Linux. Универсальность предполагает кучу настроек и опций. PlatformIO тоже не лыком шит - он предназначен для работы с великим множеством микроконтроллеров и систем, а это тоже отнюдь не упрощает работу с ним.

Ох, сколько я дров наломал и шишек (виртуальных) себе наставил в свое время - мама не горюй. Конечно, сейчас все это кажется таким простым, понятным и логичным, но тогда мне было не всё столь очевидно. Вот и решил поделиться своими граблями с вами, быть может пригодится кому-то, их обойти. Итак, поехали...

Где найти PlatformIO?

Пиктограмму "PlatformIO: Home", а так же все остальные команды PlatformIO вы можете найти на нижней панели VS Code:

В момент запуска VSCode её там не будет, она появится только спустя некоторое время, после того, как PlatformIO полностью загрузится. Не спешите - PlatformIO тот еще тормоз.

Ошибка: "pio" не является внутренней или внешней командой, исполняемой программой или пакетным файлом

При попытке выполнить команду pio в командной строке или в терминале получаем ошибку: "pio" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом:

-2

или в терминале:

-3

Это просто означает, что Windows "ничего не знает" об этой команде. Как это устранить было подробно описано в одной из предыдущих статей:

Установка PlatformIO
K12 :: О ESP32 и не только19 сентября 2022

Ошибка: сommand 'platformio-ide.build' not found

Такое часто происходит при открытии VSCode или при смене проекта. Вы нажимаете кнопку "PlatformIO: Build" или любую другую команду PlatformIO, но вместо ожидаемого действия получаете сообщение об ошибке:

-4

В этом случае обратите внимание на строку статуса: там сейчас либо "PlatformIO: Loading tasks", либо "Rebuild IntelliSense index"... Придется опять подождать, пока он прогрузит все свои команды, и довольно долго (ну я же уже сказал, что PlatformIO - тормоз). Когда вы только что открываете VS Code, то подождать конечно можно. Но вот при переключении между проектами это ужасно бесит (особенно когда нужно быстро-быстро перекомпилировать полтора десятка проектов из-за внесенных изменений в общие библиотеки). Это время можно немного сократить, отключив пересоздание индексов IntelliSense в настройках VSCode - как это сделать, будет рассказано чуть ниже.

Кардинально решить проблему перекомпиляции множества проектов можно с помощью командной строки, без использования VS Code как такового. "Тормозит", оказывается, только PlatformIO IDE, само ядро работает очень быстро. Всё делается довольно просто и удобно - необходимо только один раз написать простой батник. Как это делать - расскажу в следующей статье.

Ошибка: Couldn’t find target config

При попытке сборки проекта командами “PlatformIO:Build” или “PlatformIO:Upload” выдается ошибка “Error: Couldn’t find target config” и компиляция останавливается.

Решение: нужно очистить проект командой “PlatformIO:Clear” и повторить попытку. Да это долго (будут заново перекомпилироваться все библиотеки ESP-IDF), но другого выхода нет. Как вариант, можно закрыть VSCode и удалить папку .pio в каталоге проекта.

Где найти bin-файл для загрузки в устройство?

Где найти бинарный скомпилированный файл, чтобы загрузить его в устройство или на сайт для ОТА? Ищите его в каталоге .pio проекта:

-5

Совет: и ELF-файл вам пригодится - для расшифровки адресов ошибок и исключений.

У меня этот файл создается автоматически по команде "PlatformIO: Build". Но если файла BIN после компиляции проекта в указанной выше папке так и нет, попробуйте выполнить команду "PlatformIO: Build Filesystem Image". Найти её можно здесь:

-6

Настройка IntelliSense

Ваш проект успешно компилируется и работает, но при этом VS Code постоянно говорит вам, что в вашем коде 100500 ошибок. При этом ошибками помечены почти все #include, даже ESP-IDF, примерно как на рисунке ниже:

-7

Причина в том, что IntelliSense по умолчанию ничего не знает ни о ваших файлах, ни о ESP-IDF как таковой (так как он не является частью ESP-IDF, а отдельно сбоку-припеку, свой-собственный плагин). Нужно ему помочь.

Можно конечно, поступить так, как советует сам VSCode, добавить предлагаемый им путь в IncludePath (нажмите на "лампочку", чтобы увидеть команды). Но мы замучаемся добавлять все файлы по отдельности, давайте поступим "по правильному" - укажем ему путь сразу ко всем библиотекам.

Закрываем VSCode и ищем файл \.vscode\c_cpp_properties.json. Скорее всего он будет выглядеть примерно так:

-8

Добавим в него следующие строки в раздел "includePath":

-9

Примечание: вторая строчка указывает на мои локальные библиотеки. Если вы используете другое расположение - измените её или удалите совсем.

Звездочки ( ** ) в конце каждого пути указывают на то, что нужно просматривать не только указанную папку, но и все вложенные - это очень сокращает запись, не нужно добавлять в список папки для каждой библиотеки отдельно.

Переменная ${env:USERPROFILE} указывает на то, что указанная далее папка или файл расположены в вашем профиле. Это гораздо удобнее, чем каждый раз прописывать конкретный профиль пользователя.

Готовый файл для примера вы можете взять здесь:

dzen/c_cpp_properties.json at master · kotyara12/dzen

Отключаем пересоздание индексов

При каждом переключении между проектами, а также при некоторых других действиях VSCode запускает "Rebuild IntelliSense index". Эта операция выполняется довольно долго. Мучительно долго...

Можно отключить её, тем самым сэкономить себе кучу времени и нервов. Да, возможны проблемы при добавлении библиотек в проект, но переиндексацию можно запустить вручную в любой момент без проблем. Для этого войдите в параметры VSCode и снимите флажок "Auto Rebuild Autocomplete index" в разделе "Расширения / PlatformIO IDE":

-10

Настройка системы управления версиями GitHub

Если вы будете размещать свои проекты и библиотеки на GitHub (в том числе и в приватном режиме), то очень удобно делать это прямо из VS Code. Как работать с GitHub в данной статье я рассказывать не буду - в интернете полно статей на эту тему.

Но есть маленькая проблемка. Допустим у вас есть два десятка общих библиотек, подключенных к проекту. Вы успешно добавили их в список на вкладке GitHub:

-11

Всё хорошо работает и компилируется. Отлично. Теперь закройте VSCode и откройте его заново, а через некоторое время загляните на эту же вкладку. Нашли все ранее подключенные библиотеки??? А вот и нет. Некоторые пропали - VSCode посчитал нужным не загружать их в систему управления версиями в этот раз. Причем завтра некоторые из них вполне могут появиться в списке вновь, а могут и не захотеть... Как бороться с этим волюнтаризмом?

Заходим в параметры VSCode, и добавьте в список "Git / Scan Repositories" репозитории, которые всегда нужно загружать в систему управления версиями:

-12

Добавлять придется каждый репозиторий отдельно, ** тут уже "не катят".

_______________

На этом пока всё, до встречи на сайте и на dzen-канале!

👍 Понравилась статья? Поддержите канал лайком или комментарием! Каналы на Дзене "живут" только за счет ваших лайков.

📌Подпишитесь на канал и вы всегда будете в курсе новых статей.

🔶 Полный архив статей вы найдете здесь

Благодарю за вашу поддержку! 🙏