Olá, colegas programadores, hardware e todos que simpatizam com eles. Gostaria de apresentar uma breve visão geral dos recursos do Qt Creator IDE em conjunto com o sistema de compilação QBS referente à programação de microcontroladores. Para quem esse tópico é interessante, bem-vindo ao gato.
Outro dia, silenciosa e imperceptivelmente, foi lançada a versão
Qt Creator 4.10 , que adicionou algumas melhorias ao trabalhar com microcontroladores (em pessoas comuns - dispositivos "baremetais"). Esta versão do Qt Creator integra o sistema de
compilação QBS 1.14 , que também possui novas melhorias. Algumas dessas melhorias serão discutidas abaixo.
Melhorias no Qt Creator
Todas essas melhorias estão disponíveis apenas quando o plug-in BareMetal está ativado, que é ativado no menu "Ajuda -> Sobre plug-ins -> Suporte a dispositivos -> BareMetal".
- Agora, três novos compiladores são suportados, cujas informações básicas são fornecidas na tabela abaixo:
Nota: Vale ressaltar que os produtos do IAR EW e KEIL para diferentes arquiteturas são fornecidos por pacotes separados que devem ser instalados independentemente. Diferentemente, digamos, do compilador SDCC, que suporta várias arquiteturas ao mesmo tempo.
- Agora, esses novos compiladores são detectados automaticamente na guia "Ferramentas -> Opções -> Kits -> Compiladores -> Detectados automaticamente".
Por exemplo, para mim, fica assim:

Nota: Como você pode ver, para C ++, não existe um compilador KEIL para MCS51, o que está correto, porque esse compilador oferece suporte apenas a C. Além disso, o compilador SDCC estará ausente aqui pelo mesmo motivo.
- Também é possível adicionar manualmente esses novos compiladores através do menu "Ferramentas -> Opções -> Kits -> Compiladores -> Adicionar":

- Para o compilador, sua ABI (arquitetura, formato e largura da palavra) será determinada automaticamente. Informações sobre isso podem ser visualizadas simplesmente clicando no compilador.
Por exemplo, para meu IAR EW e arquitetura 8051 (MCS51), ele se parece com isso:

Nota: Nesse caso, foi selecionado um compilador que foi detectado automaticamente, portanto os campos ABI ficam inativos aqui. Porém, ao adicionar manualmente o compilador, o usuário pode selecionar a ABI correta, se por algum motivo tiver sido determinada incorretamente.
- Para o compilador, todas as suas macros serão detectadas automaticamente. Assim, eles serão destacados corretamente no editor de código.
Nota: Uma exceção são apenas as palavras-chave de alguns compiladores (por exemplo, para a arquitetura 8051), que serão destacadas com um aviso. Mas isso é outra história.
- Para o compilador, os diretórios com seus arquivos de cabeçalho serão detectados automaticamente. Assim, eles serão destacados corretamente no editor de código.
- Os analisadores de erros e avisos desses novos compiladores são implementados, exibidos no painel Problemas.
Melhorias no QBS
O QBS será parte integrante desta revisão, por isso faz sentido falar sobre suas melhorias:
- Adicionado suporte para esses novos compiladores (alguns deles desde a versão 1.13).
- Implementou a capacidade de detectar automaticamente os compiladores instalados e criar perfis. Para que é utilizado o utilitário qbs-setup-toolchains .
No meu caso, fica assim:
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 o que foi descoberto lá, você pode usar o utilitário qbs-config-ui GUI.
No meu caso, fica assim:

Recursos de criação de um projeto
É importante ter uma idéia e poder preencher corretamente as propriedades do projeto para os
módulos cpp e
qbs .
Vamos nos debruçar sobre os mais importantes deles e considerá-los com mais detalhes:
Para especificar arquivos de script para o vinculador, existe uma tag especial "linkerscript", que você deve usar, por exemplo:
Group { name: "Linker Scripts" fileTags: ["linkerscript"] files: ["cfg3soim.xcl", "cfgcan128.xcl"] }
Nota: O motivo é que, para diferentes compiladores, existem opções diferentes para nomear esses arquivos. Para o mesmo GCC, podem ser arquivos com as extensões * .ld, * .x, * .xn, * .xbn etc. (o que podemos dizer sobre outros compiladores ...). Portanto, foi decidido não se preocupar em marcar todas as extensões de arquivo possíveis para compiladores específicos, mas simplesmente usar a tag "linkerscript" para o objetivo e a situação pretendidos.Para ver como tudo funciona, o QBS fornece um conjunto de
exemplos simples que apenas “sacudem” uma perna e piscam um LED.
O que há com depuração
Infelizmente, a situação de depuração é deplorável. Produtos (IDEs) IAR EW e KEIL usam seus depuradores, mas desde Como esses produtos são proprietários, não é possível obter em algum lugar uma descrição da operação dos protocolos desses depuradores. A única opção é tentar fazer engenharia reversa dos plug-ins do Eclipse (por exemplo, o IAR EW fornece esses plug-ins), mas isso requer uma motivação séria.
Mas posso ficar um pouco feliz se disser que, para a arquitetura ARM, você pode usar o depurador GDB. Pelo menos funcionou para mim no IAR EW (mas aqui, algo não deu certo com o KEIL, talvez alguns sinalizadores adicionais devam ser indicados ao vinculador lá).
O que vem a seguir
Aqui estou um pouco de spoiler, vou dizer que nas próximas versões (não sei quais), as arquiteturas STM8 e MSP430 devem ser adicionadas, assim como os geradores QBS serão implementados em projetos IAR EW e KEIL nativos (o que tornará possível, por exemplo, projetos de depuração).
Nesta nota, encerro minha história, obrigado a todos que prestarem atenção a esta revisão.