Visual Studio Code — написание и отладка прошивок для ARM Cortex-M

Давно хотел это опробовать, да руки не доходили. Наконец-то освободился и решил это освоить — превращение Visual Studio Code в IDE для написания и отладки прошивок под микроконтроллеры, и как первые ласточки опробованы Wi-Fi SoC RTL8195AM и Cortex-M4 STM32F407VGT6. Пример-описание в статье будет для STM32F407VGT6.

B83-0

Подготовка Visual Studio Code

Для примера используется Visual Studio Code v1.33.1, на старых версиях могут быть небольшие отличия в плане конфигурационных json файлов.

Предполагается, что у вас уже установлена или есть портативная версия Visual Studio Code. Для работы с C\C++ и отладчиком Cortex-M нам потребуются следующие расширения:

Установить их можно прямо в VS Code, поиском по имени в окне расширений:

B83-1

Настраивать особо там ничего не требуется.

Установка тулчейна, драйверов отладчика

Ставим драйвера на J-Link — тут совсем ничего сложного, скачать их можно тут — J-Link Software and Documentation Pack.

Далее нам потребуются инструменты, которыми мы будем собирать и заливать прошивку. Cкачиваем официальный тулчейн GNU Arm Embedded Toolchain версии x32 или лучше GNU MCU Eclipse ARM Embedded GCC x64 версию, т. к. в официальной последней х32 я столкнулся с багом objcopy.exe в GNU Arm Embedded Toolchain, который выглядит во время сборки проекта вот так (более подробно по ссылке выше):

B83-2

Также скачиваем GNU MCU Eclipse Windows Build Tools — это инструменты для сборки, Windows порт. Далее распаковываем тулчейн и инструменты в 2 разные папки, без кириллицы в пути (в идеале без длинного пути и без пробелов). Теперь прописываем их в пользовательский Path (можно и в глобальный):

B83-3

У меня это выглядит вот так:

B83-4

Как можно видеть выше, у меня прописаны пути аж к Visual Studio тулчейну\инструментам (чтобы не делать две копии на ПК), и я могу тем самым делать проекты как в большой и могучей Visual Studio, так и в сторонних приложениях (как мы сейчас разбираем, Visual Studio Code). Да, GNU MCU Eclipse ARM Embedded GCC я просто распаковал взамен стокового (очень старого) тулчейна, устанавливаемого с Visual Studio.

Пути, которые я добавил (у вас будут явно другие, просто пример, до каких папок необходимо указывать):

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Linux\gcc_arm\bin

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Linux\GNU MCU Eclipse\Build Tools\2.11-20180428-1604\bin

C:\Data\JLink_V640

Тестовый проект

В качестве тестового проекта возьмем любимый всеми STM32CubeMX и сгенерируем в нём для старючей STM32F4DISCOVERY (просто она есть под рукой) минимальный проект, чтобы не собирать исходники и не писать самому makefile (предполагается, что вы уже знаете уже, как это делается). В проекте задействуем кнопку и светодиоды:

B83-5

Не забываем выбрать тип проекта/IDE — Makefile:

B83-6

Подготовка проекта и компиляция

Теперь осталось немного подготовить проект к работе в VS Code. Я не буду подробно описывать, что и как, пример проекта, уже готового к работе в VS Code, лежит здесь — STM32F407_VSC_Example.

B83-7

Вкратце же изменения и дополнения следующие:

  • В корне проекта появилась папка JLink (название и расположение может быть любое другое, не принципиально) со скриптами для записи, чтения и затирания прошивки, а также тут лежит SVD-файл, описывающий всю периферию в микроконтроллере;
  • В корне проекта появилась папка .vscode (название и расположение важны!), тут хранятся все настройки и задачи для VS Code, минимальное необходимое содержание следующее:
    • Файл c_cpp_properties.json — тут определяются директории, которые будет сканировать IntelliSense, путь к компилятору для него, а также все объявления в проекте (дублируются из makefile);
    • Файл launch.json — это файл конфигурации для отладчика, здесь описывается, откуда и чего брать и как подключаться;
    • Файл settings.json — это дополнительный файл конфигурации для отладчика, здесь прописываем полный путь к GDB серверу (без полного пути отладка не запускалась, какой-то баг в расширении);
    • Файл tasks.json — описание всех задач, компиляция, прошивка, сброс и, как дополнительный пример, запуск GDB-сервера дополнительным окном.

Все объявленные задачи можно посмотреть здесь:

B83-11

B83-12

Удобно, кстати, назначить задачи на горячие клавиши.

Приводить здесь код из файлов не вижу смысла (и еще wordpress часто коробит код в вставках, уже надоело бороться с этими приколами…), поэтому переходите по ссылкам и изучайте, копируйте, что нужно. :)

Да, разве что небольшой нюанс касательно makefile, который генерирует STM32CubeMX. Если его не править, то при сборке в терминал будет выводиться только следующее:

B83-8

А во время сборки вообще ничего не выводится, т. е. непонятно, что в данный момент делается и какой файл компилируется. Подправить это легко, заходим в makefile и добавляем 2 строчки:

B83-9

Строки 162 и 166, результат:

B83-10

Отладка

Ну и последнее, самое простое (если всё настройки верны и пути к файлам указаны верно) — запуск отладчика (предварительно необходимо прошить микроконтроллер актуальной версией прошивки, которую хотите отлаживать):

B83-13

После нажатия на кнопку и ожидания 2-5 секунд отладчик будет готов к работе и покажет текущее местоположение выполняемого шага, на котором зафризился микроконтроллер при подключении к нему отладчика.

Для примера пара гифок. Добавляем в watch переменную:

B83-14

Смотрим и изменяем значения регистров напрямую (необходим SVD-файл):

B83-15

На этом всё, спасибо, что прочитали! Удачного кодинга. ;)

Ссылки

Реклама

Добавить комментарий

Please log in using one of these methods to post your comment:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s