Обзор Возможностей Qt Creator 4.10 И Qbs 1.14 Для Программирования Микроконтроллеров

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

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

В этом выпуске Qt Creator интегрирована система сборки.

КБС 1.14 который также имеет новые улучшения.

Некоторые из этих улучшений будут обсуждаться ниже.



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

Все эти улучшения доступны только при включенном плагине BareMetal, который активируется через меню «Справка -> О плагинах -> Поддержка устройств -> BareMetal».

  1. Теперь поддерживаются три новых компилятора, основная информация о которых приведена в таблице ниже:
    Компилятор Поддерживаемые архитектуры
    МАР РЭБ АРМ, АВР, 8051 (MCS51)
    КЕЙЛ АРМ, 8051 (MCS51)
    СДКК 8051 (MCS51)
    Примечание.

    Стоит отметить, что продукты IAR EW и KEIL для разных архитектур предоставляются отдельными пакетами, которые необходимо устанавливать независимо.

    В отличие, скажем, от компилятора SDCC, который поддерживает сразу несколько архитектур.

  2. Теперь эти новые компиляторы автоматически обнаруживаются на вкладке «Инструменты -> Параметры -> Наборы -> Компиляторы -> Автоопределение».

    Например, для меня это выглядит так:

    Обзор возможностей Qt Creator 4.10 и QBS 1.14 для программирования микроконтроллеров

    Примечание.

    Как видите, компилятора KEIL для MCS51 для языка C++ нет, и это правильно, поскольку этот компилятор поддерживает только C. Компилятор SDCC здесь также будет отсутствовать по той же причине.

  3. Также можно вручную добавить эти новые компиляторы через меню «Инструменты -> Параметры -> Наборы -> Компиляторы -> Добавить»:

    Обзор возможностей Qt Creator 4.10 и QBS 1.14 для программирования микроконтроллеров

  4. Компилятор автоматически определит свой ABI (архитектуру, формат и ширину слова).

    Информацию об этом можно просмотреть, просто нажав на компилятор.

    Например, для IAR EW и архитектуры 8051 (MCS51) это выглядит так:

    Обзор возможностей Qt Creator 4.10 и QBS 1.14 для программирования микроконтроллеров

    Примечание.

    В этом случае выбранный компилятор был определен автоматически, поэтому поля ABI здесь неактивны.

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

  5. Все макросы компилятора будут определены автоматически.

    Таким образом, они будут правильно выделены в редакторе кода.

    Примечание.

    Исключение составляют только ключевые слова некоторых компиляторов (например, для архитектуры 8051), которые будут выделены предупреждением.

    Но это уже другая история.

  6. Каталоги с его заголовочными файлами будут определены компилятором автоматически.

    Таким образом, они будут правильно выделены в редакторе кода.

  7. Для этих новых компиляторов были реализованы анализаторы ошибок и предупреждений, которые отображаются на панели «Проблемы».



Улучшения в QBS

QBS станет неотъемлемой частью данного обзора, поэтому имеет смысл рассказать о его улучшениях:
  1. Добавлена поддержка этих новых компиляторов (некоторые из них начиная с версии 1.13).

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

    Для чего используется утилита? qbs-setup-toolchains .

    В моем случае это выглядит так:

      
      
      
       

    c:\Qt-meta\Tools\QtCreator\bin>qbs-setup-toolchains.exe --detect .

    Trying to detect IAR toolchains. Profile 'iar-arm' created for 'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3/arm/bin/iccarm.exe'.

    Profile 'iar-mcs51' created for 'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/8051/bin/icc8051.exe'.

    Profile 'iar-avr' created for 'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/avr/bin/iccavr.exe'.

    Trying to detect KEIL toolchains. Profile 'keil-mcs51' created for 'C:/Keil_v5/C51/BIN/c51.exe'.

    Profile 'keil-arm' created for 'C:/Keil_v5/ARM/ARMCC/bin/armcc.exe'.

    Trying to detect SDCC toolchains. No SDCC toolchains found. .



    Посмотреть, что там было найдено, можно с помощью графической утилиты qbs-config-ui .

    В моем случае это выглядит так:

    Обзор возможностей Qt Creator 4.10 и QBS 1.14 для программирования микроконтроллеров



Особенности создания проекта

Важно иметь представление и уметь правильно заполнять свойства проекта для модулей.

cpp И qbs .

