Übersicht über die Programmierfunktionen von Qt Creator 4.10 und QBS 1.14 Microcontroller

Hallo, Programmierkollegen, Hardware und alle, die mit ihnen sympathisieren. Ich möchte einen kurzen Überblick über die Funktionen der Qt Creator IDE in Verbindung mit dem QBS-Build-System in Bezug auf die Mikrocontroller-Programmierung geben. Für wen dieses Thema interessant ist, willkommen bei cat.

Erst neulich wurde leise und unmerklich die Version Qt Creator 4.10 veröffentlicht, die einige Verbesserungen für die Arbeit mit Mikrocontrollern hinzufügte (bei gewöhnlichen Menschen - „Baremetal“ -Geräte). Diese Version von Qt Creator integriert das Build- System QBS 1.14 , das auch neue Verbesserungen aufweist. Einige dieser Verbesserungen werden unten diskutiert.

Verbesserungen in Qt Creator


Alle diese Verbesserungen sind nur verfügbar, wenn das BareMetal-Plugin aktiviert ist, das über das Menü "Hilfe -> Über Plugins -> Geräteunterstützung -> BareMetal" aktiviert wird.

  1. Es werden jetzt drei neue Compiler unterstützt, deren grundlegende Informationen in der folgenden Tabelle aufgeführt sind:
    CompilerUnterstützte Architekturen
    IAR EWARM, AVR, 8051 (MCS51)
    KeilARM, 8051 (MCS51)
    SDCC8051 (MCS51)

    Hinweis: Es ist zu beachten, dass die Produkte von IAR EW und KEIL für verschiedene Architekturen von separaten Paketen bereitgestellt werden, die unabhängig voneinander installiert werden müssen. Im Unterschied zum SDCC-Compiler, der mehrere Architekturen gleichzeitig unterstützt.
  2. Jetzt werden diese neuen Compiler automatisch auf der Registerkarte "Extras -> Optionen -> Kits -> Compiler -> Automatisch erkannt" erkannt.

    Zum Beispiel sieht es für mich so aus:



    Hinweis: Wie Sie sehen können, gibt es für C ++ keinen KEIL-Compiler für MCS51, was richtig ist, weil Dieser Compiler unterstützt nur C. Aus dem gleichen Grund fehlt hier auch der SDCC-Compiler.
  3. Es ist auch möglich, diese neuen Compiler manuell über das Menü "Extras -> Optionen -> Kits -> Compiler -> Hinzufügen" hinzuzufügen:


  4. Für den Compiler wird sein ABI (Architektur, Format und Wortbreite) automatisch bestimmt. Informationen dazu können einfach durch Klicken auf den Compiler eingesehen werden.

    Für meine IAR EW und Architektur 8051 (MCS51) sieht es beispielsweise so aus:



    Hinweis: In diesem Fall wurde ein Compiler ausgewählt, der automatisch erkannt wurde, sodass die ABI-Felder hier inaktiv sind. Beim manuellen Hinzufügen des Compilers kann der Benutzer jedoch den richtigen ABI auswählen, wenn dieser aus irgendeinem Grund falsch ermittelt wurde.
  5. Für den Compiler werden alle seine Makros automatisch erkannt. Daher werden sie im Code-Editor korrekt hervorgehoben.

    Hinweis: Eine Ausnahme bilden nur die Schlüsselwörter einiger Compiler (z. B. für die 8051-Architektur), die mit einer Warnung hervorgehoben werden. Aber das ist eine andere Geschichte.
  6. Für den Compiler werden Verzeichnisse mit ihren Header-Dateien automatisch erkannt. Daher werden sie im Code-Editor korrekt hervorgehoben.
  7. Die Parser für Fehler und Warnungen dieser neuen Compiler sind implementiert, die im Bereich Probleme angezeigt werden.

Verbesserungen in QBS


