- PVSM.RU - https://www.pvsm.ru -

Бесплатных IDE для разработки микроконтроллеров не так уж много, а их интерфейс, основанный на Eclipse, вызывает у меня только страдания. В итоге разработка превращается в постоянное переключение с VSCode для редактирования кода в CubeIDE для его сборки и отладки.
Но почему бы не собрать все инструменты в VSCode в едином расширении, заодно подогнав автогенерацию проектов под стиль компании/личные предпочтения? Об и будет моя первая статья. Привет!
В процессе поиска альтернативных решений была найдена система сборки Xmake [1], основанная на Lua. Сама по себе она уже поддерживает разработку на ARM, но я бы не назвал ее полноценной заменой CubeIDE из-за отсутствия удобного GUI, да и быстро запустить разработку на ней у меня не получилось. Но сама система меня завлекла и было принято решение создать поверх неё узкоспециализированное расширение, которое позволит через графический интерфейс настроить проект, скомпилировать и запустить отладку, но чтобы все это занимало минимум времени.
Так появилось расширение Xbuild MCU [2], предназначенное для разработки проектов на STM32.
Важное замечание: мой опыт в создании расширений для VSCode минимальный, а знакомство с Xmake не было углубленным. Расширение было проверено на нескольких проектах и показало свою работоспособность, но разработка все еще продолжается. Если у Вас будут указания на ошибки или предложения по улучшению, я с радостью приму их.
Основной функционал расширения: автогенерация структуры проекта, импорт системных файлов из CubeMX, настройка сборки через GCC/G++ и прошивка через JLink.
Основное меню, используемое для работы с проектом - Project Configuration. Для создания нового проекта достаточно открыть пустую папку через VSCode и зайти в настройки проекта. Система определит, что в текущей папке нет базового скрипта xmake.lua и предложит его сгенерировать автоматически.
Для первичной настройки проекта проще всего выбрать один из готовых пресетов, а затем изменить под реальные данные. Основные поля, которые необходимо настроить, находятся в подпунктах MCU и Paths.
JLINK_PATH = "c:/Programs/JLink_V872a/JLink.exe"
STM32_SDK = "c:/ST/STM32CubeIDE_1.19.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.14.3.rel1.win32_1.0.0.202510090749/tools"
Далее необходимо настроить все дефайны и файлы, включаемые в сборку. Это так же проще сделать через "Reset to STM32F103 Defaults", а затем изменить под нужные в текущем проекте.
Если Вы не знаете, что туда вписать, то значения для всех этих полей можно найти в через интерфейс CubeIDE.
Вероятнее всего, вы создавали стартовый код проекта через CubeMX. Тогда можно быстро импортировать его основные файлы, указав путь до проекта. Расширение скопирует startup файл, linker script и драйверы. Файлы с кодом по типу main.c не копируются: предполагается, что структура проекта может отличаться от стандартно сгенерированной CubeMX, и эти файлы либо вообще не переносятся, либо копируются отдельные блоки.
Расширение позволяет управлять Git-сабмодулями. Так, например, если в Вашей компании в каждом проекте используется определенный набор сабмодулей, их можно указать в User Settings VSCode, и тогда расширение позволит подключать/удалять их по нажатию одной кнопки. Подробнее о настройке можно прочитать в README репозитория [3].
Для генерации начальной структуры проекта удобно использовать шаблоны [4]. Расширение предполагает, что в корне проекта может находиться папка templates, в которой собраны шаблоны со структурой папок и дефайнами. Удобнее всего добавлять эту папку как сабмодуль, после генерации структуры ее можно будет безболезненно убрать из проекта.
Расширение автоматически генерирует .vscode/launch.json для работы с плагином Cortex-Debug [5].
Кроме того, расширение поддерживает два типа сборки: Debug и Release. Для каждого из них можно настроить степень оптимизации. После сборки проекта открывается окно, в котором показывается, какой процент Flash и Ram памяти микроконтроллера использован под программу (по аналогии с ESP-IDF).
В раскрывающемся списке "Available Optimization Levels" есть краткое описание доступных вариантов уровня оптимизации.
Если в системе установлен Doxygen [6], то доступна генерация документации через соответствующий пункт меню.ma
Данное расширение создавалось под конкретные входные условия, из-за чего его нельзя назвать по-настоящему универсальным, но мне кажется, оно может стать достойной заменой CubeIDE, ориентируясь больше на лаконичность и удобство интерфейса. А благодаря поддержке шаблонов и простому редактированию Lua скрипта его можно подогнать под конкретные требования Вашей команды или личные предпочтения. Прошу относиться к этому проекту как к демонстрации жизнеспособности идеи. Работа над дальнейшим улучшением функционала и исправлением ошибок будет продолжаться. Если Вы нашли критические ошибки или у Вас есть предложения, как сделать расширение более гибким, пожалуйста, поделитесь этой информацией.
Автор: IlyaYukhimets
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/stm32/449012
Ссылки в тексте:
[1] Xmake: https://github.com/xmake-io/xmake
[2] Xbuild MCU: https://github.com/IlyaYukhimets/xbuild-mcu
[3] README репозитория: https://github.com/IlyaYukhimets/xbuild-mcu?tab=readme-ov-file#%EF%B8%8F-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%B2-templates
[4] использовать шаблоны: https://github.com/IlyaYukhimets/xbuild-mcu?tab=readme-ov-file#%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%B2%D0%BE%D0%B8%D1%85-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%B2-%D0%BD%D0%B0-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5-stm32f103
[5] Cortex-Debug: https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug
[6] Doxygen: https://www.doxygen.nl/download.html
[7] Источник: https://habr.com/ru/articles/1020160/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1020160
Нажмите здесь для печати.