Qt Creator 4.10和QBS 1.14微控制器编程功能概述

大家好,程序员,硬件和所有对此表示同情的人。 我想简要介绍一下Qt Creator IDE的功能以及有关微控制器编程的QBS构建系统。 这个主题对谁感兴趣,欢迎关注。

就在前几天, Qt Creator 4.10版本悄无声息地发布了,它为使用微控制器(在普通人中称为“裸机”设备)增加了一些改进。 此版本的Qt Creator集成了QBS 1.14构建系统,该系统也有新的改进。 其中一些改进将在下面讨论。

Qt Creator的改进


所有这些改进仅在启用BareMetal插件时可用,该插件通过菜单“帮助->关于插件->设备支持-> BareMetal”激活。

  1. 现在支持三种新的编译器,有关其的基本信息在下表中给出:
    编译器支持的架构
    IAR电子战ARM,AVR,8051(MCS51)
    凯尔ARM,8051(MCS51)
    SDCC8051(MCS51)

    注意:值得注意的是,IAR EW和KEIL提供的针对不同体系结构的产品由单独的软件包提供,这些软件包必须独立安装。 与此不同的是,SDCC编译器可同时支持多种架构。
  2. 现在,在“工具->选项->套件->编译器->自动检测”选项卡上自动检测到这些新的编译器。

    例如,对我来说,它看起来像这样:



    注意:如您所见,对于C ++,没有用于MCS51的KEIL编译器,这是正确的,因为 此编译器仅支持C。此外,出于相同的原因,此处也将缺少SDCC编译器。
  3. 也可以通过菜单“工具->选项->套件->编译器->添加”来手动添加这些新的编译器:


  4. 对于编译器,将自动确定其ABI(体系结构,格式和字宽)。 只需单击编译器即可查看有关此信息。

    例如,对于我的IAR EW和体系结构8051(MCS51),它看起来像这样:



    注意:在这种情况下,选择了自动检测到的编译器,因此此处的ABI字段处于非活动状态。 但是,当手动添加编译器时,如果由于某种原因而确定错误,则用户可以选择正确的ABI。
  5. 对于编译器,将自动检测其所有宏。 因此,它们将在代码编辑器中正确突出显示。

    注意:只有某些编译器的关键字(例如8051体系结构)的关键字例外,该关键字将以警告突出显示。 但这是另一个故事。
  6. 对于编译器,将自动检测带有其头文件的目录。 因此,它们将在代码编辑器中正确突出显示。
  7. 实现了这些新编译器的错误和警告解析器,这些解析器显示在“问题”面板中。

QBS的改进


QBS将是此审查的组成部分,因此有必要谈论其改进:

  1. 新增了对这些新编译器的支持(自1.13版以来,其中的一些编译器)。
  2. 实现了自动检测已安装的编译器和创建配置文件的功能。 什么是qbs-setup-toolchains实用程序。

    就我而言,它看起来像这样:

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

    要查看在那里发现的内容,可以使用qbs-config-ui GUI实用程序。

    就我而言,它看起来像这样:



创建项目的功能


重要的是要有一个想法,并能够正确地为cppqbs模块填写项目属性。