QBS wird ein wesentlicher Bestandteil dieser Überprüfung sein, daher ist es sinnvoll, über seine Verbesserungen zu sprechen:

  1. Unterstützung für diese neuen Compiler hinzugefügt (einige davon seit Version 1.13).
  2. Implementierung der Fähigkeit, installierte Compiler automatisch zu erkennen und Profile zu erstellen. Wofür wird das Dienstprogramm qbs-setup-toolchains verwendet ?

    In meinem Fall sieht es so aus:

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

    Um zu sehen, was dort entdeckt wurde, können Sie das GUI-Dienstprogramm qbs-config-ui verwenden .

    In meinem Fall sieht es so aus:



Funktionen zum Erstellen eines Projekts


Es ist wichtig, eine Idee zu haben und die Projekteigenschaften für die Module cpp und qbs korrekt ausfüllen zu können.

Lassen Sie uns auf die wichtigsten von ihnen eingehen und sie genauer betrachten:

  • qbs.toolchain - Diese Eigenschaft wird beim Generieren eines Profils für den ausgewählten Compiler automatisch ausgefüllt . Die folgende Tabelle zeigt die möglichen Werte für diese Eigenschaft:

    Name der ToolchainEigenschaftswert
    IAR EWiar
    KeilKeil
    SDCCsdcc

  • qbs.architecture - Diese Eigenschaft wird beim Generieren eines Profils für den ausgewählten Compiler automatisch ausgefüllt . Die folgende Tabelle zeigt die möglichen Werte für diese Eigenschaft:

    Name der ArchitekturEigenschaftswert
    ARMArm
    AVRavr
    8051 (MCS51)mcs51

  • cpp.cLanguageVersion - Mit dieser Eigenschaft können Sie die Version des für die C-Sprache verwendeten Standards festlegen. Mögliche Verwendungen sind in der folgenden Tabelle aufgeführt:

    Name der ToolchainMögliche OptionenDefault
    IAR EWc89Die neueste Version, abhängig von der Version der Toolchain.
    Keilc99 (nur ARM)Die neueste Version, abhängig von der Version der Toolchain.
    SDCCc89, c99, c11Die neueste Version, abhängig von der Version der Toolchain.

    Hinweis: Es ist wichtig zu beachten, dass die IAR EW- und KEIL-Toolchains nicht die Möglichkeit bieten, eine Standardversion auszuwählen. Standardmäßig verwenden sie die neueste Version, die in einer bestimmten Version des Compilers implementiert ist (entweder c99 oder c11, Sie müssen in den Versionshinweisen für den Compiler nachsehen). Normalerweise können Sie nur die alte Version des c89-Standards auswählen.
  • cpp.cxxLanguageVersion - Mit dieser Eigenschaft können Sie die Version des für die C ++ - Sprache verwendeten Standards festlegen. Mögliche Verwendungen sind in der folgenden Tabelle aufgeführt:

    Name der ToolchainMögliche OptionenDefault
    IAR EWNeinDie neueste Version, abhängig von der Version der Toolchain
    Keilc ++ 03, c ++ 11 (nur für ARM)c ++ 03 (nur für ARM)
    SDCCWird nicht unterstütztWird nicht unterstützt

  • cpp.entryPoint ist der Name des Verschiebungspunkts im Programm, das zum Verknüpfen verwendet wird. Ihre Notwendigkeit wird durch die verwendete Laufzeit bestimmt. Wenn Sie beispielsweise die IAR EW-Laufzeit verwenden (dh eine Verknüpfung zu ihren Bibliotheken herstellen und ihre Linkerskripte verwenden), lautet der Punktname "__program_start". Das heißt, Es liegt ganz beim Entwickler.
  • cpp.driverFlags sind allgemeine Flags, die an den Compiler und Assembler übergeben werden. In einigen Fällen werden sie auch an den Linker übertragen (dies hängt von der Art der Toolchain ab). Diese Flags können Flags sein, die den Typ des Prozessors, Coprozessors usw. angeben.

    Für den IAR EW-Compiler für die AVR-Architektur können dies beispielsweise sein:

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

  • cpp.driverLinkerFlags sind Flags, die im Gegensatz zu cpp.linkerFlags , die automatisch zusätzlich mit einigen Schlüsselwörtern umbrochen werden können, unverändert an den Linker übergeben werden. Für IAR EW- und KEIL-Compiler ist es vorzuziehen, cpp.driverLinkerFlags as zu verwenden Diese Compiler verwenden immer eine separate ausführbare Linker-Datei zum Verknüpfen. Für den SDCC-Compiler ist es vorzuziehen, cpp.linkerFlags as zu verwenden Die Befehle dieses Compilers ähneln denen des GCC-Compilers.
  • cpp.commonCompilerFlags sind allgemeine Flags, die sowohl an den C-Compiler als auch an den C ++ - Compiler übergeben werden.

    Für den IAR EW-Compiler kann dies beispielsweise ein Flag sein, um bestimmte Erweiterungen dieses Compilers zu aktivieren:

     cpp.commonCompilerFlags: ["-e"] 

  • cpp.cFlags sind Flags, die nur an den C-Compiler übergeben werden.
  • cpp.xxFlags sind Flags, die nur an den C ++ - Compiler übergeben werden.
  • cpp.staticLibraries ist eine Liste von Bibliotheken, mit denen Sie die Anwendung verknüpfen müssen. Ich stelle fest, dass cpp.dynamicLibraries in diesen Compilern (wie ich weiß) nicht unterstützt werden. Daher ist es sinnvoll, nur cpp.staticLibraries zu verwenden .
  • cpp.assemblerFlags - Diese Flags werden nur an Assembler übergeben.

