VS Code + CMake (Windows)

Создал репозиторий для тех, кто хочет попробовать использовать связку VS Code + CMake (Windows) в качестве окружения разработчика для AVR и Arduino.

Для клонирования можно использовать команду:

git clone --recurse-submodules --jobs 4 https://github.com/ViacheslavMezentsev/demo-avr-cmake

Полезные ссылки:

  1. Краткий обзор репозитория с CMake демо-проектами для AVR. Часть 1

Оригинальное решение снимать чёрный экран.
На нём же ничего не видно, даже в очках!!!

Что за чушь я только что прочитал?

Так посмотри свой видеоролик.

Boom, ты вообще соображаешь что пишешь? Надень другие очки, сходи к доктору, наконец, раз ничего не видишь.

А для чего всё оборачивается в Setup и Loop ??? Даже в arduino ide без них часто пишу…, а тут такое увидеть - детский сад… Почему тогда и таймеры/прерывания для millis не запускаете ?
Граница портов в RAM задана под один чип ? Как быть с другими ???

Setup и Loop для единообразия кода, чтобы читающему демо проекты можно было сразу ориентироваться между arduino стилем и без оного. В репозитории проекты имеют условное деление на проекты для avr и проекты для arduino. Когда код использует какие-то архитектурные соглашения, то на них можно не обращать внимания, а изучаться только специфические для используемых библиотек вещи.

По поводу границ секций. В новых версиях компилятора встроен один шаблонный файл компоновщика, который поддерживает управление этими границами при помощи ключей при сборке. Об этом есть в видео. Это сделано специально, чтобы пользователи могли самостоятельно добавлять работу с новыми чипами, не дожидаясь обновления тулчейна.
По умолчанию размер флеша настроено на 128 КБ, ОЗУ не помню. Вы можете изменить эти границы, задав константы в ключах при сборке. У меня эти константы тоже есть в CMake файлах.
Либо вы можете подключать свой ld файл и вписать туда всё что хотите. Примеры таких файлов также есть в репозитории.

Есть проекты (atmega\05-timer), где millis() используется и таймер запущен вне arduino кода. В некоторых библиотеках есть и другие подходы учёта времени.

Вообщем понятно - для энтузиастов …

Харкор там тоже есть, если понять его сможете :slight_smile:

Можно обратить внимание как называется тема. Неважно какая библиотека используется или какой подход. Это немного о другом. В репозитории я также это продемонстрировал. Там находятся совершенно разные библиотеки и arduino - лишь одна из них.

Писать вы можете совершенно как угодно. Тема немного не про это, но я отвечаю и про содержимое демо-проектов.

Можно тему обозвать Notepad++ + CMake…

Покажите как вы ставите точки останова при отладке в Notepad++, тогда я покажу как отлаживаю в VS Code и сравним.

Шёл 2023 год. Этот пост для молодёжи :slight_smile:

Хорошо и полезно.

Для коммерческого фриланса я бы не пошел этим путем. НО исключительно потому, что часто нужно собирать проект у заказчика. В этом случае у него нужно использовать то, что заказчик сам и быстро поставит.
Но вообще cmake это универсальный и правильный путь.

Меня как-то приглашали на работу в Синара (Екатеринбург). Я у них спросил об используемых средах разработки (имелись в виду stm32). Они ответили: CubeIDE и VS Code. Что согласуется с опросом от Stack Overflow.

На картинке выше есть вкладка Professional Developers, там результаты у VS Code больше. Понять тенденцию не трудно, т.к. современные проекты перемещаются в web или используют его. Удобно всё делать в одной IDE. VS Code это позволяет.

Сейчас в любом практически современном репозитории лежит скрипт для CMake. Современный разработчик должен хотя бы поинтересоваться для чего он там.

Фирма ST, к примеру, в последней своей версии CubeIDE 1.13 сделала наконец поддержку CMake проектов. Если кто не знал.

Ну это всё для нормальных, серьёзных проектов. А если на раз-два? Setup и loop происходит из логики (привет, Командир)), иначе - если нужна экономия. Если есть возможность обходиться без Ардуино фреймворка, пользуюсь GCC + Makefile - это просто, шустро и удобно.

Не хочу показаться деревней, но:
Если мне нужен чай- включаю чайник, нужено сварить сталь- включаю дуговую печь. Я не использую печь вместо чайника и сварку там, где и изолента справляется.
Я использую инструмент по назначению. Конкретно для Авр есть родная IDE. Чем VS лучше Атмел(Микрочип) Студии?
Один инструмент на все случаи это утопия. Это скажет любой специалист в любой области.

А есть принципиальная разница cmake или make?
Просто vsCode, как мне кажется, все и так знают

VScode это удобство для программера. С некоторых пор стараюсь всё лишнее вообще убирать из проекта. Что бы было всё максимально понятным и не накрученным. Это легче всем, и для себя в т.ч… Потому как, иной раз, сам смотришь на СВОЙ ЖЕ проект как баран на новые ворота.(

Разница между cmake и make есть, иначе бы не было смыла придумывать новый инструмент сборки. В основном это удобство при сборке больших проектов, где cmake берёт на себя большую часть работы по разрешению зависимостей между частями. Это очень удобно. Если человек сразу стал использовать cmake, то ни на какой make он больше никогда не вернётся.

VS Code в своих demo проектах я рассматриваю не как просто приблуду для редактирования текста или “оболочку” для cmake. У меня несколько demo репозиториев (stm32 и avr) и в них я показываю как использовать VS Code как IDE, т.е. не только сборка, но и отладка простых проектов выполняется в VS Code.

Вот пример отладки Ardupilot в VS Code

Такого в Notepad++ никто делать не будет. Все ли знают или умеют так? Если вы посмотрите как сами авторы Ardupilot занимаются отладкой, то выяснится что нет. Полгода назад вышла серия роликов на youtube по отладки Ardupilot.

“Все и так знают” - это для тех, кто использует VS Code на верхнем уровне. Непосредственно для встраиваемых приложений это ещё очень далеко не так.

Я тут принципиально не упоминаю PlatformIO, т.к. всё можно настроить и без него. Есть и другая причина - это пропаганда на их официальном сайте, кто не знает.

Скажу ещё раз, что фирма ST, к примеру, только в этом году сделала официальный плагин для VS Code. CMake также у них только месяц назад стал поддерживаться официально в CubeIDE. Это казалось бы незаметное изменение, но на самом деле теперь все уйдут с make-файловой конфигурации для STM32.

Microsoft тоже сделала недавно автоматическую генерацию cmake проектов для встраиваемых приложений. Я не говорю уже про Qt.