嵌入式Linux系统下Microwindows的应用
对于那些熟悉使用Microsoft Windows或Linux X Windows的程序员页言,经编写应用程序时是有一定区别的。Microsoft Windows的编程员一般使用MS-Visual C++的类库(MFC)中的C++应用程序框架或者是更新的ATL框架,在绘制图形时使用Win32图形设备接口(GDI)。Windows中还包括有许多Win32 GDI中的应用界面控件,如按钮、列表等。而X Windows系统提供了一个低级接口——Xlib,仅用于实现最低级简单的绘图功能,并将其封装成程序包在需显示时在显示设备上运行。在用户界面中,大多数的解决利用插件,在Xlib的上层加入插件集来实现更高级的函数。目前,对Microwindows的应用正在逐步地加入GTK+/GDK以及FLTK插件,以实现更多的用户界面控件。
3 Microwindows的体系结构
由于Microwindows在设计上有着明显的分层结构,如图3所示,其设备与平台相关层、设备与平台无关层和应用层之间层次清晰、结构明显,因此勿需改动其整体结构,只需在其相应的部分添加代码即可实现一些更为复杂的功能。
图3 Microwindows体系结构
在Microwindows的最底层(设备与平台相关层),系统针对显示屏、鼠标、触屏以及键盘等各定义了一个数据结构。该数据结构和顶层结构一样,供图形引擎使用,包含了针对指定设置和硬件驱动代码。Microwindows中还包含了诸多设备和操作系统的各种版本的驱动程序。屏幕驱动可支持系统1的、2、4、8、16、24、32位显示和调色板、真彩色、灰度等颜色模式。屏幕驱动中还包括一些入口指针,这些指针分别用读写像素、绘制水平或垂直线,在屏幕和内存之间相互映射内存空间。在实现这些基本指针的过程中需运行包括TrueType或Adobe Type1的字体支持、RGB颜色支持、JPEG以及BMP图形处理等Microwindows上层函数。如果屏幕驱动中还包括有硬件加速的话,仅需更改驱动程序即可;也可在系统中添加触屏、键盘、按键等的输入。
Microwindows的中间层是图形引擎层(也称为设备与平台无关层),因为所有的绘图函数都通过调用屏幕驱动来实现,该层与硬件无关。图形引擎层为应用层提供了一系列相应的入口指针调用绘图函数,还为所有的颜色指定了RGB的颜色模型;同样,该层也与显示设备无关,可以由RGB值为判断硬件中的像素值。除此之外,Microwindows还在中间层实现裁减功能,它采用多矩形算法,可在任意复杂的区域中实现绘图功能。中间层还要控制所有字体的显示,支持FreeType以及使用T1Lib的Adobe Type 1字体、支持比例字体,同时还支持ASCII、Unicode-16、Unicode-32、UTF-8编码规则。
Microwindows的最高层(应用层)实现了窗口交互系统,这使得程序员既可在全屏幕显示,也可在层叠的窗口中显示。一层还包括事件处理,可将触摸屏、按键等激发的事件传送给应用程序。
Nano-X API允许程序可以根据Client/Server协议通过网络或是本地的UNIX主机进行编译,以同时显示几个运行在已连接到Microwindows服务器的嵌入式设备或远程主机上的程序。除此之外,Client/Server协议还可以利用共享的内存空间客户端和服务器之间传播数据。Nano-X可在每个客户机上步运行,这意味着一旦发送了客户机请求包,服务器在另一个客户机提供服务之前一直等待,直到整个包到达为止。这使得服务器代码非常简单,而运行速度仍非常快。
4 Micorowindows上的FLTK API
FLTK是一个简单灵活的GUI工具箱,特别适用于占用资源很少的环境。它提供大多数窗口构件一一按钮、对话框、文本框以及出色的“赋值器”选择(用于输入数值的窗口构件),还包括滑动器、滚动条、刻度盘等其它构件。针对Microwindows GUI引擎的FLTK的Linux版本被称为FLNX,它能用来为嵌入式环境创建一个出色的UI构建器,由两个构件组成:FI_Widget和FLUID。FI_Widget由所有基本窗口构件API组成,占用40~48KB的资源。FLUID(Fast Light User Interface Desigher,快速轻巧的用户界面设计器)是用来产生FLTK源代码的图形编辑器,占用大约380KB资源(包括每个窗口构件)。
FLTK是一个C++库,由于大多数现代GUI环境都是面向对象的,这命名编写的应用程序移植到类似的API中会更容易。
结语
Microwindows正在嵌入式开发领域稳步发展,是完全免费的开放式源代码,为嵌入式设备提供了更多的解决方案;任何对将Linux定制于PDA、掌上机或者可移动设备感兴趣的人都可从因特网免费下载,并将其移值或开发。熟悉图形应用程序的用户可以很快就在该系统上编写自己的图形应用程序,在未来的嵌入式系统设计中,它的作用是无可限量的。