论文部分内容阅读
摘要:开发了一套c语言实现的小型实时图形用户界面工具,介绍了GUI系统的基本设计思路。系统已成功应用于一款继电保护机产品。
关键词:实时;GUI工具;窗口;控件;继电保护机
中图分类号:???文献标识码:?文章编号:1009-3044(2007)16-31078-02
Design of tidy real-time GUI tools
FANG Wen-kai, ZHONG Rui
(National ASIC System Engineering Center, Southeast University, Nanjing 210096, China)
Abstract:This paper developed a set of GUI tools in real-time embedded system by using C language. The basic design idea of whole GUI system was include. This system has been successfully used in relay protection set.
Key words:Real time ; GDI Tools; Windows; Control; relay protection set
1 引言
图形用户界面是嵌入式系统的一个组成部分,甚至从某种意义上说可以认为是嵌入式系统的灵魂,因为在整个系统中这是用户接触最多的部分,所以图形用户界面的好坏直接决定着系统的功能。与在普通环境下的图形用户界面相比较,实时系统下的图形用户界面要求响应时间短,占用资源少,而且对图形质量要求不高——不要求有类似WINDOWS的桌面效果。而目前大多数可接触到的图形用户界面如 WINCE, MINGUI, Graphic出于其复杂性并不适用于一些小型实时系统。
MINGUI是应用于东南大学国家专用集成电路中心“继电保护项目”的一款图形用户界面工具,适用于小型实时系统。其体系结构为:
图1
2 体系结构
2.1 硬件抽象层(Hardware Abstract layer)
硬件抽象层将具体硬件与上层结构相联,它提供一个标准接口,为了不在嵌入式系统中引入复杂的库结构,这部分使用C代码编写。它向图形设备接口提供一个标准从1bpp到8bpp的直接写入图像帧缓冲。
2.2 图形设备接口(Graphic Device Interface)
图形设备接口,它提供设备上下文(Device Context)操作,调色板,基本GDI对象操作(包括画笔、画刷、字体、位图、区域等),这部分针对实时系统的快速要求,采用以空间换时间的策略。
2.2.1 设备上下文(Device Context)
设备上下文保存了图形显示设备的状态信息,可以认为它相当于我们画图时的画布。在MINGUI中我们使用一个数据结构实现。该结构为:
typedef struct{
DWORDMode; /*模式,低两位表示的是前景色和背景色的合成模式,倒数第三位表示汉字间距*/
PIXELForeground;/* 前景色*/
PIXELBackground;/* 背景色*/
VRAM*Vram;/*内容存储区 */
intVX,VY; /* 虚拟坐标*/
PWND Owner; /*指向拥有窗体 */
}TWndCanvas;
其中VRAM是一个数据结构,记载了一帧图像的坐标,像素,点,组操作等信息,组操作在后面描述。有了设备上下文信息,图形设备接口就可以在其上进行创建,拷贝,像素点填充与或等基本GDI对象操作。
2.2.2 调色板(COLOR MAP)
LCD与RGB格式对颜色的描述需要算法转换,我们使用文件读写操作运行转换算法,获得查找表,用指针偏移代替转换算法,提高运行速度。
2.2.3 基本图形绘制程序
MINGUI提供了基本的点,线,圆,椭圆的绘制程序,并针对实时系统对波形绘制的特殊需求,采用了曲线拟合技术,提高了波形绘制精度,降低了对采点的要求。
3 窗口控件
MINGUI采用窗口模式,所有的桌面,窗口,控件都是基于窗口结构。使用t_winctrl结构记载窗体的相关信息,t_winctrl结构如下:
struct t_winctrl{
struct t_winctrl *Prev,*Next,*Parent,*Children;
DWORD ID;/*窗体的唯一ID标号*/
DWORD Mark;
/*窗体资源标志(结构内偏移20B)*/
DWORD Style; /*窗口样式和状态*/
TVariantTextCaption; /*窗口标题*/
TWndCanvasCanvas;
/*指向主窗体的画布,(结构内偏移48B:HDC)放在WndRect下面*/
TWNDCLASS*WinClass; /* window class*/
TWndFamily *Family;
TWNDHOOKHookProc;
/*回调函数入口地址*/
UINTHookMessage;
/*回调函数能处理的消息类型,设置为NULL的话,他可以处理所有类型消息*/
TRECT WndRect;
/* window rect in screen coords*/
int Width,Height;
int unmapcount;
/* count of reasons not really mapped */
int TabOrder;
longUserData;
longExtraLong[1];
/* window extra bytes - must be last*/
};
窗体创建通过CreateWindows()函数实现,该函数采用异步/同步运行方式,在创建窗体时,只是给窗体分配一块内存区,填写t_winctrl窗体结构,然后发送WM_PAINT消息。
同步步运行方式时,用户需在回调函数里面调用_Draw函数,系统将在窗口创建的同时将窗体在液晶屏上面实现。该模式适用于系统资源充沛同时对图像实时性要求高的系统。
异步处理方式时,将在客户程序里的消息循环获取WM_PAINT消息,执行显示操作。这种方式将窗体的创建和绘制分成两部分执行,缩短了每一部分的执行时间,在一些中断及中断处理任务繁重的系统中可以降低图形用户系统对资源的占用时间。
控件是对操作有着特定响应的窗体,用户可以在回调函数里面定义这些特定的响应。出于简化用户操作,以及考虑到实时系统一般不需要复杂的控件,MINGUI只实现了一些基本的浮点数显示修改,菜单,按钮等控件,简单实用,节省了存储空间。
4 窗口管理器
MINGUI通过一个如下图所示的链表管理窗口,链表的每个节点是一个t_winctrl结构。
图2
其中根窗口是整个链表头,是默认的第一层窗口的父窗口。同时每一层的窗口又可能是新一层窗体结构链表的链表头。层与上一层,层与层之间构成了父子,家庭关系。而每一层之间的窗口拥有一个称之为Z序的记录,就是给窗体加上个垂直于液晶屏的坐标轴,Z序高的自然也就能显示在最顶端。
为了提高图像的显示速度,和防止闪烁,MINGUI在窗口管理器中加入了组操作模块,使用组操作,将通过Z序在内存中实现将家庭窗口在内存中按照Z序剪裁,合并成一帧图像显示。
5 消息系统
MINGUI采用事件驱动消息机制,由消息推动整个系统的运转,系统的运行是建立在消息系统的稳定运作的基础上的。
MINGUI采用类似于标准WINDOWS消息结构,消息体结构以及消息名都相同于WINDOWS系统,便于开发者上手。但在具体操作时MINGUI更加灵活,MINGUI既提供相同于标准的SendMsg/PostMsg和GetMsg/PeekMsg实现消息发送与接受操作,进行进程间通讯。也可以采用类似于UCGUI的SendAndGetMsg直接在产生消息时即调用对应窗口的回调函数处理实现同步操作。
6 应用实例
MINGUI在东南大学 国家专用集成电路中心 系统组的继电保护项目中得到应用,该继电保护机采用东南大学自主产权的Garfield IV嵌入式芯片,该系统目前已经通过检测调试。
6.1 用户界面的设计流程:
6.1.1 初始化,系统将创建结构体,根窗口,以及读取上次关机时存储在flash里面的数据。
6.1.2 创建桌面窗口,本系统使用了4bpp的像素。桌面窗口提供一个功能菜单,用户通过点击功能菜单进入下层功能窗口,实现系统操作。
7 结束语
本图形用户界面工具针对实时系统的特殊要求,作了相应的设计。针对资源耗费少的需求,该图形用户界面精简了一些在实时小型图新用户界面上不常用的控件,如文本输入,输入法,图片显示等功能。同时添加了浮点数输入,输出,波形显示功能。同时,优化了底层算法,提高了窗口创建速度。消息系统则使用了同于Windows的样式方便编写,并提供了同步与异步处理方式,用户可以根据需求配置。
参考文献:
[1]蔡明志,Windows程序设计:绘图篇[M].北京:科技出版社,1993:101-1l1.
[2]赫思D,贝克M P,蔡士杰,译.计算机图形学[M].北京:电子工业出版社,1998:45-59.
[3]Jefrey Richter; Programming Applications for Microsoft Windows[M].Fourth Edition, Microsoft Press,1999.
[4]Charles Petzold. Programming Window[M].Fifth Edition, Microsoft Press, 1998.
注:“本文中所涉及到的图表、公式注解等形式请以PDF格式阅读原文。”
关键词:实时;GUI工具;窗口;控件;继电保护机
中图分类号:???文献标识码:?文章编号:1009-3044(2007)16-31078-02
Design of tidy real-time GUI tools
FANG Wen-kai, ZHONG Rui
(National ASIC System Engineering Center, Southeast University, Nanjing 210096, China)
Abstract:This paper developed a set of GUI tools in real-time embedded system by using C language. The basic design idea of whole GUI system was include. This system has been successfully used in relay protection set.
Key words:Real time ; GDI Tools; Windows; Control; relay protection set
1 引言
图形用户界面是嵌入式系统的一个组成部分,甚至从某种意义上说可以认为是嵌入式系统的灵魂,因为在整个系统中这是用户接触最多的部分,所以图形用户界面的好坏直接决定着系统的功能。与在普通环境下的图形用户界面相比较,实时系统下的图形用户界面要求响应时间短,占用资源少,而且对图形质量要求不高——不要求有类似WINDOWS的桌面效果。而目前大多数可接触到的图形用户界面如 WINCE, MINGUI, Graphic出于其复杂性并不适用于一些小型实时系统。
MINGUI是应用于东南大学国家专用集成电路中心“继电保护项目”的一款图形用户界面工具,适用于小型实时系统。其体系结构为:
图1
2 体系结构
2.1 硬件抽象层(Hardware Abstract layer)
硬件抽象层将具体硬件与上层结构相联,它提供一个标准接口,为了不在嵌入式系统中引入复杂的库结构,这部分使用C代码编写。它向图形设备接口提供一个标准从1bpp到8bpp的直接写入图像帧缓冲。
2.2 图形设备接口(Graphic Device Interface)
图形设备接口,它提供设备上下文(Device Context)操作,调色板,基本GDI对象操作(包括画笔、画刷、字体、位图、区域等),这部分针对实时系统的快速要求,采用以空间换时间的策略。
2.2.1 设备上下文(Device Context)
设备上下文保存了图形显示设备的状态信息,可以认为它相当于我们画图时的画布。在MINGUI中我们使用一个数据结构实现。该结构为:
typedef struct{
DWORDMode; /*模式,低两位表示的是前景色和背景色的合成模式,倒数第三位表示汉字间距*/
PIXELForeground;/* 前景色*/
PIXELBackground;/* 背景色*/
VRAM*Vram;/*内容存储区 */
intVX,VY; /* 虚拟坐标*/
PWND Owner; /*指向拥有窗体 */
}TWndCanvas;
其中VRAM是一个数据结构,记载了一帧图像的坐标,像素,点,组操作等信息,组操作在后面描述。有了设备上下文信息,图形设备接口就可以在其上进行创建,拷贝,像素点填充与或等基本GDI对象操作。
2.2.2 调色板(COLOR MAP)
LCD与RGB格式对颜色的描述需要算法转换,我们使用文件读写操作运行转换算法,获得查找表,用指针偏移代替转换算法,提高运行速度。
2.2.3 基本图形绘制程序
MINGUI提供了基本的点,线,圆,椭圆的绘制程序,并针对实时系统对波形绘制的特殊需求,采用了曲线拟合技术,提高了波形绘制精度,降低了对采点的要求。
3 窗口控件
MINGUI采用窗口模式,所有的桌面,窗口,控件都是基于窗口结构。使用t_winctrl结构记载窗体的相关信息,t_winctrl结构如下:
struct t_winctrl{
struct t_winctrl *Prev,*Next,*Parent,*Children;
DWORD ID;/*窗体的唯一ID标号*/
DWORD Mark;
/*窗体资源标志(结构内偏移20B)*/
DWORD Style; /*窗口样式和状态*/
TVariantTextCaption; /*窗口标题*/
TWndCanvasCanvas;
/*指向主窗体的画布,(结构内偏移48B:HDC)放在WndRect下面*/
TWNDCLASS*WinClass; /* window class*/
TWndFamily *Family;
TWNDHOOKHookProc;
/*回调函数入口地址*/
UINTHookMessage;
/*回调函数能处理的消息类型,设置为NULL的话,他可以处理所有类型消息*/
TRECT WndRect;
/* window rect in screen coords*/
int Width,Height;
int unmapcount;
/* count of reasons not really mapped */
int TabOrder;
longUserData;
longExtraLong[1];
/* window extra bytes - must be last*/
};
窗体创建通过CreateWindows()函数实现,该函数采用异步/同步运行方式,在创建窗体时,只是给窗体分配一块内存区,填写t_winctrl窗体结构,然后发送WM_PAINT消息。
同步步运行方式时,用户需在回调函数里面调用_Draw函数,系统将在窗口创建的同时将窗体在液晶屏上面实现。该模式适用于系统资源充沛同时对图像实时性要求高的系统。
异步处理方式时,将在客户程序里的消息循环获取WM_PAINT消息,执行显示操作。这种方式将窗体的创建和绘制分成两部分执行,缩短了每一部分的执行时间,在一些中断及中断处理任务繁重的系统中可以降低图形用户系统对资源的占用时间。
控件是对操作有着特定响应的窗体,用户可以在回调函数里面定义这些特定的响应。出于简化用户操作,以及考虑到实时系统一般不需要复杂的控件,MINGUI只实现了一些基本的浮点数显示修改,菜单,按钮等控件,简单实用,节省了存储空间。
4 窗口管理器
MINGUI通过一个如下图所示的链表管理窗口,链表的每个节点是一个t_winctrl结构。
图2
其中根窗口是整个链表头,是默认的第一层窗口的父窗口。同时每一层的窗口又可能是新一层窗体结构链表的链表头。层与上一层,层与层之间构成了父子,家庭关系。而每一层之间的窗口拥有一个称之为Z序的记录,就是给窗体加上个垂直于液晶屏的坐标轴,Z序高的自然也就能显示在最顶端。
为了提高图像的显示速度,和防止闪烁,MINGUI在窗口管理器中加入了组操作模块,使用组操作,将通过Z序在内存中实现将家庭窗口在内存中按照Z序剪裁,合并成一帧图像显示。
5 消息系统
MINGUI采用事件驱动消息机制,由消息推动整个系统的运转,系统的运行是建立在消息系统的稳定运作的基础上的。
MINGUI采用类似于标准WINDOWS消息结构,消息体结构以及消息名都相同于WINDOWS系统,便于开发者上手。但在具体操作时MINGUI更加灵活,MINGUI既提供相同于标准的SendMsg/PostMsg和GetMsg/PeekMsg实现消息发送与接受操作,进行进程间通讯。也可以采用类似于UCGUI的SendAndGetMsg直接在产生消息时即调用对应窗口的回调函数处理实现同步操作。
6 应用实例
MINGUI在东南大学 国家专用集成电路中心 系统组的继电保护项目中得到应用,该继电保护机采用东南大学自主产权的Garfield IV嵌入式芯片,该系统目前已经通过检测调试。
6.1 用户界面的设计流程:
6.1.1 初始化,系统将创建结构体,根窗口,以及读取上次关机时存储在flash里面的数据。
6.1.2 创建桌面窗口,本系统使用了4bpp的像素。桌面窗口提供一个功能菜单,用户通过点击功能菜单进入下层功能窗口,实现系统操作。
7 结束语
本图形用户界面工具针对实时系统的特殊要求,作了相应的设计。针对资源耗费少的需求,该图形用户界面精简了一些在实时小型图新用户界面上不常用的控件,如文本输入,输入法,图片显示等功能。同时添加了浮点数输入,输出,波形显示功能。同时,优化了底层算法,提高了窗口创建速度。消息系统则使用了同于Windows的样式方便编写,并提供了同步与异步处理方式,用户可以根据需求配置。
参考文献:
[1]蔡明志,Windows程序设计:绘图篇[M].北京:科技出版社,1993:101-1l1.
[2]赫思D,贝克M P,蔡士杰,译.计算机图形学[M].北京:电子工业出版社,1998:45-59.
[3]Jefrey Richter; Programming Applications for Microsoft Windows[M].Fourth Edition, Microsoft Press,1999.
[4]Charles Petzold. Programming Window[M].Fifth Edition, Microsoft Press, 1998.
注:“本文中所涉及到的图表、公式注解等形式请以PDF格式阅读原文。”