Отладка VSCode ARM Cortex-M

Материал из ВИКИЦМИТ
Перейти к навигации Перейти к поиску
Источник: https://higaski.at/vscode-arm-cortex-m-debugging/

Если вы разработчик встраиваемых систем, работающий с микроконтроллерами ARM Cortex-M, вы, скорее всего, знакомы с IDE на основе Eclipse. Обилие вкусов просто поражает. Существует собственная ARM DS-5 Development Studio , Atollics Truestudio , STMs System Workbench , NXPs MCUXpress или варианты на основе плагинов, такие как GNU MCU Eclipse.и, вероятно, многие другие, о которых я даже не думал. На протяжении многих лет большинство из них предлагало более или менее одинаковый опыт, имея почти те же функции, за исключением, возможно, пары специальностей (например, поддержки трассировки). Все они прошли долгий путь с тех пор, как я впервые использовал GNU MCU (ранее GNU ARM) в 2011 году. Настройка проектов и правильное соединение для отладки никогда не было таким простым и простым делом, как сегодня. Все эти IDE поддерживают несколько адаптеров отладки (ST-Link, J-Link, использование OpenOCD и т. Д.), Специальные функции-регистры и представления памяти, перенаправление вывода отладчика в той или иной форме (например, через полухостинг или SWO) и т. Д. и так далее. Так зачем вообще возиться с VSCode?

Что ж ... единственное, что мне действительно не нравится в Eclipse, - это написание кода в нем. Большую часть прошлого года я провел с отключенным индексатором, потому что он постоянно давал мне сбой. Без индексатора просмотр вашего кода становится кошмаром. Вы практически ничего не можете найти. Вы не можете переходить к объявлениям или определениям, не можете просматривать константы или макросы расходов. Вы постоянно чувствуете себя потерянным в своей собственной кодовой базе. Также текущее состояние синтаксического анализа C ++ находится где-то между ошибками и отсутствием. Все, от операторов инициализации в предложениях if до разделителей в числах, казалось, сбивало с толку анализатор ...

С VSCode вам не придется мириться с этим дерьмом. Практически все работает из коробки, а то, что немного не работает, просто настраивается в файле JSON. На самом деле JSON везде в VSCode. Конфигурация рабочего пространства? JSON. Конфигурация проекта? JSON. Конфигурация отладки? JSON. Компиляция? JSON. Есть еще какая-нибудь задача? JSON.

Кстати об отладочных конфигурациях… Видимо, не только я был убежден в простоте VSCode и хотел работать исключительно в нем. Вероятно, поэтому Марсель Болл создал расширение под названием Cortex-Debug . Cortex-Debug - это во многом то же самое, что GNU MCU для Eclipse. Это позволяет нам отлаживать контроллеры Cortex-M из VSCode. Расширение можно установить с торговой площадки. [[Файл:http://higaski.at/wordpress/wp-content/uploads/2018/10/vscode_cortex_debug_extension_install.png]


Cortex-Debug в настоящее время предлагает поддержку J-Link, OpenOCD, ST-Util, PyOCD и Black Magic Probe. Лично я использую SEGGER J-Link, поэтому я покажу это и здесь, но если вас интересуют другие конфигурации запуска, посетите страницу Marcel Balls .

Заставить Cortex-Debug работать очень просто. Сначала мне пришлось добавить путь к серверу J-Links GDB в настройки моей рабочей области.

"cortex-debug.JLinkGDBServerPath": "/opt/SEGGER/JLink/JLinkGDBServerCLExe"

После этого я добавил конфигурацию Cortex-Debug J-Link, которую немного расширил, чтобы удовлетворить свои потребности. Помимо очевидной исполняемой опции, обязательно указать тип интерфейса (JTAG или SWD) и устройство. В моем случае я хотел использовать SWD и процессор STM32L431VC. Cortex-Debug уже поставляется с множеством поддерживаемых устройств и связанным с ними описанием SVD, но в случае, если вы обнаружите, что ваш процессор не поддерживается, вы все равно можете вручную добавить путь к какому-либо файлу SVD.

Поскольку мое приложение не запускается в начале флэш-памяти, я также добавил пару «команд перед запуском», которые загружают загрузчик перед основным приложением. Независимо от того, нужны ли вам дополнительные команды или нет, приятно знать, что Cortex-Debug поддерживает такие вещи. Другой удобный параметр - runToMain, который может автоматически добавлять точку останова в main и останавливать там отладчик после завершения загрузки приложения.

{
"version": "0.2.0",
"configurations": [
{
    "name": "Release",
    "cwd": "${workspaceRoot}",
    "executable": "./build/release/release.elf",
    "request": "launch",
    "type": "cortex-debug",
    "servertype": "jlink",
    "interface": "swd",
    "device": "STM32L431VC",
    "runToMain": true,
    "preRestartCommands": [
    "file ./bootloader.elf",
    "load",
    "add-symbol-file ./build/release/release.elf 0x08002030",
    "enable breakpoint",
    "monitor reset"
] }
]
}

Теперь вы можете просто начать сеанс отладки, запустив конфигурацию. Помимо обычных переменных и окна просмотра, Cortex-Debug добавляет вид регистров и, если вы указали устройство и / или файл SVD, даже периферийное представление.

http://higaski.at/wordpress/wp-content/uploads/2018/10/vscode_cortex_debug_extension_breakpoint.png