Pull to refresh

Comments 52

Немного скринов бы процесса отладки в деле, это самое важное. Как выглядит просмотр регистров переферии? Просмотр памяти возможен?

Да, согласен, добавлю как время будет)

Эклипс пробовали?
Чем студия из статьи лучше?
Ну хотя бы тем, что не требует java. А вообще, это не сравнительная статья, а гайд по настройке vscode.
Ну хотя бы тем, что не требует java.
В смысле «требует»? Электрон — совсем нетребовательная штука, ага. Как vim, только требует иксы, 300 Мб места, 2Гб оперативы и толстенный канал если вдруг задумаешь работать на тонком клиенте.

Ок, а сколько ресурсов нужно еклипсу?

А вы не пробовали PlatformIO? Вполне годная штука ставиться как дополнение к VScode.
Не пробовал, но встречал упоминания про неё. Если не трудно, расскажите вкратце, что даёт этот плагин?
Насколько помню он позиционирует себя как IDE для разработки IOT. Я программировал esp8266. Можно выбрать фреймворк если поддерживается несколько. Я выбирал Ардуино. Но с убогой Arduino IDE это не связано.
Это лютый кусок гуано для ардуинщиков, даже смысла нет сравнивать с обычным cmsis.

Можно поподробнее?

К сожалению дебаг там платный.
ч.т.д.) хорошо, что я не повёлся

Это временная бизнес модель которая позволяет поддерживать open source PlatformIO.Org и быть полностью независимым от hardware vendors.


Напишите, пожалуйста, на contact@pioplus.com со ссылкой на этот пост и получите бесплатную лицензию.

