您的位置 首页 解答

根据uITRON 3.0的嵌入式GUI体系规划概述

基于uITRON 3.0的嵌入式GUI系统设计概述-随着嵌入式系统技术的不断发展,各类嵌入式应用对人机交互界面的要求也越来越高,这就使得对嵌入式图形用户界面的需求越来越迫切。与一般系统上的图形用户界面相比,嵌入式系统图形用户界面要求轻型、占用资源少、高性能、高可靠性、可配置等特点。

跟着嵌入式体系技能的不断发展,各类嵌入式运用对人机交互界面的要求也越来越高,这就使得对嵌入式图形用户界面的需求越来越火急。与一般体系上的图形用户界面比较,嵌入式体系图形用户界面要求轻型、占用资源少、高性能、高可靠性、可装备等特色。

本规划是在东南大学国家专用集成电路体系工程技能研究中心自主研制的,并在遵从uITRON 3.0规范的RTOS-ASIX OS基础上规划出一套合适于手持设备、仪器仪表等运用的图形用户界面逐个ASIX Window。该图形用户界面选用面向对象的规划思维,依据音讯循环和事情驱动机制,构建了比较完好的窗口体系,为用户供给了类Win32 API的用户编程接口。考虑到一般嵌入式运用的屏幕较小,以及嵌入式体系处理器与存储器容量的约束,ASIX Window在规划上抛弃了窗口剪切等杂乱特性,大大降低了体系的杂乱性,减少了对体系资源的占用。由于选用依据控件的规划概念,ASIX Window十分合适削减,能够依据用户的需求便利地添加或删减控件,添加了体系的可削减性。该图形用户界面已成功运用于PDA,电子词典,税控收款机等多款产品规划中。

1 与操作体系内核的接口

ASIX Window的全体架构是依据音讯分发,音讯循环以及音讯处理之上的。整个ASIX OS渠道的结构如图1所示。图1中,最底层的是体系的音讯源,包含中止(键盘、触摸屏等)和定时器,一般将它们统称为中止源。中止产生后,进入中止处理程序,该中止处理程序保护其对应的缓冲区后(假如它需求缓冲区),设置事情产生(经过调用内核的事情标志体系调用)。由于体系使命是堵塞在这个事情标志上的,并且体系使命的优先级最高,体系使命将被内核调度运转,体系使命依据所产生事情的类型,来进行相应的处理。比方说,假如是笔中止事情,中止处理程序将笔的坐标信息存放在相应的缓冲区中,并设置相应的事情标志,体系使命将笔坐标的数据转化为相应活动区域(Active Area)的音讯,并由体系使命将这个音讯发送到当时需求该中止事情的使命中。LCD显现,键盘和笔中止一定是由前台使命(具有屏幕的使命)接纳的,其他外围设备所对应的中止源则由占用该资源的使命接纳。

依据uITRON 3.0的嵌入式GUI体系规划概述

每个使命都有一个自己的信箱(Mail B0x),在每个信箱上都保护着一条音讯行列,一切发往该使命的音讯都衔接在这个行列中。使命代码应该经过音讯循环不断地从该行列中取音讯并处理,假如音讯行列为空,则该使命堵塞,由ASIX OS内核挑选下一个安排妥当的高优先级使命运转。

体系使命是内核的扩展,供给体系根本的服务功用和接口。它接纳体系一切的中止资源并将相应的中止事情翻译成为相应的体系音讯,并将该音讯分发到对应的运用程序使命;体系使命一同保护体系中一切使命的信息,担任确认前台使命(具有显现屏幕和用户输入焦点的使命,前台使命纷歧定是CPU正在运转的使命)以及前台使命的切换。体系使命堵塞在底层中止的事情标志上,体系使命具有最高的优先级。

在体系使命之上是服务使命。服务使命担任供给体系的其他扩展服务。服务使命没有屏幕显现(类似于Linux中的看护进程),服务使命堵塞在自己的音讯行列上。服务使命具有第二高的优先级。

