Комментарии 53
Да, согласен, добавлю как время будет)
Чем студия из статьи лучше?
Какое отношение имеет PlatformIO к Arduino? => https://platformio.org/frameworks
Опять же, первый раз познакомился с ней в студенческие годы, когда интересовался микротехникой, а конкретно «препарировал» микропроцессор Atmega128
При том что в своей статье я написал как настроить универсальное окружение для любых арм контроллеров (STM32 там лишь для примера), которое не будет отъедать место на диске и требовать какую-то определённую операционную систему/виртуальную машину типа .net или java
Все настройки, касающиеся конкретного железа (в моём случае это контроллер STM32F429 и девборда STM32F429DISCO), нужно подменить на свои. То же самое касается и путей.что это универсальное решение для любых семейств контроллеров…
Не всегда универсальной инструмент удобен в работе под что-то определенное, поэтому в качестве доп. информации привел Atmel Studio под семейство ARM…
Но, во-первых, ещё раз повторюсь: атмел студия — это продукт, рассчитанный на разработку под Windows. Во-вторых, я не поленился и посмотрел, в системных требованиях указано 6 ГБ свободного места на диске, 6 ГБ КАРЛ. Это просто недопустимо.
По поводу плюшек — а какие плюшки Вас интересуют? Можно посмотреть стек вызовов, а также просматривать и модифицировать регистры и память, ставить и удалять брейкпойнты, вычислять выражения и всё то же самое, что обычно при отладке можно. Что ещё нужно?)
Я не ругаю, просто для себя пытаюсь разобраться и ставлю «плюсы-минусы» за тот или иной инструмент.
Когда начинал работать с stm32 использовал Eclipse. Потом пересел на IntelliJ IDEA.
А так наверное писать можно хоть в vim или notepad
IntelliJ IDEA — Это для мк? или имелось в виду Clion? Или просто пересели на Java?
IntelliJ IDEA — Это для мк? или имелось в виду Clion? Или просто пересели на Java?
именно Clion имелось виду.
для CLion есть плагин OpenOCD + STM32CubeMX support for ARM embedded development
Для меня такой вариант самый удобный.
{
"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,
}
}
]
}
К недостаткам плаигна на данный момент отнесу только то, что он переменные показывает только в десятичной форме.
Выглядет это странным и неудобным. Эмбед с десятичными значениями :).
В репах нет gdb-arm-none-eabi. Странно, есть пакеты gdb-avr, gdb-msp430, а под arm нет.
VSCode уже стоял, с Platformio для разработки под ESP32.
Добавил новый workspace, папку .vscode с вашими примерами. .svd взял из TrueStudio. А где настройки как собирать проект? У меня кнопки «Build» просто нет. Должны же быть где-то настройки как вызывать компилятор, путь к скрипту линкера и прочее.
Я понимаю, что у автора ubuntu 16.04, вопрос к тем, кто, возможно, настроил сборку и отладку в 18.10 или просто хорошо разбирается в настройках VSCode.
{
"version": "2.0.0",
"tasks":
[
{
"label": "Build",
"type": "shell",
"group": "build",
"command": "make build",
"problemMatcher": [
"$gcc"
]
}
]
}
Для убунты скорее всего надо только command подправить. Ну и соответственно в корне папки должен лежать мэйкфайл для сборки.
По поводу сборки — в начале я сказал, что у вас подразумевается наличие готового к сборке проекта. А в конце упомянул, что нужно не забыть его собрать. Цель статьи — показать связку именно для дебага.
$ 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
Там ничего собирать не надо, просто разархивировать куда удобно и в makefile путь до gcc указать.
А gdb, как подсказали выше, в пакете gdb-multiarch в репах есть.
Имеется следующий вопрос, как с отладкой в VisualCode+CortexDebug? Имеется ли возможность видеть участки памяти контроллера(как например в VisualGDB)?
Интересно, а кто-нибудь настраивал Visual Studio в качестве IDE под stm32? Я сейчас не про существующий платный плагин, а про конфиг json, как в статье. Я пробовал, но вышел какой-то затык на этапе конфигураций, а разбираться не было времени. Если кто напишет гайд, буду очень благодарен.
Всеравно для самоделок — детали платные денег стоят, процевворы тоже, изготовление плат в резоните тоже не бесплатно, корпус — тоже деньги.
Чтобы работал вывод printf в vscode, надо в .vscode/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. В простом случае это примерно так:
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 сбрасывать буфер.
Статья всё ещё не окончена за 3 года
Необходимо помимо демонстрации процесса отладки разобрать также и создание мейкфайла.
Интересно именно без привязки к кубу, так будет проще адаптировать проект к другим платам не от стм
В ubuntu и debian может также потребоваться заменить отладчик на gdb-multiarch в настройках
Настройка VSCODE под разработку для ARM на примере отладочной платы stm32f429i-disco