Hola, compañeros programadores, hardware y todos los que simpatizan con ellos. Me gustaría presentar una breve descripción de las capacidades del Qt Creator IDE junto con el sistema de compilación QBS con respecto a la programación de microcontroladores. Para quien este tema es interesante, bienvenido a cat.
Justo el otro día, silenciosa e imperceptiblemente, se lanzó la versión
Qt Creator 4.10 , que agregó algunas mejoras para trabajar con microcontroladores (en personas comunes: dispositivos "baremetal"). Esta versión de Qt Creator integra el sistema de
compilación QBS 1.14 , que también tiene nuevas mejoras. Algunas de estas mejoras se discutirán a continuación.
Mejoras en Qt Creator
Todas estas mejoras están disponibles solo cuando el complemento BareMetal está activado, que se activa a través del menú "Ayuda -> Acerca de los complementos -> Soporte de dispositivos -> BareMetal".
- Ahora se admiten tres nuevos compiladores, cuya información básica se proporciona en la tabla a continuación:
Nota: Vale la pena señalar que los productos de IAR EW y KEIL para diferentes arquitecturas son proporcionados por paquetes separados que deben instalarse de forma independiente. A diferencia, digamos, del compilador SDCC que admite varias arquitecturas a la vez.
- Ahora estos nuevos compiladores se detectan automáticamente en la pestaña "Herramientas -> Opciones -> Kits -> Compiladores -> Detección automática".
Por ejemplo, para mí se ve así:

Nota: Como puede ver, para C ++ no hay un compilador KEIL para MCS51, lo cual es correcto, porque este compilador solo es compatible con C. Además, el compilador SDCC faltará aquí por la misma razón.
- También es posible agregar manualmente estos nuevos compiladores a través del menú "Herramientas -> Opciones -> Kits -> Compiladores -> Agregar":

- Para el compilador, su ABI (arquitectura, formato y ancho de palabra) se determinará automáticamente. La información sobre esto se puede ver simplemente haciendo clic en el compilador.
Por ejemplo, para mi IAR EW y arquitectura 8051 (MCS51), se ve así:

Nota: En este caso, se seleccionó un compilador que se detectó automáticamente, por lo que los campos ABI están inactivos aquí. Pero al agregar manualmente el compilador, el usuario puede seleccionar el ABI correcto, si por alguna razón se determinó incorrectamente.
- Para el compilador, todas sus macros se detectarán automáticamente. Por lo tanto, se resaltarán correctamente en el editor de código.
Nota: Una excepción son solo las palabras clave de algunos compiladores (por ejemplo, para la arquitectura 8051), que se resaltarán con una advertencia. Pero esa es otra historia.
- Para el compilador, los directorios con sus archivos de encabezado se detectarán automáticamente. Por lo tanto, se resaltarán correctamente en el editor de código.
- Se implementan los analizadores de errores y advertencias de estos nuevos compiladores, que se muestran en el panel Problemas.
Mejoras en QBS
QBS será una parte integral de esta revisión, por lo que tiene sentido hablar sobre sus mejoras:
- Se agregó soporte para estos nuevos compiladores (algunos desde la versión 1.13).
- Se implementó la capacidad de detectar automáticamente los compiladores instalados y crear perfiles. ¿Para qué se utiliza la utilidad qbs-setup-toolchains ?
En mi caso, se ve así:
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. ...
Para ver lo que se descubrió allí, puede usar la utilidad qbs-config-ui GUI.
En mi caso, se ve así:

Características de crear un proyecto
Es importante tener una idea y poder completar correctamente las propiedades del proyecto para los
módulos cpp y
qbs .
Detengámonos en los más importantes y consideremos con más detalle:
Para especificar archivos de script para el vinculador, hay una etiqueta especial "linkerscript", que debe usar, por ejemplo:
Group { name: "Linker Scripts" fileTags: ["linkerscript"] files: ["cfg3soim.xcl", "cfgcan128.xcl"] }
Nota: La razón es que para diferentes compiladores hay diferentes opciones para nombrar estos archivos. Para el mismo GCC, pueden ser archivos con las extensiones * .ld, * .x, * .xn, * .xbn, etc. (qué podemos decir sobre otros compiladores ...). Por lo tanto, se decidió no molestar a etiquetar todas las extensiones de archivo posibles para compiladores específicos, sino simplemente usar la etiqueta linkerscript para su propósito y situación previstos.Para ver cómo funciona todo, QBS proporciona un conjunto de
ejemplos simples que solo "sacuden" una pierna y parpadean un LED.
¿Qué pasa con la depuración?
Desafortunadamente, la situación de depuración es deplorable. Los productos (IDE) IAR EW y KEIL usan sus depuradores, pero desde Dado que estos productos son propietarios, no es posible obtener en alguna parte una descripción del funcionamiento de los protocolos de estos depuradores. La única opción es probar la ingeniería inversa de los complementos para Eclipse (por ejemplo, IAR EW proporciona estos complementos), pero esto requiere una seria motivación.
Pero puedo estar un poco feliz si digo que para la arquitectura ARM puedes usar el depurador GDB. Al menos funcionó para mí para IAR EW (pero, algo no funcionó con KEIL, tal vez algunas banderas adicionales deberían indicarse al enlazador allí).
Que sigue
Aquí estoy un poco spoiler, diré que en las próximas versiones (no sé cuáles), se deben agregar las arquitecturas STM8 y MSP430, así como en los generadores QBS se implementarán en proyectos IAR EW y KEIL nativos (lo que hará posible, por ejemplo, depurar proyectos).
En esta nota, termino mi historia, gracias a todos los que prestarán atención a esta revisión.