Всем привет!


Сегодня рассмотрим настройку удобной и красивой среды разработки для программиста микроконтроллеров с помощью набора полностью бесплатных инструментов разработки.


Все шаги проверены на виртуальной машине со свежеустановленной 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).
Ищем и устанавливаем следующие плагины:


  1. Cortex-Debug от автора marus25.
  2. С/С++ от 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)


  1. Punk_Joker
    28.01.2019 10:11
    +1

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


    1. GREGOR_812 Автор
      28.01.2019 10:19

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


      1. ukt
        28.01.2019 11:21
        -1

        Эклипс пробовали?
        Чем студия из статьи лучше?


        1. GREGOR_812 Автор
          28.01.2019 12:00
          +3

          Ну хотя бы тем, что не требует java. А вообще, это не сравнительная статья, а гайд по настройке vscode.


          1. geisha
            28.01.2019 18:12
            -1

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


            1. GREGOR_812 Автор
              28.01.2019 18:47
              +2

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


  1. zompin
    28.01.2019 11:36

    А вы не пробовали PlatformIO? Вполне годная штука ставиться как дополнение к VScode.


    1. GREGOR_812 Автор
      28.01.2019 12:02

      Не пробовал, но встречал упоминания про неё. Если не трудно, расскажите вкратце, что даёт этот плагин?


      1. zompin
        28.01.2019 12:07

        Насколько помню он позиционирует себя как IDE для разработки IOT. Я программировал esp8266. Можно выбрать фреймворк если поддерживается несколько. Я выбирал Ардуино. Но с убогой Arduino IDE это не связано.


    1. NordicEnergy
      28.01.2019 12:40
      +3

      Это лютый кусок гуано для ардуинщиков, даже смысла нет сравнивать с обычным cmsis.


      1. xman
        28.01.2019 20:39

        Какое отношение имеет PlatformIO к Arduino? => https://platformio.org/frameworks


        1. McHummer1
          28.01.2019 23:31

          Идеологическое


          1. xman
            29.01.2019 00:07

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


    1. roboter
      28.01.2019 14:16

      К сожалению дебаг там платный.


      1. GREGOR_812 Автор
        28.01.2019 14:50
        +1

        ч.т.д.) хорошо, что я не повёлся


      1. xman
        28.01.2019 20:43
        -1

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


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


  1. Grym
    28.01.2019 11:50
    -3

    Еще очень хорошая IDE для разработки под микроконтроллеры Atmel Studio


    1. GREGOR_812 Автор
      28.01.2019 12:11
      +1

      Расскажите, в чём её достоинства? Какие контроллеры в ней поддерживаются?


      1. Grym
        28.01.2019 13:04
        -3

        По сути это разработка компании под 8 и 32 битные микроконтроллеры семейства ARM от компании Atmel. Поддерживает языки c/c++ и асемблер. Впринципе краткое описание описывающее достоинства и недостатки, можно посмотреть в интернете — все описывать не вижу смысла, информация вся в свободном доступе
        Опять же, первый раз познакомился с ней в студенческие годы, когда интересовался микротехникой, а конкретно «препарировал» микропроцессор Atmega128


        1. GREGOR_812 Автор
          28.01.2019 13:28

          А к чему Вы тогда написали вообще про атмел студию? Судя по Вашему сообщению, она поддерживает только МК производства Microchip (теперь уже), работает, вероятно, только под Windows, весит пару гигов.
          При том что в своей статье я написал как настроить универсальное окружение для любых арм контроллеров (STM32 там лишь для примера), которое не будет отъедать место на диске и требовать какую-то определённую операционную систему/виртуальную машину типа .net или java


          1. Grym
            28.01.2019 13:48
            -1

            Не нашел в вашей статье кроме фразы

            Все настройки, касающиеся конкретного железа (в моём случае это контроллер STM32F429 и девборда STM32F429DISCO), нужно подменить на свои. То же самое касается и путей.
            что это универсальное решение для любых семейств контроллеров…
            Не всегда универсальной инструмент удобен в работе под что-то определенное, поэтому в качестве доп. информации привел Atmel Studio под семейство ARM…


            1. GREGOR_812 Автор
              28.01.2019 14:55

              Я и не спорю с тем, что если есть хорошее решение для конкретных МК, то можно его использовать. Тем более если там из коробки по хоткеям можно найти описание регистров и периферии, открыть дш или рм или другие доки, есть шаблоны проектов и т.д.
              Но, во-первых, ещё раз повторюсь: атмел студия — это продукт, рассчитанный на разработку под Windows. Во-вторых, я не поленился и посмотрел, в системных требованиях указано 6 ГБ свободного места на диске, 6 ГБ КАРЛ. Это просто недопустимо.


          1. Gryphon88
            28.01.2019 15:44
            +1

            Она ещё и с Visual Studio конфликтует, квест «поставь и заставь работать студии от Атмел и Микрософт (2017 & 2013)» меня в своё время затянул почти на 3 дня. Но симулятор для 8битных МК в Atmel Studio очень удобный, и ASF штука для быстрой разработки полезная.


            1. Polaris99
              28.01.2019 16:14
              +1

              У нас на работе нет доступа к Инету, так эта студия регулярно отказывается видеть свои же отладочные инструменты (Atmel-ICE). В системе они видны, драйвера стоят, но студия их в упор не видит, причину выяснить так и не удалось. Сначала не хватало каких-то сертификатов, потом, после апдейта, снова ослепла, и привести ее в чувство уже не удалось. Зачем мне инструмент, который постоянно пытается что-то подкачать? А уж переход на ASF4 — это вообще песня, снова только в инете, половина функционала там не реализована, а код из него выходит такой, что плюнул, переписал все сам и сократил объем прощивки в три раза.


  1. NEOndertalets
    28.01.2019 12:02

    Собираюсь освоить STM32, как раз выбирают инструментарий. Что нового и уникального даст использование VSCode? В чем это круче или удобнее остальных инструментов? Какие плюшки в отладке появляются?


    1. GREGOR_812 Автор
      28.01.2019 12:06
      +1

      Лично для меня, плюсы vscode — это привычный интерфейс после Visual Studio, легковесность самого редактора по сравнению с большими IDE, отсутствие привязки к java или .net инфраструктуре, обилие плагинов, которые легко устанавливать и конфигурировать.
      По поводу плюшек — а какие плюшки Вас интересуют? Можно посмотреть стек вызовов, а также просматривать и модифицировать регистры и память, ставить и удалять брейкпойнты, вычислять выражения и всё то же самое, что обычно при отладке можно. Что ещё нужно?)


    1. GREGOR_812 Автор
      28.01.2019 14:57

      Хотел бы поинтересоваться, вопрос «что нового и уникального» по сравнению с чем подразумевался?


      1. NEOndertalets
        28.01.2019 17:16

        Да пока ни с чем конкретным, только читаю и выбираю. Вот и хотел узнать, что уникального дает VSCode+STM32? Характерного и неповторимого ни в одной другой среде. Может быть только «вкусовщина» или действительно уникальные особенности.
        Я не ругаю, просто для себя пытаюсь разобраться и ставлю «плюсы-минусы» за тот или иной инструмент.


  1. slonegd
    28.01.2019 13:14

    А где брать svd файл? У меня всё работает, но в зоне cortex peripherial написано no svd file loaded. Списка поддерживаемых контроллеров тоже не нашел.


    1. GREGOR_812 Автор
      28.01.2019 13:15

      svd файлы нужно искать на сайте производителя. Список контроллеров — тот же самый, что и у openocd.


  1. strongmonkey
    28.01.2019 16:58

    Полезная статья.
    Когда начинал работать с stm32 использовал Eclipse. Потом пересел на IntelliJ IDEA.
    А так наверное писать можно хоть в vim или notepad


    1. ukt
      28.01.2019 18:03

      Эклипс жручая по памяти, если под виндой, то можно кейл пользовать, у него 32кб ограничение для личных целей.
      IntelliJ IDEA — Это для мк? или имелось в виду Clion? Или просто пересели на Java?


      1. Polaris99
        28.01.2019 18:48

        Не только жручая, но и глючная. Еще неудобный поиск, неудобная организация проекта, неудобное автодополнение.


        1. hoary
          28.01.2019 22:49

          Добро пожаловать в embedded.


        1. Punk_Joker
          30.01.2019 00:25

          Я работал только с Keil и Eclipse. И второе как IDE получше будет. Есть шансы, что JetBrains в этом году выкатит что-то для Embedded.


      1. strongmonkey
        28.01.2019 19:10

        IntelliJ IDEA — Это для мк? или имелось в виду Clion? Или просто пересели на Java?

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


  1. 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,
                }
            }
        ]
    }

    К недостаткам плаигна на данный момент отнесу только то, что он переменные показывает только в десятичной форме.
    Выглядет это странным и неудобным. Эмбед с десятичными значениями :).


  1. 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.


    1. 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"
                  ]
              }
          ]
      }
      


    1. GREGOR_812 Автор
      29.01.2019 02:42

      На новой Ubuntu нужно ставить другой gdb: gdb-multiarch или как-то так. Я не обновляю пока что ОС, поэтому не могу ничего сказать больше.
      По поводу сборки — в начале я сказал, что у вас подразумевается наличие готового к сборке проекта. А в конце упомянул, что нужно не забыть его собрать. Цель статьи — показать связку именно для дебага.


  1. Orange_hanter
    28.01.2019 22:31

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


    1. pmaxim25
      29.01.2019 01:38

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


  1. pmaxim25
    28.01.2019 22:31

    А просмотров регистров работает? Ибо в J-Link их не обновляет: github.com/Marus/cortex-debug/issues/70#issuecomment-455786964


  1. 8street
    29.01.2019 09:05

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


    1. NordicEnergy
      29.01.2019 13:15
      +1

      Гайд на что? Подключение gcc и установка openOCD? Если у разработчика это вызывает проблемы, то ему или на кейл, или плагин за 60 евро, или в домохозяйки.


    1. catBasilio
      29.01.2019 15:57
      -1

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


      1. GREGOR_812 Автор
        29.01.2019 15:58

        Вот именно, мало того, что тратишь деньги на покупку железа, так за эти деньги нет нормального сервиса для разработки, плати ещё бабки за плагины или убогие IDE.


      1. 8street
        29.01.2019 16:02
        +1

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


      1. NordicEnergy
        29.01.2019 23:25

        Если быть точным 60 евро и 30, если ты студент или есть открытый проект на гитхабе. По моему даже для хобби очень адекватный вариант, хотя к сожалению плагины отбивают у разработчика желание разбираться с процессом сборки и компиляции, что считаю не есть хорошо.