Еще очень хорошая IDE для разработки под микроконтроллеры Atmel Studio
Расскажите, в чём её достоинства? Какие контроллеры в ней поддерживаются?
По сути это разработка компании под 8 и 32 битные микроконтроллеры семейства ARM от компании Atmel. Поддерживает языки c/c++ и асемблер. Впринципе краткое описание описывающее достоинства и недостатки, можно посмотреть в интернете — все описывать не вижу смысла, информация вся в свободном доступе
Опять же, первый раз познакомился с ней в студенческие годы, когда интересовался микротехникой, а конкретно «препарировал» микропроцессор Atmega128
А к чему Вы тогда написали вообще про атмел студию? Судя по Вашему сообщению, она поддерживает только МК производства Microchip (теперь уже), работает, вероятно, только под Windows, весит пару гигов.
При том что в своей статье я написал как настроить универсальное окружение для любых арм контроллеров (STM32 там лишь для примера), которое не будет отъедать место на диске и требовать какую-то определённую операционную систему/виртуальную машину типа .net или java
Не нашел в вашей статье кроме фразы
Все настройки, касающиеся конкретного железа (в моём случае это контроллер STM32F429 и девборда STM32F429DISCO), нужно подменить на свои. То же самое касается и путей.
что это универсальное решение для любых семейств контроллеров…
Не всегда универсальной инструмент удобен в работе под что-то определенное, поэтому в качестве доп. информации привел Atmel Studio под семейство ARM…
Я и не спорю с тем, что если есть хорошее решение для конкретных МК, то можно его использовать. Тем более если там из коробки по хоткеям можно найти описание регистров и периферии, открыть дш или рм или другие доки, есть шаблоны проектов и т.д.
Но, во-первых, ещё раз повторюсь: атмел студия — это продукт, рассчитанный на разработку под Windows. Во-вторых, я не поленился и посмотрел, в системных требованиях указано 6 ГБ свободного места на диске, 6 ГБ КАРЛ. Это просто недопустимо.
Она ещё и с Visual Studio конфликтует, квест «поставь и заставь работать студии от Атмел и Микрософт (2017 & 2013)» меня в своё время затянул почти на 3 дня. Но симулятор для 8битных МК в Atmel Studio очень удобный, и ASF штука для быстрой разработки полезная.
У нас на работе нет доступа к Инету, так эта студия регулярно отказывается видеть свои же отладочные инструменты (Atmel-ICE). В системе они видны, драйвера стоят, но студия их в упор не видит, причину выяснить так и не удалось. Сначала не хватало каких-то сертификатов, потом, после апдейта, снова ослепла, и привести ее в чувство уже не удалось. Зачем мне инструмент, который постоянно пытается что-то подкачать? А уж переход на ASF4 — это вообще песня, снова только в инете, половина функционала там не реализована, а код из него выходит такой, что плюнул, переписал все сам и сократил объем прощивки в три раза.
Собираюсь освоить STM32, как раз выбирают инструментарий. Что нового и уникального даст использование VSCode? В чем это круче или удобнее остальных инструментов? Какие плюшки в отладке появляются?
Лично для меня, плюсы vscode — это привычный интерфейс после Visual Studio, легковесность самого редактора по сравнению с большими IDE, отсутствие привязки к java или .net инфраструктуре, обилие плагинов, которые легко устанавливать и конфигурировать.
По поводу плюшек — а какие плюшки Вас интересуют? Можно посмотреть стек вызовов, а также просматривать и модифицировать регистры и память, ставить и удалять брейкпойнты, вычислять выражения и всё то же самое, что обычно при отладке можно. Что ещё нужно?)
Хотел бы поинтересоваться, вопрос «что нового и уникального» по сравнению с чем подразумевался?
Да пока ни с чем конкретным, только читаю и выбираю. Вот и хотел узнать, что уникального дает VSCode+STM32? Характерного и неповторимого ни в одной другой среде. Может быть только «вкусовщина» или действительно уникальные особенности.
Я не ругаю, просто для себя пытаюсь разобраться и ставлю «плюсы-минусы» за тот или иной инструмент.
А где брать svd файл? У меня всё работает, но в зоне cortex peripherial написано no svd file loaded. Списка поддерживаемых контроллеров тоже не нашел.
svd файлы нужно искать на сайте производителя. Список контроллеров — тот же самый, что и у openocd.
Полезная статья.
Когда начинал работать с stm32 использовал Eclipse. Потом пересел на IntelliJ IDEA.
А так наверное писать можно хоть в vim или notepad
Эклипс жручая по памяти, если под виндой, то можно кейл пользовать, у него 32кб ограничение для личных целей.
IntelliJ IDEA — Это для мк? или имелось в виду Clion? Или просто пересели на Java?
Не только жручая, но и глючная. Еще неудобный поиск, неудобная организация проекта, неудобное автодополнение.
Добро пожаловать в embedded.
Я работал только с Keil и Eclipse. И второе как IDE получше будет. Есть шансы, что JetBrains в этом году выкатит что-то для Embedded.
IntelliJ IDEA — Это для мк? или имелось в виду Clion? Или просто пересели на Java?

именно Clion имелось виду.
для CLion есть плагин OpenOCD + STM32CubeMX support for ARM embedded development
Для меня такой вариант самый удобный.

Может быть кому поможет мой конфигурационный файл для 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,
            }
        }
    ]
}

К недостаткам плаигна на данный момент отнесу только то, что он переменные показывает только в десятичной форме.
Выглядет это странным и неудобным. Эмбед с десятичными значениями :).
Пробую сделать под 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.
Пример для винды, но в убунте должно быть почти так же в этом плане. Необходимо в папке .vscode создать tasks.json и там прописать таски для сборки, прошивки и прочего чего угодно. У меня все это через make, соответственно, таски выглядят так:
tasks.json
{
    "version": "2.0.0",
    "tasks":
    [
        {
            "label": "Build",
            "type": "shell",
            "group": "build",
            "command": "make build",
            "problemMatcher": [
                "$gcc"
            ]
        }
    ]
}


