Всем привет!
Сегодня рассмотрим настройку удобной и красивой среды разработки для программиста микроконтроллеров с помощью набора полностью бесплатных инструментов разработки.
Все шаги проверены на виртуальной машине со свежеустановленной Ubuntu 16.04 xenial desktop x64.
Подразумевается, что у Вас уже есть исходники какого-либо проекта.
Все настройки, касающиеся конкретного железа (в моём случае это контроллер STM32F429 и девборда STM32F429DISCO), нужно подменить на свои. То же самое касается и путей.
Установка curl
sudo apt-get install curl
Установка vscode
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install code # or code-insiders
Установка arm-none-eabi тулчейна
sudo apt-get install gcc-arm-none-eabi
sudo apt-get install gdb-arm-none-eabi
Установка openocd
sudo apt-get install openocd
Запуск и настройка vscode
Для запуска vscode вызвать в терминале команду code
.
Заходим в раздел Extensions (Ctrl+Shift+X).
Ищем и устанавливаем следующие плагины:
- Cortex-Debug от автора marus25.
- С/С++ от Microsoft.
Открываем папку с проектом через меню File/Open Folder.
Заходим в раздел Debug (Ctrl+Shift+D).
Вверху в выпадающей строке видим текст No configurations.
Нажимаем на шестерёнку рядом с ней, выпадает меню с предложением создать конфигурацию для дебага, выбираем Cortex-Debug.
В каталоге проекта создаётся скрытая папка .vscode, в которой создаётся файл с конфигурациями дебага launch.json.
Если этот файл не открылся сам, открываем его руками: переходим в раздел Explorer (Ctrl+Shift+E) и в дереве выбираем этот файл.
Настраиваем конфигурацию для openocd:
"configurations": [
{
"name": "openocd",
"request": "launch",
"type": "cortex-debug",
"cwd": "${workspaceRoot}",
"servertype": "openocd",
"executable": "build/lol.elf",
"svdFile": "STM32F429.svd",
"configFiles": [
"/usr/share/openocd/scripts/board/stm32f429discovery.cfg"
]
}
]
Последние три свойства: расположение elf-файла, расположение svd-файла, путь к конфигу для openocd, — настраиваем под себя.
Сохраняем файл launch.json и снова идём в раздел Debug, там убеждаемся, что в выпадающем меню появилась наша конфигурация.
Далее возвращаемся в раздел Explorer и в каталог .vscode добавляем новый файл с именем settings.json, открываем его, пишем там следующее:
{
"cortex-debug.armToolchainPath": "/usr/bin",
"cortex-debug.openocdPath": "/usr/bin/openocd"
}
Далее добавляем в .vscode ещё один файл c_cpp_properties.json, открываем его и пишем там следующее:
{
"configurations": [
{
"name": "vscode_stm32_c_cpp_properties",
"compilerPath": "/usr/bin/arm-none-eabi-gcc",
"includePath": [
"${workspaceRoot}/Inc/",
"${workspaceRoot}/Drivers/CMSIS/Include/",
"${workspaceRoot}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/"
],
"defines": [
"STM32F429xx"
],
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
По нажатию F5 можно запускать отладку (не забудьте перед этим собрать проект, чтобы elf-файл был на нужном месте).
Комментарии (49)
zompin
28.01.2019 11:36А вы не пробовали PlatformIO? Вполне годная штука ставиться как дополнение к VScode.
GREGOR_812 Автор
28.01.2019 12:02Не пробовал, но встречал упоминания про неё. Если не трудно, расскажите вкратце, что даёт этот плагин?
zompin
28.01.2019 12:07Насколько помню он позиционирует себя как IDE для разработки IOT. Я программировал esp8266. Можно выбрать фреймворк если поддерживается несколько. Я выбирал Ардуино. Но с убогой Arduino IDE это не связано.
NordicEnergy
28.01.2019 12:40+3Это лютый кусок гуано для ардуинщиков, даже смысла нет сравнивать с обычным cmsis.
xman
28.01.2019 20:39Какое отношение имеет PlatformIO к Arduino? => https://platformio.org/frameworks
roboter
28.01.2019 14:16К сожалению дебаг там платный.
xman
28.01.2019 20:43-1Это временная бизнес модель которая позволяет поддерживать open source PlatformIO.Org и быть полностью независимым от hardware vendors.
Напишите, пожалуйста, на contact@pioplus.com со ссылкой на этот пост и получите бесплатную лицензию.
Grym
28.01.2019 11:50-3Еще очень хорошая IDE для разработки под микроконтроллеры Atmel Studio
GREGOR_812 Автор
28.01.2019 12:11+1Расскажите, в чём её достоинства? Какие контроллеры в ней поддерживаются?
Grym
28.01.2019 13:04-3По сути это разработка компании под 8 и 32 битные микроконтроллеры семейства ARM от компании Atmel. Поддерживает языки c/c++ и асемблер. Впринципе краткое описание описывающее достоинства и недостатки, можно посмотреть в интернете — все описывать не вижу смысла, информация вся в свободном доступе
Опять же, первый раз познакомился с ней в студенческие годы, когда интересовался микротехникой, а конкретно «препарировал» микропроцессор Atmega128GREGOR_812 Автор
28.01.2019 13:28А к чему Вы тогда написали вообще про атмел студию? Судя по Вашему сообщению, она поддерживает только МК производства Microchip (теперь уже), работает, вероятно, только под Windows, весит пару гигов.
При том что в своей статье я написал как настроить универсальное окружение для любых арм контроллеров (STM32 там лишь для примера), которое не будет отъедать место на диске и требовать какую-то определённую операционную систему/виртуальную машину типа .net или javaGrym
28.01.2019 13:48-1Не нашел в вашей статье кроме фразы
Все настройки, касающиеся конкретного железа (в моём случае это контроллер STM32F429 и девборда STM32F429DISCO), нужно подменить на свои. То же самое касается и путей.
что это универсальное решение для любых семейств контроллеров…
Не всегда универсальной инструмент удобен в работе под что-то определенное, поэтому в качестве доп. информации привел Atmel Studio под семейство ARM…GREGOR_812 Автор
28.01.2019 14:55Я и не спорю с тем, что если есть хорошее решение для конкретных МК, то можно его использовать. Тем более если там из коробки по хоткеям можно найти описание регистров и периферии, открыть дш или рм или другие доки, есть шаблоны проектов и т.д.
Но, во-первых, ещё раз повторюсь: атмел студия — это продукт, рассчитанный на разработку под Windows. Во-вторых, я не поленился и посмотрел, в системных требованиях указано 6 ГБ свободного места на диске, 6 ГБ КАРЛ. Это просто недопустимо.
Gryphon88
28.01.2019 15:44+1Она ещё и с Visual Studio конфликтует, квест «поставь и заставь работать студии от Атмел и Микрософт (2017 & 2013)» меня в своё время затянул почти на 3 дня. Но симулятор для 8битных МК в Atmel Studio очень удобный, и ASF штука для быстрой разработки полезная.
Polaris99
28.01.2019 16:14+1У нас на работе нет доступа к Инету, так эта студия регулярно отказывается видеть свои же отладочные инструменты (Atmel-ICE). В системе они видны, драйвера стоят, но студия их в упор не видит, причину выяснить так и не удалось. Сначала не хватало каких-то сертификатов, потом, после апдейта, снова ослепла, и привести ее в чувство уже не удалось. Зачем мне инструмент, который постоянно пытается что-то подкачать? А уж переход на ASF4 — это вообще песня, снова только в инете, половина функционала там не реализована, а код из него выходит такой, что плюнул, переписал все сам и сократил объем прощивки в три раза.
NEOndertalets
28.01.2019 12:02Собираюсь освоить STM32, как раз выбирают инструментарий. Что нового и уникального даст использование VSCode? В чем это круче или удобнее остальных инструментов? Какие плюшки в отладке появляются?
GREGOR_812 Автор
28.01.2019 12:06+1Лично для меня, плюсы vscode — это привычный интерфейс после Visual Studio, легковесность самого редактора по сравнению с большими IDE, отсутствие привязки к java или .net инфраструктуре, обилие плагинов, которые легко устанавливать и конфигурировать.
По поводу плюшек — а какие плюшки Вас интересуют? Можно посмотреть стек вызовов, а также просматривать и модифицировать регистры и память, ставить и удалять брейкпойнты, вычислять выражения и всё то же самое, что обычно при отладке можно. Что ещё нужно?)
GREGOR_812 Автор
28.01.2019 14:57Хотел бы поинтересоваться, вопрос «что нового и уникального» по сравнению с чем подразумевался?
NEOndertalets
28.01.2019 17:16Да пока ни с чем конкретным, только читаю и выбираю. Вот и хотел узнать, что уникального дает VSCode+STM32? Характерного и неповторимого ни в одной другой среде. Может быть только «вкусовщина» или действительно уникальные особенности.
Я не ругаю, просто для себя пытаюсь разобраться и ставлю «плюсы-минусы» за тот или иной инструмент.
slonegd
28.01.2019 13:14А где брать svd файл? У меня всё работает, но в зоне cortex peripherial написано no svd file loaded. Списка поддерживаемых контроллеров тоже не нашел.
GREGOR_812 Автор
28.01.2019 13:15svd файлы нужно искать на сайте производителя. Список контроллеров — тот же самый, что и у openocd.
strongmonkey
28.01.2019 16:58Полезная статья.
Когда начинал работать с stm32 использовал Eclipse. Потом пересел на IntelliJ IDEA.
А так наверное писать можно хоть в vim или notepadukt
28.01.2019 18:03Эклипс жручая по памяти, если под виндой, то можно кейл пользовать, у него 32кб ограничение для личных целей.
IntelliJ IDEA — Это для мк? или имелось в виду Clion? Или просто пересели на Java?Polaris99
28.01.2019 18:48Не только жручая, но и глючная. Еще неудобный поиск, неудобная организация проекта, неудобное автодополнение.
Punk_Joker
30.01.2019 00:25Я работал только с Keil и Eclipse. И второе как IDE получше будет. Есть шансы, что JetBrains в этом году выкатит что-то для Embedded.
strongmonkey
28.01.2019 19:10IntelliJ IDEA — Это для мк? или имелось в виду Clion? Или просто пересели на Java?
именно Clion имелось виду.
для CLion есть плагинOpenOCD + STM32CubeMX support for ARM embedded development
Для меня такой вариант самый удобный.
sondern
28.01.2019 21:06+1Может быть кому поможет мой конфигурационный файл для Jlink и FreeRTOS.
{ "version": "0.2.0", "configurations": [ { "name": "test debug", "request": "launch", "type": "cortex-debug", "executable": "${workspaceRoot}/_debug/test_d.elf", "cwd": "${workspaceRoot}", "servertype": "jlink", "device": "STM32F446RE", "svdFile": "/Users/user/workspace/Devices/cmsis-svd/data/STMicro/STM32F446x.svd", "rtos": "FreeRTOS", "interface": "swd", "swoConfig": { "cpuFrequency": 128000, "swoFrequency": 8000, } } ] }
К недостаткам плаигна на данный момент отнесу только то, что он переменные показывает только в десятичной форме.
Выглядет это странным и неудобным. Эмбед с десятичными значениями :).
Sergey78
28.01.2019 21:32Пробую сделать под ubuntu 18.10 и не очень выходит.
В репах нет gdb-arm-none-eabi. Странно, есть пакеты gdb-avr, gdb-msp430, а под arm нет.
VSCode уже стоял, с Platformio для разработки под ESP32.
Добавил новый workspace, папку .vscode с вашими примерами. .svd взял из TrueStudio. А где настройки как собирать проект? У меня кнопки «Build» просто нет. Должны же быть где-то настройки как вызывать компилятор, путь к скрипту линкера и прочее.
Я понимаю, что у автора ubuntu 16.04, вопрос к тем, кто, возможно, настроил сборку и отладку в 18.10 или просто хорошо разбирается в настройках VSCode.pmaxim25
29.01.2019 01:49+1Пример для винды, но в убунте должно быть почти так же в этом плане. Необходимо в папке .vscode создать tasks.json и там прописать таски для сборки, прошивки и прочего чего угодно. У меня все это через make, соответственно, таски выглядят так:
tasks.json{ "version": "2.0.0", "tasks": [ { "label": "Build", "type": "shell", "group": "build", "command": "make build", "problemMatcher": [ "$gcc" ] } ] }
GREGOR_812 Автор
29.01.2019 02:42На новой Ubuntu нужно ставить другой gdb: gdb-multiarch или как-то так. Я не обновляю пока что ОС, поэтому не могу ничего сказать больше.
По поводу сборки — в начале я сказал, что у вас подразумевается наличие готового к сборке проекта. А в конце упомянул, что нужно не забыть его собрать. Цель статьи — показать связку именно для дебага.
Orange_hanter
28.01.2019 22:31Имеется следующий вопрос, как с отладкой в VisualCode+CortexDebug? Имеется ли возможность видеть участки памяти контроллера(как например в VisualGDB)?
pmaxim25
29.01.2019 01:38Можно посмотреть регистры переферии, ядра и значения переменных, естественно. Про участки памяти упоминаний в доках к этому расширению не видел, но их легко можно посмотреть через командную строку не выходя из VS Code, если используете J-Link. Скорее всего в других дебаггерах тоже можно так.
pmaxim25
28.01.2019 22:31А просмотров регистров работает? Ибо в J-Link их не обновляет: github.com/Marus/cortex-debug/issues/70#issuecomment-455786964
8street
29.01.2019 09:05Интересно, а кто-нибудь настраивал Visual Studio в качестве IDE под stm32? Я сейчас не про существующий платный плагин, а про конфиг json, как в статье. Я пробовал, но вышел какой-то затык на этапе конфигураций, а разбираться не было времени. Если кто напишет гайд, буду очень благодарен.
NordicEnergy
29.01.2019 13:15+1Гайд на что? Подключение gcc и установка openOCD? Если у разработчика это вызывает проблемы, то ему или на кейл, или плагин за 60 евро, или в домохозяйки.
catBasilio
29.01.2019 15:57-1А что не так с платным плагином (мы про VisualGDB говорим?). Он не такие большие деньги стоит (в районе $100), но реально качественно сделан, ставишь и работаешь, в отличае от плясок с бубном при настройке бесплатных IDE. Вам своего времени не жалко?
Всеравно для самоделок — детали платные денег стоят, процевворы тоже, изготовление плат в резоните тоже не бесплатно, корпус — тоже деньги.GREGOR_812 Автор
29.01.2019 15:58Вот именно, мало того, что тратишь деньги на покупку железа, так за эти деньги нет нормального сервиса для разработки, плати ещё бабки за плагины или убогие IDE.
NordicEnergy
29.01.2019 23:25Если быть точным 60 евро и 30, если ты студент или есть открытый проект на гитхабе. По моему даже для хобби очень адекватный вариант, хотя к сожалению плагины отбивают у разработчика желание разбираться с процессом сборки и компиляции, что считаю не есть хорошо.
Punk_Joker
Немного скринов бы процесса отладки в деле, это самое важное. Как выглядит просмотр регистров переферии? Просмотр памяти возможен?
GREGOR_812 Автор
Да, согласен, добавлю как время будет)
ukt
Эклипс пробовали?
Чем студия из статьи лучше?
GREGOR_812 Автор
Ну хотя бы тем, что не требует java. А вообще, это не сравнительная статья, а гайд по настройке vscode.
geisha
GREGOR_812 Автор
Ок, а сколько ресурсов нужно еклипсу?