前 言
目前,伴随着各种手持、无线及嵌入式设备的迅猛发展,相应的软硬件设计也发生了很大的变化。许多设备都使用了 Intel,MIPS,摩托罗拉的32位微处理器及大屏幕的液晶图形显示器。由于在过去10年中,桌面操作模式取得了巨大成功CONTROL ENGINEERING China版权所有,于是许多开发者在嵌入式设计中开始使用类似于桌面的操作系统。其中一个比较好的方案就是使用Linux操作系统。由于Linux在嵌入式系统上具有桌面电脑的全部功能和特性,同时作为一种开放式源码CONTROL ENGINEERING China版权所有,它允许各种各样的修改,并且还可以根据用户的特定要求进行定制。
Microwindows概述
Microwindows 是一个著名的开放式源码的嵌入式GUI软件,目的是把现代图形视窗环境引入到运行Linux的小型设备和平台上。作为X Window的替代品,Microwindows可以使用更少的RAM和文件存储空间(100K-600K)提供与X Window相似的功能。该体系结构允许设计者轻松加入各种显示设备、鼠标、触摸屏和键盘等。Linux2.2以上版本的内核代码允许用户将图形显存作为帧缓存进行存取,这样当用户对显示设备进行写入、控制时可以避免对内存映射
Microwindows 已经移植到一些掌上电脑。它的图形引擎被设计成能够运行在任何支持readpixel, writepixel, drawhorzline 和drawvertline, 和setpalette 的系统之上。在底层函数的支持之下,上层实现了位图,字体,光标以及颜色的支持。Microwindows支持新的Linux内核帧缓存结构控制工程网版权所有,目前提供每像素1、2、4、8、16、24和32位的支持,另外还支持彩色显示和灰度显示,其中彩色显示包括真彩色(每像素15、16和32位)和调色板(每像素1, 2, 4 和 8 位)两种模式。在彩色显示模式下,所有的颜色用RGB格式给出控制工程网版权所有,系统再将它转换成与之最相似的可显示颜色,而在单色模式下中则是转换成不同的灰度级。 Microwindows支持窗口覆盖和子窗口概念、完全的窗口和客户区剪切、比例和固定字体,还提供了字体和位图文件处理工具。系统使用了优化的绘制函数,这样当用户在移动窗口时可以提供更好的响应。内存图形绘制和移动的实现使得屏幕画图显得很平滑,这点特别在显示动画、多边形绘制、任意区域填充、剪切时有用。
尽管Microwindows完全支持Linux,但是它内部的可移植结构是基于一个相对简单的屏幕设备接口,可在许多不同的RTOS和裸机上运行。这种特性的优点突出体现在用户设计的图形程序不需重写就可以被不同的工程共享,甚至可以运行在不同RTOS的不同对象上。
Microwindows系统以图形方式支持在主机平台上的仿真目标平台。这样,为Linux设计的Microwindows应用程序就可以在台式机上进行编写和开发而不用进行交叉编译就可测试和运行,并且直接在目标平台上运行。台式主机上运行的目标应用程序在X window中显示,这一点通过由Microwindows提供的X window屏幕驱动来完成,而不是通过帧缓存驱动。该驱动可以在像素位素和颜色深浅方面准确的模拟目标平台上的 显示器,这样即使桌面系统是24位颜色,它也可以预览显示2bpp灰度级的目标应用程序。Microwindows采用分层设计方法。在最底层,屏幕,鼠标/触摸屏以及键盘驱动程序提供了对物理设备访问的能力。在中间层,实现了一个可移植的图形引擎,支持行绘制,区域填充,剪切以及颜色模型等。在上层,实现多种API以适应不同的应用环境。
两种API:Win32和Nano-X
Microwindows中使用两种流行的图形编程接口:Microsoft Windows Win32/WinCE图形显示接口(GDI)和Xlib-like接口。前者应用于所有的Windows CE和Win32应用程序控制工程网版权所有,后者就象Nano-X,应用于所有Linux X插件集的最底层。这样做可以让大量的Windows程序员开发图形应用程序,类似地也可以让Linux图形程序员用X接口开发图形应用程序。
Nano-X程序设计
本文中将用Nano-X API设计一个应用程序,并且讨论底层Nano-X程序的设计问题。Nano-X允许应用程序使用client/server网