Остановимся на наиболее важных из них и рассмотрим их подробнее:

  • qbs.toolchain — это свойство автоматически заполняется при формировании профиля для выбранного компилятора.

    В таблице ниже показаны возможные значения этого свойства:

    Название цепочки инструментов Стоимость имущества
    МАР РЭБ яр
    КЕЙЛ Кейл
    СДКК СДКК
  • qbs.architecture — это свойство автоматически заполняется при формировании профиля для выбранного компилятора.

    В таблице ниже показаны возможные значения этого свойства:

    Название архитектуры Стоимость имущества
    РУКА рука
    АВР авр
    8051 (MCS51) mcs51
  • cpp.cLanguageVersion - это свойство позволяет установить версию стандарта, используемого для язык С .

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

    Название цепочки инструментов Возможные варианты По умолчанию
    МАР РЭБ с89 Последняя версия в зависимости от версии набора инструментов.

    КЕЙЛ c99 (только ARM) Последняя версия в зависимости от версии набора инструментов.

    СДКК с89, с99, с11 Последняя версия в зависимости от версии набора инструментов.

    Примечание.

    Важно отметить, что инструментальные цепочки IAR EW и KEIL не предоставляют возможности выбора версии стандарта.

    По умолчанию они используют последнюю версию, реализованную в конкретной версии компилятора (либо c99, либо c11, нужно смотреть в примечаниях к выпуску компилятора).

    Обычно у вас есть возможность выбрать только более старую версию стандарта c89.

  • cpp.cxxLanguageVersion - это свойство позволяет установить версию стандарта, используемого для язык С++ .

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

    Название цепочки инструментов Возможные варианты По умолчанию
    МАР РЭБ Нет Последняя версия в зависимости от версии набора инструментов
    КЕЙЛ С++03, С++11 (только ARM) С++03 (только ARM)
    СДКК Не поддерживается Не поддерживается
  • cpp.entryPoint — это имя точки в программе, которая используется при связывании.

    Его необходимость определяется используемой средой выполнения.

    Например, если вы используете рантайм от IAR EW (т.е.

    связываетесь с его библиотеками и используете его скрипты компоновщика), то в этом случае имя точки будет «__program_start».

    Те.

    это полностью зависит от разработчика.

  • cpp.driverFlags Это общие флаги, которые будут переданы компилятору и ассемблеру.

    В некоторых случаях они также будут переданы линкеру (это зависит от типа тулчейна).

    Этими флагами могут быть флаги, указывающие тип процессора, сопроцессора и т. д. Например, для компилятора IAR EW для архитектуры AVR это могут быть:

    cpp.driverFlags: ["--cpu=can128", "-ms"]

  • cpp.driverLinkerFlags — это флаги, которые будут переданы компоновщику без изменений, в отличие от cpp.linkerFlags , который можно автоматически обернуть некоторыми ключевыми словами.

    Для компиляторов IAR EW и KEIL предпочтительно использовать cpp.driverLinkerFlags , поскольку эти компиляторы всегда используют для компоновки отдельный исполняемый файл компоновщика.

    Для компилятора SDCC предпочтительно использовать cpp.linkerFlags , т.к.

    команды этого компилятора чем-то похожи на компилятор GCC.

  • cpp.commonCompilerFlags — это общие флаги, которые будут переданы компиляторам C и C++.

    Например, для компилятора IAR EW это может быть флаг включения определенных расширений для этого компилятора:

    cpp.commonCompilerFlags: ["-e"]

  • cpp.cFlags — это флаги, которые будут переданы только компилятору C.
  • cpp.сxxFlags — это флаги, которые будут переданы только компилятору C++.

  • cpp.staticLibraries — это список библиотек, с которыми необходимо связать приложение.

    Я отмечаю, что cpp.dynamicLibraries не поддерживаются этими компиляторами (насколько мне известно), поэтому имеет смысл использовать только cpp.staticLibraries .

  • cpp.assemblerFlags — эти флаги будут переданы только ассемблеру.

Для указания файлов скриптов для компоновщика существует специальный тег linkerscript, который необходимо использовать, например:

Group { name: "Linker Scripts" fileTags: ["linkerscript"] files: ["cfg3soim.xcl", "cfgcan128.xcl"] }

Примечание.

Причина в том, что разные компиляторы имеют разные варианты именования этих файлов.

Для того же GCC это могут быть файлы с расширениями *.

ld, *.

x, *.

xn, *.

xbn и т.п.

(не говоря уже о других компиляторах.

).

Поэтому было решено не заморачиваться с разметкой всех возможных расширений файлов для конкретных компиляторов, а просто использовать тег «linkerscript» по назначению и ситуации.

Чтобы увидеть, как все это работает, QBS предоставляет набор простых Примеры , которые лишь «трясут» ногами и мигают светодиодом.



А как насчет отладки?

К сожалению, ситуация с отладкой плачевна.

Продукты (IDE) IAR EW и KEIL используют свои собственные отладчики, но потому.

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

Единственный вариант — попытаться провести реверс-инжиниринг плагинов для Eclipse (например, такие плагины предоставляет IAR EW), но для этого нужна серьёзная мотивация.

Но могу вас немного порадовать, если скажу, что для ARM-архитектуры можно использовать отладчик GDB. По крайней мере у меня это сработало для IAR EW (а вот с KEIL что-то не получилось, возможно нужно указать компоновщику какие-то дополнительные флаги).



Что дальше

Тут немного спойлерю, скажу, что в следующих версиях (не знаю каких) должны быть добавлены архитектуры STM8 и MSP430, а также в QBS будут реализованы генераторы в нативных проектах IAR EW и KEIL ( что позволит, например, отлаживать проекты).

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

Теги: #Программирование микроконтроллеров #Qt #qtcreator #baremetal #qbs

Вместе с данным постом часто просматривают: