Здравствуйте, товарищи программисты «железячники» и все кто им сочувствует. Я хотел бы продолжить обзор возможностей IDE Qt Creator в связке с системой сборки QBS в части программирования микроконтроллеров.

Ранее я уже писал про улучшения в предыдущих версиях QtC 4.10 и QBS 1.14.

Кому эта тема интересна, добро пожаловать по кат.

Буквально на днях, тихо и незаметно, вышел релиз Qt Creator 4.11, в котором добавлены некоторые улучшения для работы с микроконтроллерами (в простонародье — «baremetal» устройствами). В этот релиз Qt Creator интегрирована сборочная система QBS 1.15 в которой также есть новые улучшения (ее еще не зарелизили).

Улучшения в Qt Creator


Все эти улучшения доступны только при включенном плагине BareMetal, который активируется через меню «Help -> About Plugins -> Device Support -> BareMetal».

  1. Добавлены новые архитектуры в компиляторы GCC, SDCC и IAR EW, основные сведения о которых приведены ниже в таблице:
    Компилятор Поддерживаемые архитектуры
    IAR EW STM8, MSP430
    GCC MSP430
    SDCC STM8

    Теперь эти новые компиляторы автоматически определяются на вкладке «Tools -> Options -> Kits -> Compilers -> Auto-detected».

    Например, у меня это выглядит следующим образом:



    В ОС Windows авто-определение компилятора GCC для архитектуры MSP430 не реализовано, т.к. данный набор предоставляется в виде простого архива, а не в виде инсталлятора.

    Но никто не мешает добавить этот GCC компилятор (да и любой другой поддерживаемый) вручную, при этом, Qt Creator корректно определит ABI компилятора:



    Примечание: И конечно же, у всех компиляторов будут автоматически определены директории с заголовками, пред-определенные макросы и прочее для корректной подсветки кода.

  2. По пожеланиям трудящихся была добавлена поддержка SVD файлов описания регистров периферии микроконтроллеров.

    Примечание: Как я знаю, эта возможность доступна только для ARM-ов (хотя, могу ошибаться) и пока что носит экспериментальный характер.

    Для использования этой возможности необходимо сначала в настройках устройства «Tools->Options->Devices->YourDevice» в поле «Peripheral description file» выбрать нужный SVD файл, соответствующий целевому микроконтроллеру:



    Примечание: Эти файлы можно скачать как с сайта ARM, так и взять из директорий с установленными продуктами Keil MDK или IAR EW.

    Далее, после запуска отладки нужно в меню «Window->Views» выбрать «Peripheral Registers». После чего откроется панель «Peripheral Registers» (аналогичная панели «Registers») в которой по клику правой клавиши мыши вызовется меню с перечнем групп регистров, которые необходимо отобразить:



    Выбираем любую группу (например RCC) и, получаем список всех регистров из данной группы с их подробным описанием и значениями, которые можно читать/писать:



    Примечание: На данный момент реализовано отображение регистров только одной любой выбранной группы.

Улучшения в QBS


QBS будет неотъемлемой частью данного обзора, поэтому имеет смысл поговорить и об его улучшениях:

  1. Добавлена поддержка этих новых компиляторов и реализована возможность автоматического определения установленных компиляторов и создания профилей.

    Свойство qbs.architecture имеет следующие значения:

    Имя архитектуры Значение свойства
    STM8 stm8
    MSP430 msp430

  2. Добавлена поддержка генераторов в проекты Keil MDK и IAR EW для следующих архитектур и версий:

    IDE Архитектура Генератор
    KEIL uVision 5.23 ARM keiluv5
    KEIL uVision 5.23 MCS51 keiluv5
    IAR EW 8.40.1 ARM iarew8
    IAR EW 3.11.1 STM8 iarew3
    IAR EW 10.10.1 MCS51 iarew10
    IAR EW 7.12.4 MSP430 iarew7
    IAR EW 7.20.1 AVR iarew7

    Примечание: В таблице выше представлены версии продуктов с которыми шла разработка генераторов и более-менее проверялась работоспособность.

    Таким образом, теперь можно этими генераторами создать нативный проект для желаемой целевой IDE. При этом, каждый генератор будет преобразовывать все компилятор-специфические флаги, пути, зависимоси, заданные в QBS проекте в соответствующие настройки целевого IDE проекта.

    Если исходный QBS проект содержал несколько продуктов (например, приложения, библиотеки и пр.), то генератор создаст целевой «workspace» с вложенными под-проектами «project» для каждого целевого IDE.

    Примечание: Сразу оговорюсь, что, как я знаю, IDE от KEIL или IAR EW не поддерживают отслеживание зависимостей (если я не прав — поправьте). Поэтому, например, если проект содержит приложение и зависимость в виде библиотеки, то пользователю нужно будет сначала собрать библиотеку, а потом уже само приложение.

    Для генерации проектов необходимо иметь уже настроенные профили QBS с соответствующими компиляторами.

    Примечание: Пока что без профилей не обойтись, т.к. генератор из профиля получает саму архитектуру, пути к пред-установленному компилятору (IDE) и прочее. Эти данные нужны для корректного поиска скриптов линковщика, путей к runtime библиотекам и прочих специфических вещей (там не простая логика).

    Например, чтобы создать целевой проект для IAR EW и ARM микроконтроллера, достаточно выполнить следующую команду:

    qbs generate -g iarew8 -d <path/to/build/directory> -f <path/to/qbs/project/file> profile:<your/qbs/profile/for/arm>
    

    Имена профилей можно получить используя, к примеру, GUI утилиту qbs-config-ui (или использовать консольный вариант).

    Примечание: На данный момент, генераторы имеют экспериментальный статус. Возможно, в некоторых случаях (если исходный проект сложный) они будут генерировать некорректные целевые файлы проектов, или пропускать некоторые флаги и прочее. Сильно не ругайте, а создавайте баг-репорты в QBS трекере.