Um Skriptdateien für den Linker anzugeben, gibt es ein spezielles Tag "Linkerscript", das Sie verwenden müssen, zum Beispiel:

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

Hinweis: Der Grund dafür ist, dass es für verschiedene Compiler unterschiedliche Optionen zum Benennen dieser Dateien gibt. Für dasselbe GCC können dies Dateien mit den Erweiterungen * .ld, * .x, * .xn, * .xbn usw. sein (was können wir über andere Compiler sagen ...). Daher wurde beschlossen, nicht alle möglichen Dateierweiterungen für bestimmte Compiler zu kennzeichnen, sondern lediglich das Linkerscript-Tag für den beabsichtigten Zweck und die beabsichtigte Situation zu verwenden.

Um zu sehen, wie alles funktioniert, bietet QBS eine Reihe einfacher Beispiele , die nur ein Bein „ruckeln“ und eine LED blinken lassen.

Was ist mit dem Debuggen?


Leider ist die Debugging-Situation bedauerlich. Produkte (IDEs) IAR EW und KEIL verwenden ihre Debugger, aber seitdem Da diese Produkte proprietär sind, ist es nicht möglich, irgendwo eine Beschreibung der Funktionsweise der Protokolle dieser Debugger zu erhalten. Die einzige Möglichkeit besteht darin, die Plugins für Eclipse rückzuentwickeln (z. B. stellt IAR EW diese Plugins zur Verfügung). Dies erfordert jedoch ernsthafte Motivation.

Aber ich kann ein wenig glücklich sein, wenn ich sage, dass Sie für die ARM-Architektur den GDB-Debugger verwenden können. Zumindest hat es bei IAR EW funktioniert (aber hier hat etwas mit KEIL nicht geklappt, vielleicht sollten dem Linker dort einige zusätzliche Flags angezeigt werden).

Was weiter


Hier bin ich ein kleiner Spoiler. Ich möchte sagen, dass in den nächsten Versionen (ich weiß nicht, welche) die STM8- und MSP430-Architekturen sowie Generatoren in nativen IAR EW- und KEIL-Projekten (die beispielsweise das Debuggen von Projekten ermöglichen) in QBS hinzugefügt werden sollten

In diesem Sinne beende ich meine Geschichte, danke an alle, die dieser Rezension Aufmerksamkeit schenken werden.

Source: https://habr.com/ru/post/de467323/


All Articles