让我们集中讨论其中最重要的部分,并更详细地考虑它们:

  • qbs.toolchain-为选定的编译器生成配置文件时,将自动填充此属性。 下表显示了此属性的可能值:

    工具链名称物业价值
    IAR电子战ar
    凯尔凯尔
    SDCCsdcc

  • qbs.architecture-为选定的编译器生成配置文件时,将自动填充此属性。 下表显示了此属性的可能值:

    建筑名称物业价值
    阿姆手臂
    AVRAVR
    8051(MCS51)mcs51

  • cpp.cLanguageVersion-此属性允许您设置用于C语言的标准版本。 可能的用途如下表所示:

    工具链名称可能的选择默认情况下
    IAR电子战c89最新版本,取决于工具链的版本。
    凯尔c99(仅ARM)最新版本,取决于工具链的版本。
    SDCCc89,c99,c11最新版本,取决于工具链的版本。

    注意:请务必注意,IAR EW和KEIL工具链不提供选择标准版本的功能。 默认情况下,它们使用在特定版本的编译器中实现的最新版本(c99或c11,您需要查看编译器的发行说明)。 通常,您只能选择旧版本的c89标准。
  • cpp.cxxLanguageVersion-此属性允许您设置用于C ++语言的标准版本。 可能的用途如下表所示:

    工具链名称可能的选择默认情况下
    IAR电子战没有啦最新版本,取决于工具链的版本
    凯尔c ++ 03,c ++ 11(仅适用于ARM)c ++ 03(仅适用于ARM)
    SDCC不支援不支援

  • cpp.entryPoint是用于链接的程序中的移动点的名称。 它的必要性取决于所使用的运行时。 例如,如果您使用IAR EW运行时(即,链接到其库并使用其链接脚本),则点名称将为“ __program_start”。 即 这完全取决于开发人员。
  • cpp.driverFlags是通用标志,将传递给编译器和汇编器。 在某些情况下,它们也将被转移到链接器(这取决于工具链的类型)。 这些标志可以是指示处理器,协处理器等类型的标志。

    例如,对于用于AVR架构的IAR EW编译器,这些可能是:

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

  • cpp.linkerFlags不同, cpp.driverLinkerFlags是将直接传递给链接器的标志,而cpp.linkerFlags可以自动附加一些关键字。 对于IAR EW和KEIL编译器,最好使用cpp.driverLinkerFlags ,因为 这些编译器始终使用单独的链接器可执行文件进行链接。 对于SDCC编译器,最好使用cpp.linkerFlags ,因为 该编译器的命令与GCC编译器有些相似。
  • cpp.commonCompilerFlags是通用标志,将同时传递给C编译器和C ++编译器。

    例如,对于IAR EW编译器,这可能是启用该编译器特定扩展的标志:

     cpp.commonCompilerFlags: ["-e"] 

  • cpp.cFlags是仅将传递给C编译器的标志。
  • cpp.xxFlags是仅将传递给C ++编译器的标志。
  • cpp.staticLibraries是您需要与之链接应用程序的库的列表。 我注意到这些编译器不支持cpp.dynamicLibraries (据我所知),因此仅使用cpp.staticLibraries是有意义的
  • cpp.assemblerFlags-这些标志将仅传递给汇编器。

要为链接器指定脚本文件,必须使用特殊标记“ linkerscript”,例如:

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

注意:原因是对于不同的编译器,有不同的选项来命名这些文件。 对于相同的GCC,它可以是带有* .ld,*。x,*。xn,*。xbn等扩展名的文件(对于其他编译器可以说什么……)。 因此,决定不再费心标记特定编译器的所有可能文件扩展名,而只是将linkerscript标记用于其预期的目的和情况。

为了了解其工作原理,QBS提供了一组简单的示例 ,这些示例仅“猛拉”一条腿并使LED闪烁。

什么是调试


不幸的是,调试情况令人遗憾。 产品(IDE)IAR EW和KEIL使用其调试器,但由于 由于这些产品是专有产品,因此不可能在某处获得有关这些调试器协议操作的描述。 唯一的选择是尝试对Eclipse的插件进行反向工程(例如,IAR EW提供了这些插件),但这需要认真的动力。

但是如果我说对于ARM体系结构可以使用GDB调试器,我会有些高兴。 至少对IAR EW来说,它对我有用(但是,KEIL无法解决问题,也许应该向那里的链接器指示一些其他标志)。

接下来是什么


在这里,我有点讨人喜欢,我会说在下一个版本(我不知道是哪个版本)中,应该添加STM8和MSP430体系结构,并且QBS生成器将在本机IAR EW和KEIL项目中实现(这将使例如调试项目成为可能)。

在此结束我的故事,谢谢所有关注此评论的人。

Source: https://habr.com/ru/post/zh-CN467323/


All Articles