内置Chrom-Art图形加速器的GUI架构设计

2015-09-12 06:42:52黄洁逢吴先球
单片机与嵌入式系统应用 2015年11期
关键词:链表指针触摸屏

黄洁逢,吴先球

(华南师范大学 物理与电信工程学院,广州510006)

黄洁逢(硕士研究生),研究方向为嵌入式系统应用。

引 言

以STM32为代表的ARM Cortex-M 系列微处理器,具有优越的处理性能和丰富的片内外设,被广泛应用于工业控制、仪器仪表和智能家电等领域。由于该系列处理器主要偏向于控制应用,对图形显示方面的支持不是很好,导致其人机交互体验难以得到提升。在硬件上,过去常用的做法是采用8080或6800接口驱动分辨率较低的16位彩色液晶屏,在软件上,一般采用Micrium 公司的μC/GUI系统,但是最终设计出来的人机界面缺乏美观性,操作体验较差。

ST 公司推出的STM32F4x9 系列微控制器,内存控制器增加了对SDRAM 的支持,内置LCD-TFT 控制器,并 配 备 专 用 DMA 控 制 器 Chrom-Art Accelerator(DMA2D),在很大程度上弥补了STM32 图形显示方面的缺陷。为了在STM32上实现良好的人机交互体验,需要设计一种新的嵌入式GUI 实现方法,以充分利用Chrom-Art图形加速器的硬件功能,因此本文提出一种基于智能区域的嵌入式GUI架构,实验证明其具有较强的可行性。

1 图形架构原理

STM32的Chrom-Art图形加速器实际上就是一个专门用于传送显示数据的DMA 控制器,其主要功能包括数据复制、格式转换和颜色混合,如图1 所示。Chrom-Art能将矩形内存区域S1 和矩形内存区域S2进行颜色混合,并 将 数 据 转 换 成RGB555 格式后写入矩形内存区域D1。

在实际应用中,利用Chrom-Art可以方便地实现:①对位图进行局部截取并显示到液晶屏的指定位置;②同时使用多种不同RGB数据格式的位图;③多图层透明显示。

图1 Chrom-Art功能示意图

本文提出的基于智能区域的GUI图形架构,能够充分利用Chrom-Art加速器的功能,在减轻CPU 负担的同时提高了显示效率。智能区域是用于图形管理的基本单元,包含了区域的位置、尺寸、属性字和从属关系等信息,通过这些信息可以快速地对区域进行查找定位,并做相应的显示输出及触摸输入检测等操作。区域间的显示关系及逻辑结构如图2所示,不同区域通过相互嵌套建立父子关系,隶属于同一父区域的子区域为并行区域,子区域继承了父区域的显示范围、相对位置、透明度等信息。父区域与其第一个子区域通过双向链表连接,并行子区域同样以双向链表连接,其连接顺序由区域图层号决定(图2右半部分中标号为区域图层号)。

图2 区域间的显示关系及逻辑结构

2 图形架构设计与实现

整个架构采用面向对象的编程思想,使用ANSI C编写,每种特定功能的智能区域对应一个对象类型,能够非常方便地进行裁剪与扩展。程序分为以下几个功能模块。

2.1 智能区域管理

区域对象通过结构体进行定义,一个通用区域的结构体包含以下基本成员,其他功能区域会根据需要增加额外的成员。

