Ранее я уже писал про улучшения в предыдущих версиях 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».
- Добавлены новые архитектуры в компиляторы GCC, SDCC и IAR EW, основные сведения о которых приведены ниже в таблице:
Теперь эти новые компиляторы автоматически определяются на вкладке «Tools -> Options -> Kits -> Compilers -> Auto-detected».
Например, у меня это выглядит следующим образом:
В ОС Windows авто-определение компилятора GCC для архитектуры MSP430 не реализовано, т.к. данный набор предоставляется в виде простого архива, а не в виде инсталлятора.
Но никто не мешает добавить этот GCC компилятор (да и любой другой поддерживаемый) вручную, при этом, Qt Creator корректно определит ABI компилятора:
Примечание: И конечно же, у всех компиляторов будут автоматически определены директории с заголовками, пред-определенные макросы и прочее для корректной подсветки кода.
- По пожеланиям трудящихся была добавлена поддержка 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 будет неотъемлемой частью данного обзора, поэтому имеет смысл поговорить и об его улучшениях:
- Добавлена поддержка этих новых компиляторов и реализована возможность автоматического определения установленных компиляторов и создания профилей.
Свойство qbs.architecture имеет следующие значения:
Имя архитектуры Значение свойства STM8 stm8 MSP430 msp430
- Добавлена поддержка генераторов в проекты 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)
ramzes2
13.12.2019 23:57Подскажите, можно ли как-то в одном qbs-проекте настроить сборку под stm32 и одновременно сборку unit-тестов под intel x86? Я так и не придумал ничего, и unit-тесты живут в отдельном qbs-проекте.
Goron_Dekar
14.12.2019 10:02Можно, но только ручками правя файл. Это некрасиво. Проблема в том, что философия qbs подразумевает 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]
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
ramzes2
14.12.2019 17:12Хочу, чтобы Qt Creator при компиляции проекта под stm32 автоматически запускал проверку unit-тестов.
jaiprakash
14.12.2019 10:53А что с gcc-avr и gcc-arm?
kuzulis Автор
14.12.2019 15:13Это все там работает, это самое первое что работало, еще с незапамятных времен.
EddyEm
16.12.2019 22:24Долго сидел на geany, пока меня этот IDE своими глюками окончательно не достал. В прошлом году решил перелезть на другую IDE. Попробовал sublime — не то. А вот qtcreator понравился, особенно возможностями быстрых переходов к определению/реализации, шланговскому анализатору…
Но собираю как и раньше — все равно ведь нужно консолью пользоваться, так что просто пишу руками make, make flash и т.д. Зато один IDE абсолютно подо все: и под микроконтроллеры, и под PC, и под веб-морды (html, javascript и css).
armature_current
Так вроде qbs того...
ramzes2
Не совсем «того». Отдали разработку в open-source, и уже выложили как минимум один релиз после этого.
QtRoS
Зашёл сюда написать этот комментарий.
Странно, что сама контора забила на него, интересный был инструмент.
ABBAPOH
Так kuzulis и пилит=)
В целом, там есть несколько разработчиков, которые что-то потихоньку делают (в том числе, (бывший) основной разработчик из Qt Company), например, запиливают новые фичи