Здравствуйте, коллеги-железопрограммисты и все, кто им сочувствует. Хотелось бы представить краткий обзор возможностей Qt Creator IDE в связке с системой сборки QBS в плане программирования микроконтроллеров.
Всех интересующихся данной темой добро пожаловать под кат. Буквально на днях тихо и незаметно вышел релиз Qt Создатель 4.10 , в котором добавлены некоторые улучшения для работы с микроконтроллерами (в просторечии — «голометаллическими» устройствами).
В этом выпуске Qt Creator интегрирована система сборки.
КБС 1.14 который также имеет новые улучшения.
Некоторые из этих улучшений будут обсуждаться ниже.
Улучшения в Qt Creator
Все эти улучшения доступны только при включенном плагине BareMetal, который активируется через меню «Справка -> О плагинах -> Поддержка устройств -> BareMetal».
- Теперь поддерживаются три новых компилятора, основная информация о которых приведена в таблице ниже:
Компилятор Поддерживаемые архитектуры МАР РЭБ АРМ, АВР, 8051 (MCS51) КЕЙЛ АРМ, 8051 (MCS51) СДКК 8051 (MCS51) Стоит отметить, что продукты IAR EW и KEIL для разных архитектур предоставляются отдельными пакетами, которые необходимо устанавливать независимо.
В отличие, скажем, от компилятора SDCC, который поддерживает сразу несколько архитектур.
- Теперь эти новые компиляторы автоматически обнаруживаются на вкладке «Инструменты -> Параметры -> Наборы -> Компиляторы -> Автоопределение».
Например, для меня это выглядит так:
Примечание.Как видите, компилятора KEIL для MCS51 для языка C++ нет, и это правильно, поскольку этот компилятор поддерживает только C. Компилятор SDCC здесь также будет отсутствовать по той же причине.
- Также можно вручную добавить эти новые компиляторы через меню «Инструменты -> Параметры -> Наборы -> Компиляторы -> Добавить»:
- Компилятор автоматически определит свой ABI (архитектуру, формат и ширину слова).
Информацию об этом можно просмотреть, просто нажав на компилятор.
Например, для IAR EW и архитектуры 8051 (MCS51) это выглядит так:
Примечание.В этом случае выбранный компилятор был определен автоматически, поэтому поля ABI здесь неактивны.
Но при добавлении компилятора вручную пользователь может выбрать правильный ABI, если он по каким-то причинам определился неправильно.
- Все макросы компилятора будут определены автоматически.
Таким образом, они будут правильно выделены в редакторе кода.
Примечание.
Исключение составляют только ключевые слова некоторых компиляторов (например, для архитектуры 8051), которые будут выделены предупреждением.
Но это уже другая история.
- Каталоги с его заголовочными файлами будут определены компилятором автоматически.
Таким образом, они будут правильно выделены в редакторе кода.
- Для этих новых компиляторов были реализованы анализаторы ошибок и предупреждений, которые отображаются на панели «Проблемы».
Улучшения в QBS
QBS станет неотъемлемой частью данного обзора, поэтому имеет смысл рассказать о его улучшениях:- Добавлена поддержка этих новых компиляторов (некоторые из них начиная с версии 1.13).
- Реализована возможность автоматического определения установленных компиляторов и создания профилей.
Для чего используется утилита? 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.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 — эти флаги будут переданы только ассемблеру.
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
-
Ликург
19 Oct, 24 -
Постановка Задачи Обратной Совместимости
19 Oct, 24 -
Java: Делаем Валгаллу Сами
19 Oct, 24 -
Тоже Ляп На Производстве? Почему Нет
19 Oct, 24 -
Звезд Youtube Пригласили Для Рекламы
19 Oct, 24