Для убунты скорее всего надо только command подправить. Ну и соответственно в корне папки должен лежать мэйкфайл для сборки.
На новой Ubuntu нужно ставить другой gdb: gdb-multiarch или как-то так. Я не обновляю пока что ОС, поэтому не могу ничего сказать больше.
По поводу сборки — в начале я сказал, что у вас подразумевается наличие готового к сборке проекта. А в конце упомянул, что нужно не забыть его собрать. Цель статьи — показать связку именно для дебага.
На Ubuntu 18.04 ставил gcc-arm-none-eabi так:
$ sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
$ sudo apt-get update
$ sudo apt-get install gcc-arm-embedded
Проверка версии:
$ arm-none-eabi-gcc --version
Спасибо, я разобрался уже. Я не стал добавлять сторонние репы, я просто взял с developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
Там ничего собирать не надо, просто разархивировать куда удобно и в makefile путь до gcc указать.
А gdb, как подсказали выше, в пакете gdb-multiarch в репах есть.

Имеется следующий вопрос, как с отладкой в VisualCode+CortexDebug? Имеется ли возможность видеть участки памяти контроллера(как например в VisualGDB)?

Можно посмотреть регистры переферии, ядра и значения переменных, естественно. Про участки памяти упоминаний в доках к этому расширению не видел, но их легко можно посмотреть через командную строку не выходя из VS Code, если используете J-Link. Скорее всего в других дебаггерах тоже можно так.

Интересно, а кто-нибудь настраивал Visual Studio в качестве IDE под stm32? Я сейчас не про существующий платный плагин, а про конфиг json, как в статье. Я пробовал, но вышел какой-то затык на этапе конфигураций, а разбираться не было времени. Если кто напишет гайд, буду очень благодарен.

Гайд на что? Подключение gcc и установка openOCD? Если у разработчика это вызывает проблемы, то ему или на кейл, или плагин за 60 евро, или в домохозяйки.
А что не так с платным плагином (мы про VisualGDB говорим?). Он не такие большие деньги стоит (в районе $100), но реально качественно сделан, ставишь и работаешь, в отличае от плясок с бубном при настройке бесплатных IDE. Вам своего времени не жалко?
Всеравно для самоделок — детали платные денег стоят, процевворы тоже, изготовление плат в резоните тоже не бесплатно, корпус — тоже деньги.
Вот именно, мало того, что тратишь деньги на покупку железа, так за эти деньги нет нормального сервиса для разработки, плати ещё бабки за плагины или убогие IDE.

К сожалению, для хобби $100 за плагин дороговато.

Если быть точным 60 евро и 30, если ты студент или есть открытый проект на гитхабе. По моему даже для хобби очень адекватный вариант, хотя к сожалению плагины отбивают у разработчика желание разбираться с процессом сборки и компиляции, что считаю не есть хорошо.
Хотел бы добавить про вывод отладки через SWO.
Чтобы работал вывод printf в vscode, надо в .vscode/launch.json конфигурацию сделать примерно так:
launch.json
 "version": "0.2.0",
    "configurations": [
        {
            "name": "Cortex Debug",
            "cwd": "${workspaceRoot}",
            "executable": "./build/dash.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            "gdbpath" : "/usr/bin/gdb-multiarch",
            "svdFile": "STM32F429.svd",
            "configFiles": [
                "./stm32f4discovery.cfg"
            ],
            "swoConfig": {
                "source": "probe",
                "enabled": true,
                "swoFrequency": 2000000,
                "cpuFrequency": 180000000,
                "decoders": [
                        {
                                "port": 0,
                                "label": "Output",
                                "type": "console",
                                "encoding":"ascii"                                                                                              
                        }
                ]
                
        }
        }
    ]
}


В cpuFrequency надо указать частоту на которой контроллер работает, у меня это 180Mhz.

В коде надо переопределить функцию _write. В простом случае это примерно так:
write
int _write(int file, char *ptr, int len){
	while(len--) ITM_SendChar(*ptr++);	
	return 0;
}


ITM_SendChar в CMSIS есть.

После этого можно в коде сделать printf(«Hello\n»);
В vscode, в режиме отладки, в окне терминала закладка Output, и там в выпадающем меню выбрать SWO Output.

Небольшой нюанс — вывод printf работает в буфер, и передается в функцию write по символу \n, или какому-то большому размеру. Поэтому, что бы вывод происходил сразу после вызова printf, надо или \n добавлять, или принудительно после printf сбрасывать буфер.
Only those users with full accounts are able to leave comments. Log in, please.