VScode и Docker, мощный набор для разработки под embedded system или VSCode + Docker (GCC-ARM + CMake + OpenOCD) = STM32 IDE
Небольшие наблюдения. Спустя пару лет.
Данный проект я позиционирую как демонстрацию возможностей. Годится ли такая система для постоянного использования?! Скорее нет, чем да.
Некоторые мысли по системам сборки:
alpine linux
, в котором даже grep
будет работать иначе.)Cmake
. Это становиться головной болью при поддержке проекта. Умелое использование Makefile
позволяет достичь такого же результата.Несмотря на выше сказанное. Проект спустя пару лет собирается, значит он выполняет свою задачу.
Советую ознакомиться с еще одним проектом, он более подходит под описание моих критериев. FPGACode-ide
VSCode + Docker (GCC-ARM + CMake + OpenOCD) = IDE
Всех приветствую. В очередной раз речь пойдет о среде разработки под ARM. После многочисленных скитаний по разным IDE и ОС, у меня сформировался некоторый список требований к рабочему пространству. К сожалению, ни одно готовое решение не отвечало всем критерием. В процессе экспериментов, был порожден такой инструмент — набор. У вас возникнет вопрос, а почему мы должны обратить на него внимание?! В качестве аргумента, перечислю список возможностей и преимуществ.
Заинтересовало?! Тогда продолжением.
Docker - Программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему, а также предоставляет среду по управлению контейнерами. Если по простому, принцип использования очень похож на виртуальную машину, но при этом таковой не являющейся. Это позволяет избавиться от самого серьезного недостатка, ограничения производительности.
VScode - редактор исходного кода. Позиционируется как «лёгкий» редактор кода для кроссплатформенной разработки. Имеет хорошую поддержку и огромную базу расширений, при этом все Open source. Основные преимущество, это функция Remote Development, в других редактора её просто нет. Почитать про нее можно на оф. сайте, изображение ниже взято именно оттуда. Если в двух словах, у нас есть возможность запустить в docker контейнере часть среды разработки, что позволяет реализовать полноценный Debug. В данной сборке, в контейнере находятся все приложения необходимые для разработки. Ваша ОС остается “чистой”. Так же это позволяет избежать конфликта версий и несовместимости различных модулей сборки.
CMake - кроссплатформенная система автоматизации сборки программного обеспечения из исходного кода. CMake не занимается непосредственно сборкой, а лишь генерирует файлы управления сборкой из файлов 'CMakeLists.txt'. Благодаря этому приложению мы можем создавать сложные, иерархические проекты и при этом делать это максимально автоматизированно.
Стоит отметить, все происходило на Ubuntu 20.04 c использованием китайского ST-Link2 (модифицированный).
О доработке ST-Link2 можно почитать здесь: https://habr.com/ru/post/402927/
Проекты в этом репозитории сугубо демонстрационные, некоторый код в них абсурден.
В этот раз нам понадобится совсем не много пакетов…..
Установим непосредственно Visual Studio Code.
sudo apt install code
Установим Docker, тут все немного сложнее. Есть детальная инструкция от разработчика, а можно выполнить сценарий автоматической установки.
Выставим права для запуска файла, и выполняем его.
chmod +x ./docker-install-ubuntu.sh && ./docker-install-ubuntu.sh
После этого необходимо, обязательно, перезагрузить компьютер.
Осталось дело за малым, необходимо установить расширение “Remote Development” в VScode.
Подключаем ST-link в usb, это нужно сделать ОБЯЗАТЕЛЬНО до запуска контейнера. Лучше даже до запуска VScode, иначе мы не сможем с ним работать из контейнера. Если вдруг, программатор был отключен во время работы, придется останавливать контейнер, подключать программатор, и заново запустить.
Нажимает на переключатель, в левом нижнем углу.
Нам необходимо открыть WorkSpace в контейнере. Ищем файл в корне проекта с расширением .code-workspace, затем открываем его.
Первое развертывание контейнера занимает продолжительное время, терпеливо ждем.
Затем, зайдем в меню “Терминал” и выполним задачу “CPU: ST-link info”. Она должна вывести информацию о вашем МК.
На этом можно считать настройку завершенной. Можно приступать к работе :)
Нижнее меню:
Боковая панель:
Курсивом выделены автоматически генерируемые файлы. Жирным выделены файлы и каталоги которые необходимо редактировать.
.devcontainer - конфигурации Docker
.vscode - конфигурации IDE
A - основной под проект
B - основной под проект Структура аналогична предыдущему пункту.
build - каталог с файлами жизнедеятельности сборки, тут хранятся собранные elf, bin, т.д.
cmake - глобальные параметры системы сборки
openocd - каталог с cfg, svd для вашего МК
Test - Юнит-тестирование. *Файлы формата .cpp автоматически определяются как тесты и компилируются
.astylerc - настройки системы форматирования кода
CMakeLists.txt - основной файл системы сборки, данный скрипт сканирует все под проекты. Под проектом считается любая папка в которой содержится файл CMakeLists.txt
WSpace.code-workspace - настройки workspace, настройки всех расширений
.gitignore - список того что не требуется в контроле git системой
Пример проекта расположен в каталоге firmware
Запуск отладки осуществляется по нажатию данной кнопки, так же тут можно выбрать режим работы swo
Пример работы SWO Console, найти её можно во вкладке “Выходные данные”, в разделе SWO…..
Пример работы SWO Grapher. Окно вывода графика открывается автоматически.
[cmake] Sub Projects: A
[cmake] -- Name: EXAMP_01_A
[cmake] -- Memory map:
[cmake] - Bootloader [Boot] size is 0 kb (origin 0x8000000)
[cmake] - Application [App] size is 62 kb (origin 0x8000000)
[cmake] - Settings size is 2 kb (origin 0x800f800)
[cmake] -- Used MCU: STM32f334R8T6
[cmake] -- Find Sector: App
[cmake] -- -- Cleaning: ON
[cmake] -- -- AStyle: CHANGES
[cmake] -- IDE: VScode
[cmake] Sub Projects: B
[cmake] -- Name: EXAMP_01_B
[cmake] -- Memory map:
[cmake] - Bootloader [Boot] size is 24 kb (origin 0x8000000)
[cmake] - Application [App] size is 40 kb (origin 0x8006000)
[cmake] - Settings size is 0 kb (origin 0x8010000)
[cmake] -- Used MCU: STM32F103C8T6
[cmake] -- Find Sector: App
[cmake] -- -- Cleaning: ON
[cmake] -- -- AStyle: CHANGES
[cmake] -- IDE: VScode
[cmake] Sub Projects: Test
[cmake] -- Test name: UT_pid
[cmake] Status:
[cmake] -- Configuring done
[cmake] -- Generating done
[cmake] -- Build files have been written to: /workspaces/VScode_Docker_stm32/firmware/build
В: Почему у меня не проверяется “misra c”? О: Вам необходимо приобрести документ “misra c” и в Dockerfile, в строке 42, вставить ссылку на скачивание.
RUN wget -O /opt/CppCheck/addons/misra.txt https://text/text.txt
Пример оформления документа:
Appendix A Summary of guidelines
Rule 1.1
text text text
Rule 1.2
text text text
......
В: Почему у меня весь код подчеркнут красным? О: За это отвечает расширение “C/C++”? по совместительству IntelliSense Он берет информацию из файла build/compile_commands.json. После первого запуска этого файла нет. В таком случае необходимо скомпилировать App и Boot и перезапустить IDE. После этого код в под проекте указанном как рабочий подчеркиваться красным не будет.
В: Почему IDE не видит мой ST-link? О: Как было сказано выше, ПРОГРАММАТОР нужно подключать ДО запуска контейнера, то есть до запуска IDE
В: Программатор виден в системе, но не доступен из Docker.
О: Одной из причин может быть STM32CubeIDE, который добавляет правило в /etc/udev/rules.d/
для ST-Link. Починить можно удалением этого файла, или настройкой прав.
sudo usermod -aG docker $USER
sudo usermod -aG plugdev $USER
sudo udevadm control --reload-rules