是否有可能在微控制器(MCU)上使用Qt进行软件开发,以及Qt是否可以在没有操作系统(“裸机”)的情况下运行。 今天我们将回答这些问题并向您展示一些具体的例子。 使用MCU有什么意义?MCU是单个集成电路上的小型计算机。它们与芯片上系统(SoC)相似,尽管不太复杂。微控制器用于汽车发动机控制系统,医疗设备,可穿戴设备,遥控器,办公设备,电器,电动工具,玩具和其他嵌入式系统等自动控制产品和设备。使用MCU的主要优势在于体积小,成本相对较低 - 特别是对于大批量生产。 因此,我们已经可以从定义中看到MCU的主要特性:小尺寸,低功耗以及低成本。因此,我们可以说使用MCU的主要目的是节约成本。 为什么要在MCU上使用Qt?较低的计算能力对软件开发工具的选择有一定的限制,特别是如果我们谈论GUI时,例如关于固件大小,运行时内存使用情况以及GUI如何尽可能的“花哨”。 今天,我们没有用于MCU的通用GUI库。当然,有些解决方案可以解决某些特定MCU GUI模型的部分任务,但这还不够。而且很少(或实际上从来没有)库是以“跨平台能力”为基础创建的。 虽然一些商业工具包其实很不错,但在大多数情况下,它们都有一个封闭的源代码。所以你要购买一个“黑匣子”,并冒着发现自己锁定供应商的风险。 现在想象一下,如果我们可以使用Qt框架,这将会是多么的棒:跨平台和全面的类库(包括GUI),优秀的文档和大量的例子,以及一个梦幻般的开源社区。 不幸的是,到目前为止,由于上述硬件限制,Qt(用于设备创建的Qt)的嵌入式开发仅在Cortex-A级别的设备上正式支持,主要是在Linux和一些商业RTOS(INTEGRITY,QNX和VxWorks) 。 但今天,这种情况已经改变。 研究入门所以,我们开始研究:研究在MCU硬件上运行Qt的可能性。 我们从一开始就清楚我们正在谈论的是哪些微控制器,因为有些人可能会开始梦想拥有12Mhz CPU和128字节RAM的MCU。这将是一个很大的差距,因为Qt当前的硬件要求是:
我们选择的研究板是: ![]() STM32F469 - ARM Cortex-M4,FPU单元单精度 ![]() STM32F746 - ARM Cortex-M7,单精度FPU单元,L1高速缓存(数据/指令) ![]() STM32F769 - ARM Cortex-M7,双精度FPU单元,L1高速缓存(数据/指令) 从规格中可以看出,他们的硬件资源比Qt“正式版本”要求的要低。 关于OpenGL支持,感谢Qt Quick 2D Renderer, 它不是一个严格的要求,因为我们可以使用光栅绘制引擎渲染我们的图形。 我们开始移植以下Qt模块:
移植你如何将Qt移植到不同的目标平台上?那么,首先我们需要了解Qt的功能究竟需要什么。一般来说,您需要满足两个主要要求:
我们从C ++ 11的要求开始。在5.7版本中,Qt开始要求平台支持C ++ 11,因为我们的目标是提供功能强大且现代化的C ++框架。但是,如果您的平台最多只能支持C ++ 98,那么您当然可以尝试使用Qt 5.6(或更早版本)来实现,但是考虑到引入了新的配置系统(所谓的Qt Lite)这一事实只有使用Qt 5.8,将Qt“挤入”MCU环境将是一项艰巨的任务。 现在关于 POSIX - 兼容操作系统接口。这实际上回答了为什么Qt不能用于“裸机”的问题。在Qt中,我们使用了大量的POSIX功能(并行线程,MMAP, fopen ,open 等),所以如果我们想在裸机上运行Qt,我们需要创建自己的实现POSIX的-基本上实现自己的操作系统。幸运的是,我们的研究并非如此。我们决定使用开源RTOS,我们选择了RTEMS 最显着的特性:
将Qt移植到RTEMS的过程包括以下步骤:
移植Qt本身可以在下面的插图中展示: ![]() 我们不会详细描述整个过程(从配置电路板到创建新的QPA),尽管这可能是研究中最有趣的部分。但这篇文章的目的只是为了告诉你有关这项研究,而不是提供一步一步的手册。如果您有兴趣开展试点项目,请联系我们并提交您的请求。 结果为了演示结果,我们为每个演示板应用程序创建了三个固件。 Qt Widgets演示固件大小:6.6 MB。 内存需求:3.4 MB。 正如我们所看到的,Qt Widgets运行得很好。 Qt Quick / QML演示固件大小:9 MB。 内存需求:5 MB。 很容易看出,Qt QML的拖动动画在STM32F4 / F746上有点慢,但时钟工作得很好。这种行为是缺乏JIT编译的极好例子,因为这些MCU不支持双精度浮点。但是,STM32F769确实支持它,因此拖动动画在这块主板上看起来更漂亮。 电动自行车演示我们决定不停止简单的演示,对于第三个固件,我们试图运行更有趣的事情。例如 - 我们最近的电动自行车演示。 固件大小:13 MB。 所需RAM:10 MB。 甚至这个演示也能正常工作。顺便说一下,得益于Qt的跨平台特性,我们不需要更改一行代码就可以对RTEMS进行编译(原始目标在Linux上运行)。 结论我们可以得出结论,我们的研究是成功的。当然,它现在不是一个现成的解决方案,但是我们会继续努力。 目前的任务包括以下内容:
那么,这项研究对你和你的项目意味着什么?QPA代码库中的新QPA和其他修改的源代码将在开放源代码(很可能在GPLv3下)中提供,当然也可以在商业许可证中提供,因此您可以自己尝试。 电子工程师时间点评:这个消息相信对很多嵌入式开发者来说是个非常好的消息,对Segger以及其他嵌入式GUI提供商来说可能是个坏消息,在中高端mcu上的GUI设计多了一家强大的竞争对手。 关注电子工程师时间,Get更多成长技能 ![]() ---------------------------------------------------------------------------------------------------------------------- 我们尊重原创,也注重分享,文章来源于微信公众号:电子工程师时间,建议关注公众号查看原文。如若侵权请联系qter@qter.org。 ---------------------------------------------------------------------------------------------------------------------- |