Visão geral dos recursos de programação do microcontrolador Qt Creator 4.10 e QBS 1.14

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

  1. Agora, três novos compiladores são suportados, cujas informações básicas são fornecidas na tabela abaixo:
    CompiladorArquiteturas Suportadas
    IAR EWBRAÇO, AVR, 8051 (MCS51)
    KeilBRAÇO, 8051 (MCS51)
    SDCC8051 (MCS51)

    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.
  2. 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.
  3. Também é possível adicionar manualmente esses novos compiladores através do menu "Ferramentas -> Opções -> Kits -> Compiladores -> Adicionar":


  4. 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.
  5. 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.
  6. 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.
  7. 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:

  1. Adicionado suporte para esses novos compiladores (alguns deles desde a versão 1.13).
  2. 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:

  • qbs.toolchain - essa propriedade é preenchida automaticamente ao gerar um perfil para o compilador selecionado. A tabela abaixo mostra os valores possíveis para esta propriedade:

    Nome da cadeia de ferramentasValor da propriedade
    IAR EWiar
    Keilkeil
    SDCCsdcc

  • qbs.architecture - essa propriedade é preenchida automaticamente ao gerar um perfil para o compilador selecionado. A tabela abaixo mostra os valores possíveis para esta propriedade:

    Nome da arquiteturaValor da propriedade
    BRAÇObraço
    AVRavr
    8051 (MCS51)mcs51

  • cpp.cLanguageVersion - essa propriedade permite definir a versão do padrão usado para o idioma C. Os usos possíveis são mostrados na tabela abaixo:

    Nome da cadeia de ferramentasPossíveis opçõesPor padrão
    IAR EWc89A versão mais recente, dependendo da versão do conjunto de ferramentas.
    Keilc99 (apenas ARM)A versão mais recente, dependendo da versão da cadeia de ferramentas.
    SDCCc89, c99, c11A versão mais recente, dependendo da versão do conjunto de ferramentas.

    Nota: É importante observar que as cadeias de ferramentas IAR EW e KEIL não fornecem a capacidade de selecionar uma versão padrão. Por padrão, eles usam a versão mais recente implementada em uma versão específica do compilador (c99 ou c11, você precisa procurar nas notas de versão do compilador). Normalmente, você só pode selecionar a versão antiga do padrão c89.
  • cpp.cxxLanguageVersion - essa propriedade permite definir a versão do padrão usado para a linguagem C ++ . Os usos possíveis são mostrados na tabela abaixo:

    Nome da cadeia de ferramentasPossíveis opçõesPor padrão
    IAR EWNãoA versão mais recente, dependendo da versão do conjunto de ferramentas
    Keilc ++ 03, c ++ 11 (apenas para ARM)c ++ 03 (apenas para ARM)
    SDCCNão suportadoNão suportado

  • cpp.entryPoint é o nome do ponto na movimentação no programa usado para vincular. Sua necessidade é determinada pelo tempo de execução usado. Por exemplo, se você usar o tempo de execução IAR EW (ou seja, vincular suas bibliotecas e usar seus scripts de vinculador), o nome do ponto será "__program_start". I.e. depende inteiramente do desenvolvedor.
  • cpp.driverFlags são sinalizadores comuns que serão transmitidos ao compilador e montador. Em alguns casos, eles também serão transferidos para o vinculador (isso depende do tipo de cadeia de ferramentas). Esses sinalizadores podem ser sinalizadores indicando o tipo de processador, coprocessador etc.

    Por exemplo, para o compilador IAR EW para a arquitetura AVR, eles podem ser:

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

  • cpp.driverLinkerFlags são sinalizadores que serão passados ​​para o vinculador sem alterações, ao contrário de cpp.linkerFlags , que podem ser automaticamente agrupados adicionalmente com algumas palavras-chave. Para os compiladores IAR EW e KEIL, é preferível usar cpp.driverLinkerFlags , como esses compiladores sempre usam um vinculador executável separado para vincular. Para o compilador SDCC, é preferível usar cpp.linkerFlags , como os comandos deste compilador são um pouco semelhantes ao compilador GCC.
  • cpp.commonCompilerFlags são sinalizadores comuns que serão passados ​​para o compilador C e o compilador C ++.

    Por exemplo, para o compilador IAR EW, isso pode ser um sinalizador para ativar extensões específicas desse compilador:

     cpp.commonCompilerFlags: ["-e"] 

  • cpp.cFlags são sinalizadores que serão passados ​​apenas para o compilador C.
  • cpp.xxFlags são sinalizadores que serão passados ​​apenas para o compilador C ++.
  • cpp.staticLibraries é uma lista de bibliotecas com as quais você precisa vincular o aplicativo. Observo que cpp.dynamicLibraries não são suportadas nesses compiladores (como eu sei), portanto, faz sentido usar apenas cpp.staticLibraries .
  • cpp.assemblerFlags - esses sinalizadores serão passados ​​apenas para o assembler.

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.

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


All Articles