Qt For MCU 2019 网络研讨会内容

 Qt For MCU 2019 网络研讨会内容

8月22号的时候,老wu在博客里预告了9月4号有Qt For MCU 2019的网络研讨会视频直播,不知大家有没有看直播,如果当时忙于工作没有时间看直播也没关系,老wu这里将Qt For MCU 2019网络研讨会的视频和演示PPT撸过来了,分享给大家慢慢看。

Qt for MCU 2019 网络研讨会PPT

如果没有时间看视频也没关系,老wu对Qt For MCU 2019研讨会内容圈出了重点在这里与大家探讨一下。
等等…Qt是什么鬼?我为什么要关注Qt For MCU?我是怎么知道吴川斌的博客这么棒的一个技术博客站的? 😂
先科普下Qt到底是什么鬼
也许很多同学还不是太了解Qt,但你们用过的很多跨平台的软件都有Qt的身影,比如Autodesk Maya、Cadence Allegro、WPS Office等等
Qt(/ˈkjuːt/,发音同“cute”)是一个跨平台的C++应用程序开发框架。Haavard Nord和Eirik Chambe-Eng于1991年开始开发“Qt”,1994年3月4日创立公司,最早名为Quasar Technologies,然后更名为Troll Tech,然后再改为Trolltech,中文名是“奇趣科技”,2008年6月17日被Nokia公司收购,以增强该公司在跨平台软件研发方面的实力,更名为Qt Software。后来Nokia不行了,出售了很多资产,Nokia旗下的Qt业务及软件技术也被Digia全面收购,Digia继续对Qt的跨平台特性进行扩展,将Qt应用带到了到Android、iOS及Windows 8平台上。
Qt是一套跨平台的应用程序开发框架,一次编码,可以编译到Widnows、Linux、Mac OS、IOS、Android等操作系统上运行并且有一致的应用体验(当然,除了平台特定的特性除外)。
Qt拥有完善的C++程序库,集成了数据库、OpenGL库、多媒体库、网络、脚本库、XML库、WebKit库等等,还加入了进程间通信、多线程等模块,极大的丰富了Qt开发大规模复杂跨平台应用程序的能力。
之前Qt的界面是基于QWidget的,类似于微软的MFC库,后来Nokia又创造了Qt Quick和QML。QML是基于JavaScript、宣告式编程的编程语言,主要用于移动应用程序,注重于触控输入、流畅的动画(60张/秒)和用户体验。
用QML来宣告式的编写程序界面,然后C++来负责后端业务逻辑的实现,就跟现在流行的WEB前后端分离一样,使用QT QML来开发人机界面更加现代也更加的简洁。
为什么要在单片机上使用Qt?
像单片机这样低运算能力的应用场景肯定会限制开发工具的选择,特别是涉及到图形界面(GUI)的问题。比如,必须要考虑固件大小,运行时的内存大小同时图形界面还要够骚,比如手机那样的触控体验,没事还要辣么滑动一下采购帅。
到目前为止,单片机还没有一个通用的图形界面库。当然,对于某些特定型号的单片机,有一些库可以部分解决类似问题,但远未完善。而且它们中,几乎不具备跨平台的能力。
尽管有些商业工具非常棒,但是它们基本上都是闭源的。您只能买到一个“黑盒子”,而且还有供应商锁定的风险。
我们已经在基于类似ARM Cortex-A这样的系统上用上Qt来开发人机界面了,用过的同学都觉得爽,跨平台特性、五花八门包罗万象的类库(包括图形界面)、丰富的例程以及给力的开源社区,实在是美滋滋,像TI、NXP、瑞萨等等主流MPU厂商的官方板级支持包都对Qt5提供了支持。
但如老wu上边所述,Qt它的出发点是要解决复杂应用的跨平台开发问题,所以Qt的框架太庞大了,它的运行基本配置要求是:

  • 256 MB 的RAM;
  • 500 MHz CPU (推荐1 GHz);
  • 支持OpenGL ES 2.0 硬件加速的GPU

这些硬件资源要求如果是以前对于单片机来说那是不敢想象的,但ARM它想了,还特么实现了,基于ARMv7E-M的Cortex-M4、Cortex-M7高性能系列MCU,主频高达四五百MHz,还可以外扩DRAM。
单片机的硬件素质已经满足Qt运行的基本要求,还有一个市场趋势也在促进Qt往MCU方面发展,就是现在越来越热的物联网应用,更具体点的就是人工智能、自动驾驶、智能家居、智能制造、工业物联网等等的落地,物联网的应用场景包括了个人到家庭,工业智能制造到商业消费,未来物联网的市场增速将远超目前的PC和手机市场,这样的增长使得物联网将成为下一个十年的风口。
人机界面对人工智能、自动驾驶、智能家居、智能制造等应用起着非常重要的支撑作用,物联网即强调物与物之间的互联,也更加强调人与物联网的交流,需要一个非常简便的、用户体验非常好的人机界面充当媒介。正如我们在智能手机上,用触控解决了手机跟人交流的非常简单的方式。而未来的物联网人机界面,将包括智能家居、AR/VR、汽车、可穿戴设备和个人健康等领域。
有了硬件基础有了市场钱景,将Qt移植到MCU,这么美好的事情,老wu想得到,Digia那是早就想到了。
让我们来看看研讨会上,Qt家对未来嵌入式硬件设备的市场需求的预测:

  • 实时性;
  • 低功耗;
  • 快速启动;
  • 尽可能低的BOM成本;

现在有很多基于android的人机界面,那个冷启动时间还是很久的吧,比如智能汽车的仪表,智能后视镜,你肯定想汽车一启动,两三秒内各种数据呈现就能够呈现。
低功耗更是MCU的强项了。
BOM成本方面还有整体软硬件研发成本方面,Cortex-M的MCU肯定是要比基于Cortex-A的MPU来说低得多的。
但是,Qt框架太庞大了,必须要阉割才能符合MCU的气质,所以Qt For MCU是阉割后的Qt Lite版,具体要阉割多少,Qt提供了阉割配置工具滴。
MCU上并没有支持OpenGL ES 2.0硬件加速的GPU,只有2D 图像硬件加速,针对这一特性,Qt For MCU的图形运行时也是不一样的,Qt官方开发了名为Qt Quick Ultralite的图形运行库以利用MCU上的2D加速功能。
当然,Qt Quick Ultralite相对于完整的Qt Quick也阉割了许多组件。
基于QML的现代声明式UI,会JavaScript就能撸QML,很适合前端人员,跨平台的,从上位机到嵌入式Linux到单片机,同一波人搞定,前端UI与的后端C++业务逻辑解耦,降低复杂度,美不美?
Qt For MCU目前老wu还是有些小失望的

首先是Cortex-M4/M7才能享用,Cortex-M3/M1/M0暂时无支持,ARMv8-M架构的Cortex-M23, Cortex-M33也无支持。

占用内存有点大,虽然压缩到了2-3M RAM的水平,但也需要外扩RAM 了。比如在NXP RT1050上演示的DEMO, 480×272的分辨率,16 bit 色深,需要522 kB内存来做帧缓冲,总内存228 kB + 1398 kB +522 kB的RAM。
最重要的是费用问题,Qt for MCU不是一个开箱即用的技术,跟MCU相关的底层支持需要QT官方的支持,Qt For MCU目前是纯商业版本,需要Qt的专业服务团队的定制优化。
Qt For MCU 打扰了 👋

吴川斌

吴川斌