Текущий статус поддержки компиляторов можно посмотреть здесь, а текущий статус интеграции генераторов — здесь.

Чтобы посмотреть как это все работает, QBS предоставляет набор простейших примеров.

Что дальше


В следующих версиях планируется добавить архитектуры от Renesas и генераторы в IAR EW для этих архитектур (не знаю, успеется ли). А также, если очень повезет, то в Qt Creator будет интегрирован отладчик от Keil uVision.

На этой ноте я заканчиваю свое повествование, всем спасибо, кто уделит внимание этому обзору.

Комментарии (14)


  1. armature_current
    13.12.2019 20:19

    Так вроде qbs того...


    1. ramzes2
      13.12.2019 23:53

      Не совсем «того». Отдали разработку в open-source, и уже выложили как минимум один релиз после этого.


    1. QtRoS
      14.12.2019 14:28

      Зашёл сюда написать этот комментарий.
      Странно, что сама контора забила на него, интересный был инструмент.


    1. ABBAPOH
      16.12.2019 01:01

      Так kuzulis и пилит=)

      В целом, там есть несколько разработчиков, которые что-то потихоньку делают (в том числе, (бывший) основной разработчик из Qt Company), например, запиливают новые фичи


  1. mcu_by
    13.12.2019 22:32

    Круто, как всегда! Респект.


  1. ramzes2
    13.12.2019 23:57

    Подскажите, можно ли как-то в одном qbs-проекте настроить сборку под stm32 и одновременно сборку unit-тестов под intel x86? Я так и не придумал ничего, и unit-тесты живут в отдельном qbs-проекте.


    1. Goron_Dekar
      14.12.2019 10:02

      Можно, но только ручками правя файл. Это некрасиво. Проблема в том, что философия qbs подразумевает 1 тулчейн.
      А, собственно, зачем? Попробуйте освоить тестирование через отладчик, это более нативный вид тестирования в МК. В отладчике можно использовать скрипты, которые будут заниматься инжектированием в память МК нужных состояни и проверять корректность реакций.


      1. ABBAPOH
        16.12.2019 00:48

        Проблема в том, что философия qbs подразумевает 1 тулчейн.


        Это не совсем так, философия в том, чтобы всё автодетектить, в частности, можно в одном проекте собирать под macOS и iOS одновременно. Проблема в том, что cpp модули весьма сильно прибиты гвоздями (так как писались еще на заре проекта) и не переведены, например, на module providers.
        Но можно попробовать указать профиль для продукта явно и посмотреть, что получится:
        qbs.profile: "my-stm32-profile-name"
        В частности, в автотестах есть такой код
        qbs.profiles: isBlubbOS ? ["blubb-profile"] : [project.profile]


    1. jaiprakash
      14.12.2019 10:51

      Тоже тесты в отдельном проекте, не думал что это как-то неправильно.


    1. kuzulis Автор
      14.12.2019 15:19

      Не совсем понял проблему. Кто мешает выполнить сборку последовательно под разные профили?

      qbs build profile:stm32
      qbs build profile:x86
      


      Или же можно собрать все сразу под несколько профилей:

      $ qbs build -f foobar.qbs debug-gcc profile:gcc debug-clang profile:clang
      


      1. ramzes2
        14.12.2019 17:12

        Хочу, чтобы Qt Creator при компиляции проекта под stm32 автоматически запускал проверку unit-тестов.


  1. jaiprakash
    14.12.2019 10:53

    А что с gcc-avr и gcc-arm?


    1. kuzulis Автор
      14.12.2019 15:13

      Это все там работает, это самое первое что работало, еще с незапамятных времен.


  1. EddyEm
    16.12.2019 22:24

    Долго сидел на geany, пока меня этот IDE своими глюками окончательно не достал. В прошлом году решил перелезть на другую IDE. Попробовал sublime — не то. А вот qtcreator понравился, особенно возможностями быстрых переходов к определению/реализации, шланговскому анализатору…
    Но собираю как и раньше — все равно ведь нужно консолью пользоваться, так что просто пишу руками make, make flash и т.д. Зато один IDE абсолютно подо все: и под микроконтроллеры, и под PC, и под веб-морды (html, javascript и css).