运用程序使命是用户运用的各个运用。运用使命堵塞在自己的音讯行列上,一切的运用程序一般都应该具有屏幕显现,一切的运用程序在同一优先级上。

2 窗口办理

ASlX Windows是依据音讯驱动的图形用户接口。从ASIXWindows的视点来看,运用程序是由一组窗口和控件组成的,程序的功用是经过窗口的操作来完成的。控件是在ASIX Windows中定制的具有特定功用的独立模块,例如:按钮、菜单、下拉框、软键盘等。在ASIX Windows中,每一个控件在数据结构上都被描绘为一个窗口(也便是说,在数据结构上,窗口和控件是相同的),不同的是,控件是作为某个窗口的子窗口。在数据结构大将窗口与控件一致,使得整个体系的结构更简略,对窗口的操作与对控件的操作能够一致到一同,这使得体系的编程接口能够一致到窗口的操作函数上。在ASIX Windows中一切的窗口操作,不论是窗口或是控件,都运用这些一致的函数。体系经过下面这个一致的数据结构来对一切的控件进行办理。

typedef struct asix_window

{ struct asix window *prey}//指向前一个兄弟窗口

struct asix_window *next;//指向后一个兄弟窗口

struct asix_window *child;//指向子窗口链表

/*本窗口的相关ID*/

WNDCLASS *wndclass;//指向本窗口的窗口类

U32 task_id; //本窗口所属使命的使命号

U32 wnd_

id; //本窗口ID号

U32 parent_id; //本窗口的父窗口 ID号

/*本窗口的方位、状况、风格以及窗口标题等*/

U32 status; //本窗口状况

U16 x; //本窗口左上角x坐标

U16 v; //本窗口左上角Y坐标

U16 width; //本窗口的宽度

U16 hight; //本窗口的高度

char *capTIon} //本窗口标题

U32 style; //本窗口风格

/*指向本窗口私有数据结构的指针*/

void *etrl_str; //指向本窗口的私有数据结构

}ASIX_WINDOW;

实践上,不同的控件具有不同的功用和结构,所以它们的操作是不同的。为了具有一致的操作函数接口,为每一个不同的窗口或控件界说了相应的窗口类,窗口类实践上是每种控件的模版,这个模版界说了与该控件相关的内容。当运用程序员调用CreatWindow函数创立某类控件时,CreatWindow查找该类控件的窗口类,并依据窗口类中的界说,调用与该控件相关的创立函数,进行实践的创立作业。然后CreatWindow填写相应的数据结构,描绘该控件

类的实例,并将其链接到体系窗口链表中去,以便后续的办理。运用窗口类描绘不同控件规划的一同,能够将不同控件的开发独立于体系构架的完成,使得控件的开发能够独立进行。运用独立窗口类来描绘每个控件的另一个优点是能够十分便利的对ASIX Window进行削减。下面给出窗口类数据结构的界说。

typedef struct window_class

