【Qt 公司近日宣布了新的工具包:Qt for MCU。】
有感博文
>blog.qt.io/cn/2018/08/15/qt_on_microcontrollers_mcu/
这篇博文翻译让我有一些启发
之前也一直有疑惑,能否在单片机(MCU)上运行Qt呢?Qt能否不依赖操作系统运行(裸跑)?很早时候,就听说了Qt for MCUs这个项目。看到这篇博文之后也深有体会。
QT在单片机上的运行演示视频
简单介绍这个项目,Qt for MCU 能够在没有操作系统的设备上运行,允许开发人员在具有成本效益的单片机上创建流畅的用户界面,基于 Qt 的应用程序现在可以部署在传统操作系统与基于 ARM Cortex M7 的单片机上。
项目的意义何在
我们都知道,体积小,功耗低加上低成本是单片机的主要特性,PCB Layout复杂度相对于Cortex-A那样级别的MPU来说要低很多,在要求不是特别高的情况下,低廉的价格对批量生产优势明显。而且无论是整个BOM成本还是开发人员的要求MCU都相对要有优势。
Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。它的跨平台特性、五花八门包罗万象的类库(包括图形界面)、丰富的例程以及给力的开源社区配合嵌入式开发是一件创新点高level的事情。
Qt for MCU 是如何实现的呢?
答案是 Qt Quick。Qt Quick是Qt 4.7 中推出的一项新技术。Qt Quick 是一种高级用户界面技术,使用它可轻松地创建供移动和嵌入式设备使用的动态触摸式界面和轻量级应用程序。 其核心是 QML,从语法上看,它有一种 ON 感觉,低开销运行时使 QML GUI 能够与后端 C/C++ 代码绑定,使 GUI 可以跨多个平台进行移植。
Qt for MCU 软件栈如图
通过一个新的 QML 到 C++ 的转换,再加上一个新的声明性属性绑定引擎,在为 MCU 开发任何应用程序的同时,开发人员仍然可以使用他们强大的声明性 UI 语言 QML 和丰富的现成 Qt Quick 控件集来实现功能,没有操作系统的情况下,直接在处理器运行,业界称为“在裸金属上运行”
技术难点
Qt 一直是在x86、A9、Cotex-A 系列运行,那么既然是单片机,暂时来说也是对硬件环境有高要求的。
256 MB 的RAM;500 MHz CPU (推荐1 GHz);支持OpenGL ES 2.0.QT要想跑在MCU上边,还是需要QT团队做大量移植和简化的工作,然后还要移植Qt Core、Qt GUI、Qt Widgets、Qt QML、Qt Quick Controls 2、Qt Network这些模块,以适应MCU的资源环境,QT还需要C++11编译器的支持,Qt内部使用了大量的POSIX接口函数
总的来说,有两个必要条件:
兼容POSIX的操作系统兼容C++11的编译器前瞻
经过20年的发展,QT的开发环境也越来越完美了,但是从开发的角度来说,从X86的桌面到Cortex-A的智能终端,并且Qt for MCUs项目之后,现在还加入了MCU的支持,Qt Quick Ultralite负责GUI主机,Qt Core作为MCU逻辑部分的开发,使用上C++优秀的面向对象的语言特性,底层还有个RTEMS开源的实时操作系统,这对开发人员来说,挑战巨大。从文章基于STM32F769 的实验来看,还有很多的任务要做,移植Qt本身表述如下
总结
总而言之,这是一个巨大的进步,虽然在MCU上也不乏 ** 的GUI解决解决方案,比如emWin、TouchGfx,但他们要么闭源要么收费贼贵、要么对开发来说不够友好甚至反人类、界面效果虽然不再傻大黑粗但也还不够骚气蓬勃,这需要我们贡献自己的力量,并且走向前沿,努力创新。