VxWorks下基于Tilcon的图形界面显示方案
VxWorks是由美国风河公司开发的一套微内核、高可靠性、可裁剪的嵌入式多任务实时操作系统,是现在所有独立于处理器的操作系统中最具特色的一个,具有多达1800多个功能强大的应用程序接口,近年来以其出色的可靠性和实时性广泛地应用于医疗、航空、船舶、车载电子等领域。
如同大部分嵌入式操作系统一样,VxWorks并没有集成完善的用户图形开发界面,但随着嵌入式操作系统的广泛应用,用户对产品各个方面的要求越来越高,工程师们也开始将项目的目标定位成“以人为本”,开发友好且健壮的人机界面得到空前的重视。风河公司为此开发出可选组件WindML(WindRiver Multimedia Library),WindML作为VxWorks的媒体库为用户提供了进行图形界面开发的丰富的API,也为用户提供了一个实用性极强的图形硬件接口。尽管利用WindML可以进行基于代码的各种用户界面的开发,但用户可以利用更实用的Tilcon工具,实现“拖-放”式的图形界面设计,把用户从大量编码的图形界面开发方式中解放出来,大大简化了嵌入式系统图形界面的开发过程。
WindML
1.WindML介绍
WindML(WindRiver Multimedia Library)是运行在嵌入系统中的多媒体应用;为各种体系提供基本图形、视频和音频技术。WindML是独立于操作系统的图形界面引擎,它可实现尽可能小的内存占用,同时提供最佳性能。WindML由两个组件组成:一个软件开发工具箱(SDK),为各种平台开发与硬件无关的应用开发服务;一个驱动程序开发工具箱(DDK),用于实现驱动程序。二者提供用于图形界面开发的丰富的API,包括区域管理,文字显示,颜色管理,视频支持,特殊图像格式处理等方面,使开发人员在Wind River的实时操作系统上建造丰富的、全面的、可嵌入的GUI成为可能,同时保证较低系统开销和快速市场化。其中DDK包括16位Unicode字体支持;使用灰度字体、true type 字体、防混淆和字体的子像素渲染这些增强特性。在体系结构上可以理解为,WindML将软件、硬件隔离开,实现脱离软硬件环境的更稳定高效的图形界面开发。如图1所示,其层次结构从上到下依次为:软件——SDK——DDK——硬件,依靠这种结构可以进行各种多媒体应用进行模块化开发。
VxWorks下基于Tilcon的图形界面显示方案WindML具有如下优点:极小内存占用,容易移植到定制硬件上,高性能图形输出,直观的、完善的API,灵活的内存管理,事件路由,基本窗口创建,ISO 8 位和Unicode 16-位字体支持,带有抗混淆支持的AGFA 单型第三方字体引擎插件选项,多线程支持,Alpha混合支持,视频叠加支持,JPEG图像支持,用于Tornado II的VxSim模拟程序支持。
2.WindML的配置及编译
利用Tilcon进行应用程序图形界面开发,WindML的配置及编译都是首要的前提条件,还需要将编译后的WindML加载到VxWorks的内核,最终实现其“承上启下”的功能。安装WindML不会影响原Tornado安装,安装后WindML的配置工具和组件会自动出现在IDE中。配置WindML需要在VxWorks的集成开发环境Tornado中进行,依照Tools /WindML/Configure 步骤打开相应配置对话框。 需要强调的是,位图字体选项卡中,提供了可选的Unicode 16-位字体支持,可根据具体需要增加或是裁剪字库,精简嵌入式系统的内核。确定需要用的多媒体设备,配置好WindML后就是编译多媒体库,对于每一次重要的修改应先选择clean清除原本的多媒体库内容,再进行编译,而工程中涉及到的对字体的修改只需要直接编译即可。
Tilcon图形开发软件介绍
1.Tilcon简介
Tilcon Interface Development Suite(IDS)为多平台用户接口开发提供解决方案,是目前最先进的VxWorks下实时操作系统图形开发工具,它集成了大量成熟控件,用户只需要从工具栏中拖动控件,即可实现简单的界面开发,它开发的图形应用程序具有可裁剪性强、运行效率高、显示效果好等优点,因此Tilcon已成为Wind River 开发环境首推的图形界面开发工具。Tilcon的另一个巨大的优点就是它的程序代码不需要修改就可以从VxWorks上移植到Windows上运行,这极大地方便了调试过程,并且Tilcon支持Windows、L inux宿主机开发环境;同时还它可以支持Windows 98 /2000 /ME /NT/XP、W in2dows CE、Linux、VxWorks、QNX等多种目标操作系统的交叉开发。
2. Tilcon组件构成
Tilcon开发系统由三个主要部件构成:Tilcon嵌入式向量引擎(EVE),平台无关的API和可视化设计工具Tilcon Interface Builder——Tilcon图形编辑器,如图3所示。EVE 是一个小的、事件驱动的内核,独立于应用程序的进程,其主要任务是驱动、管理所有的用户界面显示及人机交互事件。Tilcon的这种分离设计方式,使得应用程序只需要专注于实现自己核心的实时应用。
第二个部件是平台无关的复杂的API调用,API是人机交互的接口函数,这些函数可以动态创建对象,可以控制对象属性,无论在Tilcon图形编辑器上可以直接修改还是不能直接修改的属性,利用丰富的API函数都可以实现。
Tilcon Interface Builder为用户提供了便捷的图形界面设计环境,将所需要的控件拖拽到需要放置的位置即可,并且所有控件的显示风格和功能可以通过对象属性页进行方便地修改。IDS用类似VB的方式构建界面,并生成不含代码的窗口描述文件,窗口中的每一个对象都有自己的ID,Value,还有其他属性,如:是否模糊,对象之间是否关联,按钮的抬起或按下,指针指向的数值等等。这些属性通过EVE引擎,调用API,都可以读取和控制,从而得知窗口的改变或控制窗口的行为,该API与C/C++完全兼容,且平台无关,开发人员只需关注程序的逻辑与实现,而不必考虑其他。
用户的应用程序,或者说程序员开发的应用程序,完全的C程序,通过API与引擎通信,用户界面也是通过引擎呈现到用户屏幕面前,两者通过引擎结合。不难看出,由于引擎的存在,不管是用户界面,合适用户的应用程序,都可以做到平台无关,只需针对不同的平台做不同的设置,因而大大减少了重复劳动,用户界面和程序代码都可重复利用,缩短了开发周期和成本。由于IDS可以直接导入图片,因此用户界面也可以很漂亮。
3. Tilcon的使用方法
基于Tilcon的结构组成,可以灵活的对图形界面进行设计。首先,利用IDS产生合乎要求的界面,保存后生成twd ( Tilcon Window Definition) 文件;其次,用户编写应用程序来控制图形界面的显示,同时利用丰富的API函数丰富界面的功能。典型的基于VxWorks的Tilcon应用程序架构。
在用户编写应用程序来控制图形界面的显示这一步中,需要说明的是:初始化数据结构时,决定了是基于哪种操作系统。应用程序使用TRT_Start命令启动EVE,加载和显示窗口之后,应用程序将进入主循环,等待事件的发生。主循环中可定义各种作用的API函数进行窗口事件处理,通过引擎作用继而控制控件的动作。
VxWorks中大字体显示
1. 问题的提出
VxWorks作为嵌入式实时操作系统,在国内应用已非常广泛,但VxWorks原厂商没有直接提供完备的汉字显示解决方案,及普通字符集的大字体显示功能。也就是说,无论是Times new roman 还是Helvetica ,都只能提供最大24号的字体显示,而大部分项目的图像界面分辨率为640*480,无疑24号的字体对于显示屏来讲太小了。通常,实时显示一定要直观,并且显示的效果还要达到最佳,最适合工作人员观察,因此关键数据的显示一定要清晰、明了。
2. 问题的解决方案
实现西文大字体显示的最根本的方法就是在WindML字库中添加同已有字体文件相一致的大号字体的点阵信息源文件,完全自主开发一套点阵存储、点阵获取、点阵显示、汉字显示函数。但这种方法会消耗大量的时间在无用的点阵信息修改上,使得显示变得复杂。另一种方法就是基于已存在的点阵信息源文件进行修改,改造WindML的双字节和单字节显示函数,该方法对点阵的操作相当灵活,适合对点阵信息进行较少修改时,直接实现大字体的显示。
对于一般性的工程实际问题,屏幕上要求实时变化的一般为0-9这十个数字,而汉字显示通常只作为背景出现,考虑到VxWorks内核的大小,对于汉字的显示只需要通过Tilcon的背景设置,令其以图片的形式显示出来即可,修改已有的WindML字库来显示大于24号的数字成为最简便的一种方法。
3. 具体实现方法,
WindML编码显示的参数和实现思路集中体现在点阵存储文件的结构上,这些文件在~\Tornado2.2\target\src\ugl\fonts\bmf目录下,该目录下有各种VxWorks支持的字库点阵信息,只需要改动其中不会被用到的某一种字体格式即可。例如对于实际项目中项目中不使用Times new roman 14号字,修改的内容包括0、1、2、3、4、5、6、7、8、9及小数点。最终修改的目的就是将字库中的某一种不会用到的字体字号修改为需要用到的大字号数字,将WindML重新编译到VxWorks,使VxWorks字库支持大字号的显示。对于实例来讲就是,当Tilcon中字体设置为Times new roman 14时,目标机中显示的为大号数字。
若要讨论数字及小数点的修改,就必须了解点阵的意义、字模的产生方法以及点阵信息描述表总表和点阵信息结构。其中有两个重要的概念,一个是字模结构,WindML 为每一种字体定义了一个字模结构,它规定了每个字符所拥有的空间大小,相邻两个字符的间距。文字的字模是文字在屏幕上显示的关键,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状。
一个字符结构定义了每个字符的实际大小和其它的字体属性,它是以字模为标准的,不得超过字模的大小,否则,超出部分将会被裁剪掉。
对于数字0,我们可以对上述目录在uftnr14.c下找到其信息为:
/* 0x0030 ('0') */
0, /* page */
48, /* index */
0, /* size (MSB) */
13, /* size (LSB) */
7, /* width */
10, /* height */
10, /* ascent */
0x79, 0x9a, 0x14, 0x28, 0x50, 0xa1, 0x42, 0xcc, 0xf0,
也就是说通过如上的数据,即可在屏幕上显示出Times new roman 14号字所表示的数字0。
对上表进行如下解释:
page+index就是该字符的ASCII编码,过扩成了双字节。
普通数字字符page=0,index为 ASCII编码值。
size(MSB)+size(LSB)是该字节的点阵信息长度,注意实际描述体的长度是2(2字节page,index)+该长度+1(从0开始编大小,所以从1数据要加1),而ascent之后的真正点阵数据的大小是该大小减4,也就是点阵信息的个数减去4。
width+height是该点阵资料的宽度和高度。
ascent是点阵处在baseline以上的偏移位置,baseline的位置要看整个字符表描述结构的定义。
data是按行扫描得到的点阵资料,是列递增把行显示效果排成一个连续空间后,按字节来描述每位的打点状态;如果行宽是8位的整数倍,不会把位补0去凑8位整数倍。字符点阵描述数据依次往下排列,直到以4个0标志结束[5]。
利用字模生成工具生成度的字模数据,这个数据不能直接使用,笔者在这里仅仅用到了它的网格部分,具体的数据自己得出,把width修改成4或者8的整数倍,便于得到点阵数据。
以36号字体为参考对象,所以修改后的编码为:
/* 0x0030 ('0') */
0, /* page */
48, /* index */
0, /* size (MSB) */
100, /* size (LSB) */
24, /* width */
32, /* height */
32, /* ascent */
0x00,0x3E,0x00,0x00,0xFF,0x00,0x01,0xC3,
0x80,0x03,0x81,0xC0,0x07,0x00,0xE0,0x0F,
0x00,0x70,0x0E,0x00,0x70,0x1E,0x00,0x78,
0x1E,0x00,0x78,0x1E,0x00,0x38,0x1C,0x00,
0x3C,0x3C,0x00,0x3C,0x3C,0x00,0x3C,0x3C,
0x00,0x3C,0x3C,0x00,0x3C,0x3C,0x00,0x3C,
0x3C,0x00,0x3C,0x3C,0x00,0x3C,0x3C,0x00,
0x3C,0x3C,0x00,0x3C,0x3C,0x00,0x3C,0x1C,
0x00,0x38,0x1C,0x00,0x78,0x1E,0x00,0x78,
0x1E,0x00,0x78,0x0E,0x00,0x70,0x0F,0x00,
0xF0,0x07,0x00,0xE0,0x03,0x81,0xC0,0x03,
0xC3,0x80,0x00,0xFF,0x00,0x00,0x7C,0x00,
综上所述,由于为了避免新生成的字体文件不被WindML识别,因此我们采用将已有字体改编的方式实现大字体的显示,我们利用点阵字模工具生成36号字的参数,将其替换14号字。此时我们将图形界面改成14号字,编译到VxWorks中时显示的即为36号字的大小,可以在增加最少代码,消耗最少内存的条件下实现大字体的显示。
调试步骤为:(1) 由于字体文件被改变,首先要编译WindML;(2) 编译系统,打开WFTP,重启目标机;(3) 打开FTP工具,将修改的twd文件传入目标机;(4) 编译下载应用程序到目标机;(5) shell中运行借口函数,目标机即可显示应用程序。
本文小结
随着嵌入式操作系统人机交互界面的设计得到空前的重视,Tilcon以其丰富的功能灵活的配置正逐步成为最理想的界面开发工具,同时对于VxWorks的字体显示问题,可根据实际情况灵活处理,利用本文提出的方法仅仅修改需要改动的部分,既灵活实用,又可缩短研发周期。
阅读(5919) | 评论(1) | 转发(0) |