目前主流的嵌入式GUI开发技术中,RT-Thread/Persimmon、TouchGFX和emWin是最受人瞩目的。
 
  RT-Thread/ Persimmon是国内主导开发的实时线程操作系统RT-Thread中的图形用户界面,是一款面向嵌入式系统的,具备多窗口、多线程的,类似Android界面效果的C++ GUI,构建于RT-Thread物联网操作系统之上。目前也已经发展到了RT-Thread/Persimmon 2.0,支持设计器及脚本方式开发。
 
  尽管稍逊于安卓系统显示效果,但其资源占用率相比Linux方案低一个数量级,比安卓系统更是低几个数量级,成本也不高,适用于基于arm Cortex-M7/M4内核MCU、基于arm 9/arm 11/Cortex-A7内核的应用处理器/AI芯片之上。目前在NXP、全志等芯片上均有采用RT-Thread/Persimmon产品,在智能家居、楼宇自动化系统/设备以及音视频系统中得到了广泛应用。
 
  emWin是由德国Segger公司针对嵌入式平台开发的稳定、高效的图形软件库,属于老牌的嵌入式GUI,有着十几年的历史,软件架构和功能比较成熟。通过调用emWin提供的函数接口,开发嵌入式图形界面应用变得简单而快捷,但显示效果偏Win95/Win98风格。
 
  TouchGFX是一个采用C++语言编写的软件框架,可为嵌入式GUI提供出色的图形和流畅的动画,资源和功耗需求也很低,是RT-Thread/Persimmon的主要竞争对手。美中不足的是TouchGFX开发易用性较差,开发周期性长,而且其供应商Draupner Graphics已于今年7月被意法半导体(ST)所收购。
 
  RT-Thread创始人兼睿赛德电子科技总经理熊谱翔在接受《电子工程专辑》独家专访时表示,RT-Thread原有的以C语言模拟面向对象技术进行开发的RTGUI在代码简洁性、可读性和实用性上难以满足需求——简单来说,由触控GUI带来的面向对象需求,虽然使用C语言能够实现,但太过繁琐、复杂,和公司一直以来追求的简洁之美背道而驰。思考再三,他们决定依照现代化GUI风格重写GUI组件,即以C++为基础,支持多点触摸,提供类似signal/slot信号槽的使用方式,包括各种动画特效等。而这一支持界面动画效果的全新GUI,RT-Thread将其称之为柿饼(Persimmon) UI。
 
不一样的柿饼
  考虑到GUI已经成为人与机器沟通的桥梁,且嵌入式系统对GUI的需求越来越高,而这一切均要求有一个轻型、占用资源少、高性能、高可靠、可配置及美观的GUI支持。
 
  如前文所述,Persimmon是以C++编写的,因为GUI上的一系列控件以C++面向对象的方式来描述会更合理,例如一个button,一个label,一个image,每个对象有他们自己的属性、方法等。当然C++也会带来一些问题,比如调试困难,开发周期长。为了某一效果,代码反复迭代不说,做出来的UI效果还不像安卓、iOS那样炫丽,千篇一律等。
 

Persimmon GUI结构框图
 
  熊谱翔说,在这类传统GUI开发过程中,他们发现开发人员面临的痛点除了调试困难外,学习成本高,上手难度大,各种绘图API让人头大。更要命的是,UI一旦确定,后期维护困难,无法升级。 
 
  为了最大程度地降低上手难度,柿饼UI对原来的Persimmon 1.0版本进行了升级,变成了2.0版本,并把复杂的UI效果都封装成一个个的控件,同时对控件的配置要求降到最低。设计人员只需通过拖 - 摆 - 轻配,就能完成整个UI效果的设计,所见即所得。目前,柿饼UI设计器支持21个控件,不仅覆盖了开发者日常基本的需求,还有“旋转木马”这样具备炫酷特效的控件。
 
  同时,柿饼UI也强调快捷的开发方式,采用了美工+“前端”模式的设计理念,类似前端的小程序编程,使用JavaScript脚本语言来编写用户业务逻辑。也就是说,在美工准备好素材的前提下,设计人员只需通过柿饼UI设计器设计好UI框架,再通过JavaScript脚本语言,只需几行代码就可以实现控件间复杂的事件传递,行为响应等。这种做法,可将调试时间从之前的2-3个月大幅缩短至1周左右,开发者只需把精力集中在逻辑控制上即可,极大提升了开发效率。同时,柿饼UI设计器支持板级效果仿真,在PC端仿真的同时就能体验到真机运行的效果。效果满意后,开发人员可以在设计器内通过USB一键下载到设备,非常方便。
 

传统GUI和柿饼GUI对比图
 
作为中国人自己开发的GUI,尊重国人的开发体验是RT-Thread的头等大事。邹诚说,希望不管是控件的配置细节,还是软件的使用体验,都能够最大程度迎合用户的使用习惯,让大家一看就会,一用就能出成品,最大程度的降低开发难度和成本。
 
柿饼GUI支持对底层硬件的C/C++拓展。用户可以通过native C/C++ SDK生成动态链接库.so文件,加载到柿饼GUI内,然后就可以通过JS代码直接调用该动态库控制底层硬件了。而在设备联网的情况下,还可以通过OTA远程升级维护固件、UI应用等,摆脱了此前设计一旦定稿量产后,很难再对UI进行升级或者改动的尴尬。
 
针对有用户质疑柿饼UI并未开放出全部代码的做法,邹诚解释称,RT-Thread操作系统的推广与生态系统搭建仍然是公司的核心战略,开源免费是前提,这是毋庸置疑的。因此,工程师可以从官网上下载90%以上的相关资源。但是,考虑到公司的研发投入和代码使用维护的难度,确实有少数组件没有实现开源,需要与相关企业展开授权合作。
 
