Présentation des fonctionnalités de programmation du microcontrôleur Qt Creator 4.10 et QBS 1.14

Bonjour, chers programmeurs, matériel et tous ceux qui sympathisent avec eux. Je voudrais présenter un bref aperçu des capacités de l'IDE Qt Creator en conjonction avec le système de construction QBS concernant la programmation des microcontrôleurs. Pour qui ce sujet est intéressant, bienvenue au chat.

L'autre jour, silencieusement et imperceptiblement, la version Qt Creator 4.10 a été publiée, qui a ajouté quelques améliorations pour travailler avec les microcontrôleurs (chez les gens ordinaires - les appareils «baremetal»). Cette version de Qt Creator intègre le système de construction QBS 1.14 , qui présente également de nouvelles améliorations. Certaines de ces améliorations seront discutées ci-dessous.

Améliorations de Qt Creator


Toutes ces améliorations ne sont disponibles que lorsque le plugin BareMetal est activé, ce qui est activé via le menu "Aide -> À propos des plugins -> Support des périphériques -> BareMetal".

  1. Trois nouveaux compilateurs sont désormais pris en charge, dont les informations de base sont données dans le tableau ci-dessous:
    CompilateurArchitectures prises en charge
    IAR EWBRAS, AVR, 8051 (MCS51)
    KeilBRAS, 8051 (MCS51)
    SDCC8051 (MCS51)

    Remarque: Il convient de noter que les produits de IAR EW et KEIL pour différentes architectures sont fournis par des packages distincts qui doivent être installés indépendamment. À la différence, par exemple, du compilateur SDCC qui prend en charge plusieurs architectures à la fois.
  2. Désormais, ces nouveaux compilateurs sont automatiquement détectés dans l'onglet "Outils -> Options -> Kits -> Compilateurs -> Auto-détectés".

    Par exemple, pour moi, cela ressemble à ceci:



    Remarque: Comme vous pouvez le voir, pour C ++, il n'y a pas de compilateur KEIL pour MCS51, ce qui est correct, car ce compilateur ne prend en charge que C. De plus, le compilateur SDCC sera manquant ici pour la même raison.
  3. Il est également possible d'ajouter manuellement ces nouveaux compilateurs via le menu "Outils -> Options -> Kits -> Compilateurs -> Ajouter":


  4. Pour le compilateur, son ABI (architecture, format et largeur de mot) sera automatiquement déterminé. Les informations à ce sujet peuvent être consultées simplement en cliquant sur le compilateur.

    Par exemple, pour mon IAR EW et l'architecture 8051 (MCS51), cela ressemble à ceci:



    Remarque: Dans ce cas, un compilateur a été sélectionné qui a été automatiquement détecté, donc les champs ABI sont inactifs ici. Mais lors de l'ajout manuel du compilateur, l'utilisateur peut sélectionner l'ABI correct, si pour une raison quelconque, il a été déterminé de manière incorrecte.
  5. Pour le compilateur, toutes ses macros seront automatiquement détectées. Ainsi, ils seront correctement mis en évidence dans l'éditeur de code.

    Remarque: Une exception concerne uniquement les mots clés de certains compilateurs (par exemple, pour l'architecture 8051), qui seront mis en surbrillance avec un avertissement. Mais c'est une autre histoire.
  6. Pour le compilateur, les répertoires avec ses fichiers d'en-tête seront automatiquement détectés. Ainsi, ils seront correctement mis en évidence dans l'éditeur de code.
  7. Les analyseurs pour les erreurs et les avertissements de ces nouveaux compilateurs sont implémentés, qui sont affichés dans le panneau Problèmes.

Améliorations dans QBS


QBS fera partie intégrante de cette revue, il est donc logique de parler de ses améliorations:

  1. Ajout de la prise en charge de ces nouveaux compilateurs (certains d'entre eux depuis la version 1.13).
  2. Implémentation de la capacité de détecter automatiquement les compilateurs installés et de créer des profils. À quoi sert l' utilitaire qbs-setup-toolchains .

    Dans mon cas, cela ressemble à ceci:

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

    Pour voir ce qui y a été découvert, vous pouvez utiliser l'utilitaire GUI qbs-config-ui .

    Dans mon cas, cela ressemble à ceci:



Caractéristiques de la création d'un projet


Il est important d'avoir une idée et de pouvoir remplir correctement les propriétés du projet pour les modules cpp et qbs .

Arrêtons-nous sur les plus importants d'entre eux et considérons-les plus en détail:

  • qbs.toolchain - cette propriété est automatiquement renseignée lors de la génération d'un profil pour le compilateur sélectionné. Le tableau ci-dessous montre les valeurs possibles pour cette propriété:

    Nom de la chaîne d'outilsValeur de la propriété
    IAR EWiar
    Keilkeil
    SDCCsdcc

  • qbs.architecture - cette propriété est automatiquement renseignée lors de la génération d'un profil pour le compilateur sélectionné. Le tableau ci-dessous montre les valeurs possibles pour cette propriété:

    Nom de l'architectureValeur de la propriété
    BRASbras
    AVRavr
    8051 (MCS51)mcs51

  • cpp.cLanguageVersion - cette propriété vous permet de définir la version de la norme utilisée pour le langage C. Les utilisations possibles sont indiquées dans le tableau ci-dessous:

    Nom de la chaîne d'outilsOptions possiblesPar défaut
    IAR EWc89La dernière version, selon la version de la chaîne d'outils.
    Keilc99 (ARM uniquement)La dernière version, selon la version de la chaîne d'outils.
    SDCCc89, c99, c11La dernière version, selon la version de la chaîne d'outils.

    Remarque: Il est important de noter que les chaînes d'outils IAR EW et KEIL ne permettent pas de sélectionner une version standard. Par défaut, ils utilisent la dernière version implémentée dans une version spécifique du compilateur (c99 ou c11, vous devez consulter les notes de publication du compilateur). En règle générale, vous ne pouvez sélectionner que l'ancienne version de la norme c89.
  • cpp.cxxLanguageVersion - cette propriété vous permet de définir la version de la norme utilisée pour le langage C ++ . Les utilisations possibles sont indiquées dans le tableau ci-dessous:

    Nom de la chaîne d'outilsOptions possiblesPar défaut
    IAR EWNonLa dernière version, en fonction de la version de la chaîne d'outils
    Keilc ++ 03, c ++ 11 (uniquement pour ARM)c ++ 03 (uniquement pour ARM)
    SDCCNon pris en chargeNon pris en charge

  • cpp.entryPoint est le nom du point de déplacement dans le programme utilisé pour la liaison. Sa nécessité est déterminée par le runtime utilisé. Par exemple, si vous utilisez le runtime IAR EW (c'est-à-dire un lien vers ses bibliothèques et utilisez ses scripts de l'éditeur de liens), le nom du point sera "__program_start". C'est-à-dire cela dépend entièrement du développeur.
  • cpp.driverFlags sont des indicateurs communs qui seront transmis au compilateur et à l'assembleur. Dans certains cas, ils seront également transférés vers l'éditeur de liens (cela dépend du type de chaîne d'outils). Ces drapeaux peuvent être des drapeaux indiquant le type de processeur, coprocesseur, etc.

    Par exemple, pour le compilateur IAR EW pour l'architecture AVR, ceux-ci peuvent être:

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

  • cpp.driverLinkerFlags sont des indicateurs qui seront transmis à l'éditeur de liens sans modifications, contrairement à cpp.linkerFlags , qui peut être automatiquement ajouté à certains mots clés. Pour les compilateurs IAR EW et KEIL, il est préférable d'utiliser cpp.driverLinkerFlags , car ces compilateurs utilisent toujours un exécutable de l'éditeur de liens distinct pour la liaison. Pour le compilateur SDCC, il est préférable d'utiliser cpp.linkerFlags , car les commandes de ce compilateur sont quelque peu similaires au compilateur GCC.
  • cpp.commonCompilerFlags sont des indicateurs communs qui seront transmis à la fois au compilateur C et au compilateur C ++.

    Par exemple, pour le compilateur IAR EW, cela pourrait être un indicateur pour activer des extensions spécifiques de ce compilateur:

     cpp.commonCompilerFlags: ["-e"] 

  • cpp.cFlags sont des drapeaux qui ne seront transmis qu'au compilateur C.
  • cpp.xxFlags sont des indicateurs qui ne seront transmis qu'au compilateur C ++.
  • cpp.staticLibraries est une liste de bibliothèques avec lesquelles vous devez lier l'application. Je note que cpp.dynamicLibraries n'est pas pris en charge dans ces compilateurs (comme je le sais), il est donc logique d'utiliser uniquement cpp.staticLibraries .
  • cpp.assemblerFlags - ces drapeaux ne seront transmis qu'à l'assembleur.

Pour spécifier des fichiers de script pour l'éditeur de liens, il existe une balise spéciale «linkerscript», que vous devez utiliser, par exemple:

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

Remarque: La raison en est que pour différents compilateurs, il existe différentes options pour nommer ces fichiers. Pour le même GCC, il peut s'agir de fichiers avec les extensions * .ld, * .x, * .xn, * .xbn, etc. (que dire des autres compilateurs ...). Par conséquent, il a été décidé de ne pas prendre la peine de baliser toutes les extensions de fichier possibles pour des compilateurs spécifiques, mais simplement d'utiliser la balise linkerscript pour son objectif et sa situation.

Pour voir comment tout cela fonctionne, QBS fournit un ensemble d' exemples simples qui ne font que secouer une jambe et faire clignoter une LED.

Quel est le débogage


Malheureusement, la situation de débogage est déplorable. Produits (IDE) IAR EW et KEIL utilisent leurs débogueurs, mais depuis Étant donné que ces produits sont propriétaires, il n'est pas possible d'obtenir quelque part une description du fonctionnement des protocoles de ces débogueurs. La seule option est d'essayer la rétro-ingénierie des plugins pour Eclipse (par exemple, IAR EW fournit ces plugins), mais cela nécessite une motivation sérieuse.

Mais je peux être un peu heureux si je dis que pour l'architecture ARM, vous pouvez utiliser le débogueur GDB. Au moins, cela a fonctionné pour moi pour IAR EW (mais, quelque chose n'a pas fonctionné avec KEIL, peut-être que certains indicateurs supplémentaires devraient être indiqués à l'éditeur de liens).

Et ensuite


Ici, je suis un petit spoiler, je dirai que dans les prochaines versions (je ne sais pas lesquelles), les architectures STM8 et MSP430 devraient être ajoutées, ainsi que dans les générateurs QBS seront implémentés dans les projets natifs IAR EW et KEIL (ce qui permettra, par exemple, de déboguer des projets).

Sur cette note, je termine mon histoire, merci à tous ceux qui feront attention à cette critique.

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


All Articles