在单片机(MCU)上运行的Qt版本即将放出
今天老wu收到邮件推送,在9月4号CEST时间早上10点(换算成北京时间应该是下午4点),QT将举行主题为Qt for MCUs网络研讨会,Qt for MCUs将正式对外释出了。
大概2017年底的时候,老wu就已经听说了Qt for MCUs这个项目,我们知道,QT一直是在X86或者ARM 9、Cortex-A这样的高性能处理器平台上运行的,特别是到了QT5对运行环境对硬件的要求可不低
- 256 MB 的RAM;
- 500 MHz CPU (推荐1 GHz);
- 支持OpenGL ES 2.0.
作为起步的硬件配置要求,同时还需要像Windows、Linux、VxWorks这样的操作系统的运行环境支持。
而如果要用QT来做人机界面,Cortex-A级别的硬件加上Linux这样的操作系统,这两样对于软硬件开发要求都是不低的。
如果做人机界面的话,MCU具有很多成本方面的优势,体积小,功耗低,PCB Layout复杂度相对于Cortex-A那样级别的MPU来说要低很多,所以无论是整个BOM成本还是开发人员的要求MCU都相对要有优势。
我们都想在MCU上运行用户体验与智能手机上差不多的图形界面,比如智能家电、可穿戴设备、智能玩具等等,我们需要可滑动的触控体验、需要智能图表与风骚的数据曲线,丰富的色彩和酷炫的界面间切换过渡特效,而不是傻大黑粗的点阵字符屏。
当然目前在MCU上也不乏风骚的GUI解决解决方案,比如emWin、TouchGfx,但他们要么闭源而且收费还贼贵、要么对开发来说不够友好甚至反人类、界面效果虽然不再傻大黑粗但老wu觉得还不够骚。
而如果MCU上能用上QT框架那简直碉堡了,一套框架从X86的上位机界面到Cortex-A的高性能终端甚至低成本的MCU都可以保持一致的开发体验。Qt的跨平台特性、五花八门包罗万象的类库(包括图形界面)、丰富的例程以及给力的开源社区,想想都令人激动。
要在MCU上运行Qt在以前是不敢想的,毕竟MCU的硬件资源跟MPU那完全不是一个数量级的,不过随着高性能MCU的面市,现在的高性能MCU不再是AT89C51那般的孱弱了,像STM32H7系列高性MCU的主频已经高达480MHz,有1 MB RAM和2 MB闪存。
但QT要想跑在MCU上边,还是需要QT团队做大量移植和简化的工作,首先就是要解决的OpenGL ES 2.0 硬件加速这个依赖需求,在MCU上肯定是没OpenGL ES 2.0 GPU加速的,为了降成本,有些Cortex-A MPU上也没有GPU硬件加速,所以大概在QT 5.7的时候QT引入了Qt Quick 2D Renderer,这样QT的Quick组件就可以在么有OpenGL ES 2.0 GPU加速的平台上运行了,QT在运行时可以根据实际的硬件情况,切换到使用栅格绘图引擎渲染画面,当然, 这需要耗费CPU的的算力啦,所以尽量不要弄太复杂的过渡动画特效。
然后还要移植Qt Core、Qt GUI、Qt Widgets、Qt QML、Qt Quick Controls 2、Qt Network这些模块,以适应MCU的资源环境,QT还需要C++11编译器的支持,Qt内部使用了大量的POSIX接口函数,所以他们还移植了一个开源的实时操作系统—RTEMS作为底层的支撑。
目前Qt官方支持的MCU运行平台有意法半导体家的STM32F7系列以及NXP家的i.MX RT1050系列,目前官方给出了演示Demo的二进制文件,老wu已经下载下来放到网盘里了,网盘链接在这里:
链接:https://pan.baidu.com/s/17gmmzhJbAtHTVDqOtU-ZkA 密码:g68c
注意,这里给出的是编译好的二进制文件而不是源代码,目前老wu还没有Qt for MCUs项目的源代码获取方式,有可能在9月4号的研讨会后会给出,不过在demo演示文件里附带的doc来看,Qt for MCUs的GUI运行库名称叫做Qt Quick Ultralite,版本号还处于0.1-alpha1阶段,就目前的完成度来看,Qt for MCUs还有很多移植工作要做,Qt Quick Controls 2很多必要的组件还未提供支持,估计正常可以用在生产环境的还需要在等上一年吧。
高性能MCU+Qt Quick Ultralite,老wu觉得以后会是MCU GUI开发方面一套不错的选择,经过近20年的沉淀,QT的开发环境已经很完善了,它还是跨平台的,而且还开源,他家既有基于社区的开源版本也有收费的商业版本,Qt For MCUs项目也会是基于这样的授权原则,既有开源版本也有商业授权版本可供选择。
从X86的桌面到Cortex-A的智能终端,现在还加入了MCU的支持,Qt Quick Ultralite负责GUI主机,Qt Core还可以作为MCU逻辑部分的开发,使用上C++优秀的面向对象的语言特性,底层还有个RTEMS开源的实时操作系统,以后的开发之日可不要太好过哦。