“相关企业自主开发GUI,或是寻找第三方替代方案目前来看都是不现实的,因为GUI控件的开发难度非常高。所以用户对于收费模式其实并不反感,但前提是我们必须要能够提供易开发、效果好、资源占用率低的高品质产品。”熊谱翔补充说。“我们正在计划推出高性价比的标准硬件模块,中小型客户可以直接内置于他们的终端当中,通过我们提供的UI设计器等工具,快速开发出带有酷炫GUI图形显示的产品”。
 

RT-Thread 柿饼GUI的更多相关文章

  1. RT Thread 通过ENV来配置SFUD,操作SPI Flash

    本实验基于正点原子stm32f4探索者板子 请移步我的RT Thread论坛帖子. https://www.rt-thread.org/qa/forum.php?mod=viewthread& ...

  2. STM32 + RT Thread OS 学习笔记[二]

    串口通讯例程 通过上面的练习,对STM32项目开发有了一个直观印象,接下来尝试对串口RS232进行操作. 1.   目标需求: 开机打开串口1,侦听上位机(使用电脑串口测试软件)发送的信息,然后原样输 ...

  3. STM32 + RT Thread OS 串口通讯

    1.   创建项目 a)   禁用Finsh和console b)   默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因 ...

  4. STM32 + RT Thread OS 学习笔记[四]

    1.  补注 a)      硬件,打通通讯通道 若学习者购买了学习板,通常可以在学习板提供的示例代码中找到LCD的相关驱动代码,基本上,这里的驱动的所有代码都可以从里面找到. 从上面的示意图可见,M ...

  5. STM32 + RT Thread OS 学习笔记[三]

    RTGUI 据说RTGUI是多线程的,因此与RT-Thread OS的耦合度较高,有可能要访问RT-Thread的线程控制块.如果要移植到其它OS,估计难度较大.目前还处于Alpha状态,最终将会包含 ...

  6. RT thread 设备驱动组件之USART设备

    本文以stm32f4xx平台介绍串口驱动,主要目的是:1.RTT中如何编写中断处理程序:2.如何编写RTT设备驱动接口代码:3.了解串行设备的常见处理机制.所涉及的主要源码文件有:驱动框架文件(usa ...

  7. RT Thread的SPI设备驱动框架的使用以及内部机制分析

    注释:这是19年初的博客,写得很一般,理解不到位也不全面.19年末得空时又重新看了RTThread的SPI和GPIO,这次理解得比较深刻.有时间时再整理上传. -------------------- ...

  8. RT Thread SPI设备 使用

    后记: 之前,我把SPI的片选在Cubemx中配置成了SPI_NSS.现在我给它改为了GPIO_OUTPUT.  同时参考了别人的类似的一个操作无线模块(采用SPI设备驱动)的例子程序(清楚了RTT的 ...

  9. Worker Thread

    http://www.codeproject.com/Articles/552/Using-Worker-Threads Introduction Worker threads are an eleg ...

随机推荐

  1. unittest 运行slenium(五)---运行代码并生成HTMLTestRunner报告

    整体代码如下: import os import sys import time import datetime import unittest import HTMLTestRunner # git ...

  2. html的基础知识点

    小编为大家带来html的基础知识Web 标准的好处让Web的发展前景更广阔 内容能被更广泛的设备访问更容易被搜寻引擎搜索降低网站流量费用使网站更易于维护提高页面浏览速度Web 标准构成Web标准不是某 ...

  3. [networking][sdn] BGP/EGP/IGP是什么

    引子 这是一个惊悚的故事,胆小的人不要点开.整个故事,是从这张图开始的. 整个图,分左中右三块.左边是tom和他所在的网络.右边是jerry和他所在的网络.这两个网络可以在世界上的任何一个角落.彼此有 ...

  4. Mysql:[Err] 1630

    Mysql错误 [Err] 1630 . 错误 1630 [SQL]select date_format(now (),'%Y%m%d'); - FUNCTION db.now does not ex ...

  5. OAuth2在微服务架构中的应用

    首先是为什么要在微服务场景使用OAuth2,这是因为使用了OAuth2后,就能向第三方系统提供授权. 其次是如何使用,见下图: 在微服务架构中使用OAuth2,有几个问题需要我们思考: 1. toke ...

  6. SpringBoot配置HTTPS,并实现HTTP访问自动转HTTPS访问

    [转]https://www.jianshu.com/p/8d4aba3b972d 推荐使用nginx配置https,因本文产生的任何问题不再做回复. 这里说一下为什么写这篇文章,因为我也是一个Spr ...

  7. 安装pytest

    1.安装pytest 2.执行一个用例 进入测试用例目录下,运行以test开头的一个用例. 执行成功. 备注:1.其实测试函数或方法只要以test开头就可以被运行的2.测试文件的名字,其实可以是任意的 ...

  8. 七、Linq To XML:XElement、XDocument

    一.概述 LINQ to XMLLINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework.NET Framework 编程语言中处理 XM ...

  9. PL/SQL存储过程

    一.概述 过程和函数统称为PL/SQL子程序,他们是被命名的PL/SQL块,均存储于数据库中. 并通过输入.输出和输入输出参数与其调用者交换信息.唯一区别是函数总向调用者返回数据. 二.存储过程详解 ...

  10. maven-pom文件的scope作用域

    1.compile 编译范围,默认scope,在工程环境的classpath(编译环境)和打包(如果是WAR包,会包含在WAR包中)时候都有效. 2.provided 容器或JDK已提供范围,表示该依 ...