{ U8 wndclass_id; //窗口类的ID号

//CreateWindow()调用本函数履行控件的详细创立

STATUS (。create)(char‘capTIon,U32 style,U16 x,

U16 Y,U16 width,U16 hight,U32 wndid,U32 menH,void*

*etrl_str,void*exdata);

//DestroyWindow()调用本函数履行控件的详细删去

STATUS (*destroy)(void*ctrl_str);

//DefWindowProc()调用本函数进行音讯处理

STATUS (。msg_proe)(U32 win_id,U16 asix_msg·U32

lparam.void*data,U16 wparam.void*reserved);

//GetMessage()调用本函数进行底层音讯的翻译与转化

STATUS (*msg_trans)(void*ctrl_str,U16 msg_type,

U32 areald.P_U16 data,U32 size,PMSG trans_msg);

//RePaintWindow()调用本函数重绘本窗口类控件

STATUS (*repaint)(void*ctrl_str,U32 Iparam);

//SetWindowText()调用本函数设置本窗口类控件的标题

STATUS (*capTIon)(void*ctrl_str,char*capTIon,void* exdata);

WNDCLASS;

图2所示是体系中窗口链表的结构,体系还保护了一张使命链表,每个使命操控块(TCB)中都保留了指向本使命窗口链表的首指针。

依据uITRON 3.0的嵌入式GUI体系规划概述

3 音讯传递与处理

每个窗口(Form)都具有自己的音讯处理函数,该函数接纳来自体系(包含窗口和控件)的音讯并作相应的处理和动作。每一个窗口处理函数实践上便是一个音讯循环,窗口函数经过取音讯函数ASIXGetMessage()取得体系使命,并发送给该窗口的音讯进行处理。ASIX(GetMes—sage()取得体系音讯并进行相应的处理和音讯转化(实践上是将底层操作体系所供给的硬件音讯转化成ASIXWindow的音讯,该函数经过调用相应窗口类所界说的音讯翻译函数msg-trans()完成音讯的转化),然后窗口函数对音讯进行分检并作相应的处理,这部分代码是用户自己定制的,实践上是用户程序处理来自窗口和控件的音讯,用来完成该运用程序的功用。窗口函数调用ASIX Win—dows的控件音讯处理函数DefWindowProc(),该函数是一个音讯过滤器及转化器,它接纳非用户的,归于控件自己的音讯(这个音讯或许来自用户的操作)。它首要扫描由取音讯函数取得的音讯,查看其间是否有归于ASIXWindows控件的音讯。假如该音讯归于某个控件,则音讯处理函数调用体系窗口链表中该控件所对应的窗口类所指明的音讯处理函数,处理这个音讯履行相应的动作并或许宣布相应的音讯(例如,当用户点击某按钮时,控件音讯处理函数将接纳该点击事情,并履行按钮被点击的动画,一同发送一条该按钮被点击的音讯)。

4 图形接口

ASIX Windowr的图形接口规划引入了硬件笼统层的概念,图形函数(Graphic API)不直接操作硬件,而是经过调用硬件笼统层供给的一组根本函数来作详细的图形制作作业。硬件笼统层函数将依照设备相关的格局即将显现的内容首要填写到体系内存的一片缓冲区(VRAM)中,然后硬件笼统层的函数将依据传入的参数决议是否将数据复制到LCD操控器。假如所调用函数的运用使命当时具有LCD(前台使命),则将数据送往LCD操控器,不然该函数只是将数据写人VRAM缓冲区(该使命是后台使命)。硬件笼统层还供给了一个叫做Refresh的函数,该函数将把当时VRAM中的内容复制到LCD操控器的数据寄存器中。体系使命在运用使命切换的时分调用Refresh函数,将切换进来的使命中所属VRAM的数据刷新到LCD中去,完成屏幕的切换,如图3所示。

依据uITRON 3.0的嵌入式GUI体系规划概述

为了防止图形函数重

人时带来的问题,以及不同运用使命具有不同屏幕以及相应特点的问题,在新的规划中选用了图形上下文(G

raphic Context,简称GC)的结构。每个需求用到屏幕的运用使命都具有自己的图形上下文,该结构中保存与硬件无关的显现特点,比方当时色、背景色、当时线宽、当时填充形式、光标的方位、闪耀频率、光标巨细、显现缓冲区(VRAM)的头指针、物理屏幕在逻辑屏幕中的方位坐标等信息。

实践上,这样的规划一方面能够完成逻辑屏幕的概念,即运用程序能够在比实践物理屏幕大的屏幕上制作图形;另一方面.不论运用使命在前台(具有LCD)仍是在后台(不具有LCD),都能够进行图形函数的调用。假如是前台使命,制作的图形会马上显现在LCD上;假如是后台使命,图形被暂时“制作”到该使命的VRAM中,等下次该后台使命切换到前台时,体系使命(System Task)将调用Refresh函数将该使命的VRAM刷新到LCD上。

依据uITRON 3.0的嵌入式GUI体系规划概述

结 语

依据以上内容,规划完成了GUI的原型体系,并在PDA运用中选用了该GUI。为了便利运用程序员的开发,还在此基础上规划了依据MS VC++的GUI模拟器。图4所示是ASIX Windcw在PDA体系和模拟器上的运用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/97945.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部