基于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号