typedef struct CArea{

unsigned int attr; //区域属性字

struct CArea*prev;//上一个区域指针struct CArea*next;//下一个区域指针struct CArea*par;//父区域指针

struct CArea*chd;//第一个子区域指针

Afun fun; //绘制区域的回调函数指针int x; //区域相对横坐标int y; //区域相对纵坐标unsigned shortw; //区域宽度unsigned shorth; //区域高度}CArea;

对区域的管理包括以下操作:①区域创建包括申请内存空间、设置属性字、注册回调函数;②区域嵌套包括设置父区域指针、根据图层号添加链表节点;③区域删除包括删除链表节点、清除父区域指针、释放内存空间。

根据功能不同,智能区域分为以下几种类型,并可根据需要继续扩展:

①普通区域CArea,最常用,占用资源最少;

②按键区域BArea,具有自锁和互斥功能;

③自由区域FArea,可透过区域窗口显示更大的虚拟空间;

④页面区域PArea,区域容器,用于区域间的切换;

⑤列表区域LArea,可滚动显示多个列表成员的区域;

⑥文本区域TArea,专门用于文本输入支持的区域;

⑦扩展区域EArea,扩展出一个子工作空间。

2.2 区域的显示输出

为了使区域显示在正确的图层上,所有区域的输出顺序遵循两个原则:①先输出父区域,后输出子区域;②并行区域按照链表连接顺序依次输出。

架构通过定义一个顶层区域,作为显示输出和触摸检测的入口,某些情况下用户只需要刷新与操作某一局部区域,将其设置为顶层区域,可以极大地提高处理效率。由于每个智能区域都是等价的操作对象,可采用迭代方式进行处理,使程序更加高效的同时减少了代码量。

2.3 触摸操作检测

区域的输入检测过程与显示输出类似,不同的是两者对区域的查找顺序刚好相反:优先检测子区域,再检测父区域,并行区域则按照链表连接顺序逆向检测。

根据实际需求设置以下7种触摸操作模式:

①短触发,第一次检测到触摸屏被按下;

②长触发,按下触摸屏一定时间,且位置不改变;

③短按,按下触摸屏并在短时间内松开,且位置不改变;

④长按,按下触摸屏一定时间后松开,且位置不改变;

⑤拖拽,按下触摸屏后位置发生改变;

⑥惯性滚动,拖拽模式下松开触摸屏,且松开时速度不为零;

⑦位置恢复,由于拖拽或惯性滚动使区域位置超出限定边界。

其中惯性滚动模式和位置恢复模式不是必需的,但加入这两种模式能够使操作方便,且显示效果生动。

2.4 事件处理

事件采用动态注册的方式,每种操作对应一个事件链表,注册事件就是根据操作类型往相应的链表上挂接事件节点。当某一操作发生时,该模块就会对相应的事件链表进行扫描,判断链表上每个事件的区域指针是否与当前操作区域相符,若相符,则执行事件回调函数。

2.5 效果处理

效果处理模块为用户提供了自定义动态效果支持,效果对象的结构体定义如下:

通过该模块可以实现区域的水平移动、垂直移动及透明度变化等动态效果(可以同时建立多个独立效果来实现组合效果),具体实现方式有两种:①设定目标值dval,程序通过简单的差补计算自动完成;②指定动态数组array,目标参数将严格按照数组值变化。

2.6 图片素材与字符的显示

图形架构仅负责区域的管理及功能实现,为了设计出美观的界面,往往需要大量的图片素材,这时可以在系统初始化的时候,动态地将界面素材从外部存储设备载入SDRAM,整个硬件系统工作过程如图3所示。系统从U盘或SD 卡载入素材后,图形架构会根据区域的位置及属性信息调用相应的素材,裁剪出可见区域,然后交给Chrom-Art加速器进行处理并传送到显存,最后由LCDTFT 控制器刷新显示到显示屏上。

图3 硬件工作过程

在字符显示上加入了对矢量字体的支持,FreeType2是一款占用空间小、高效、高度可定制的开源字体引擎,经过功能裁剪,可以用来解析常见的TrueType字体文件,它能够输出任意大小、带256灰度阶的字模,把字模数据作为区域的透明通道就可以显示带有锯齿效果的字符。

3 图形架构应用

这里使用该图形架构设计一个操作界面来测试实际效果,主控制器采用STM32F429IGT6,工作频率为180 MHz,外扩32 MB SDRAM,外接分辨率为480×272的24位彩色液晶显示屏,实现效果如图4所示。

图4 界面效果图

由于采用了带透明通道的ICO 图标和矢量字体,整个界面美观性大大提升,触摸操作支持单击图标、下拉通知栏、切换页面、滚动列表、移动窗口等常见操作方式,且屏幕刷新率平均可以达到25fps(帧率受限于界面复杂度),动态效果流畅,人机交互体验良好。界面资源占用情况如表1所列,资源使用量较少,能够满足实际应用需求,由此证明本图形架构具有良好的可行性与实用性。

结 语

本文设计的基于Chrom-Art的GUI图形架构相对于以往的GUI系统做出了很大改进,不仅界面设计变得简单高效,而且资源占用少、可扩展性强。随着STM32 系列微处理器在很多领域的广泛应用,需要人机交互的场合都可以使用该架构进行界面开发,从而大大简化开发过程,具有一定的实际应用价值。

[1]刘军.例说STM32[M].北京:北京航空航天大学出版社,2011.

[2]王兰英.基于STM32 嵌入式系统的μC/GUI移植与实现[J].四川理工学院学报:自然科学版,2012(1).

[3]肖林京,于鹏杰,于志豪,等.基于STM32和emWin图形库的液晶显示系统设计[J].电视技术,2015(1). 25 22

[4]李建红,刘丹,徐展.基于μC/GUI库的外扩中文字库研究与实现[J].计算机工程,2014(2).

[5]王爱林,王晨.基于μC/GUI和S1D13513的图形显示设计[J].工业控制计算机,2013(6).

[6]金锋,武志辉.轻量级嵌入式Linux图形驱动程序与图形用户接口[J].北京理工大学学报,2008,28(3).

[7]黄秀珍,何加铭,邰晓英.基于FreeType 嵌入式矢量字体引擎的研究[J].宁波大学学报:理工版,2010,23(4).

[8]宫勇,杨颖,张三元,等.图形面板布局特征对人机交互效率的影响[J].计算机辅助设计与图形学学报,2012,24(9).

[9]单筱秋.浅议人机交互界面研发中的用户体验设计[J].南京艺术学院学报:美术与设计版,2013(6).

[10]何岩.浅析计算机图形技术及其应用系统[J].消费电子,2013(8).

猜你喜欢
链表指针触摸屏
PLC和触摸屏在卫生间控制系统的应用
基于二进制链表的粗糙集属性约简
偷指针的人
娃娃画报(2019年5期)2019-06-17 16:58:10
跟麦咭学编程
皮肤“长”出触摸屏
基于链表多分支路径树的云存储数据完整性验证机制
为什么表的指针都按照顺时针方向转动
基于改进Hough变换和BP网络的指针仪表识别
电测与仪表(2015年5期)2015-04-09 11:30:42
链表方式集中器抄表的设计
电测与仪表(2014年1期)2014-04-04 12:00:22
ARM Cortex—MO/MO+单片机的指针变量替换方法