




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VxWorks环境下基于Zinc的GUI任务与非GUI任务之间的通信i引言VxWorks是美国WindRiverSystems公司开发的一种嵌入式实时操作系统,它以高性能可剪裁的微内核以及友好的用户开发环境在嵌入式实时操作系统领域占有重要的地位。在很多实时应用场合(如嵌入式地理信息系统),需要在VxWorks环境下设计图形用户界面(GUI)。VxWorks提供了两种开发图形用户界面的组件:WindML(Wind多媒体库)和Zinc。WindML为图形、图象和声音应用程序的开发提供了根本技术,并且提供了为定制设备开发标准化驱动程序的框架。Zinc是以WindML为根底的,Zinc是为应用创立图形
2、用户界面提供框架的可扩展的面向对象的类库。Zinc为实现复杂的图形用户界面提供了更多的支持。为了进步性能和简化源代码,大多数情况下在一个实时环境中的应用程序是以多任务的方式实现的,Zinc自身通常也是多任务的。一般不在外部任务里直接处理GUI,而是在一个专用的GUI任务里执行所有的GUI处理。在多任务环境下,非GUI任务将需要在不同的时期和GUI任务通信,GUI也可能需要与外部任务通信。GUI任务与非GUI任务之间的通信方式将对整个实时系统的实时性、可靠性和稳定性产生重大的影响。因此,深化研究VxWorks环境下Zinc所支持的GUI任务与非GUI任务之间的通信方式并确定在特定应用场合选择通信
3、方式的原那么是非常重要的。2GUI(Zinc)任务和外部任务之间的通信方法GUI任务和非GUI任务之间的通信大致可以分为两种:同步通信和异步通信。Zinc主要提供了如下几种通信机制供程序员选择使用:?Zinc入口点?共享内存?OS消息队列?派生设备a)Zinc入口点可以利用Zinc入口点实现GUI任务与非GUI任务之间的通信,主要有如下两种方法:?与Zinc通信的根本入口点是ZafEventManager:Put()程序。利用该函数可以在Zinc事件队列中放置一个事件。这是一个异步方法,因此只能适用于可承受异步通信的场合。?ZafApplication:BeginSynchronize()和Z
4、afApplication:EndSynchronize()。这两个函数自身并不是通信程序,但能确保直接通信方式访问Zinc是平安的。直接通信通常由一个对象的Event()函数来实现,也可能采用其它的方式,比方数据对象更新。间接通信可以使用ZafEventManager:Unblock()函数来实现。使用一个派生设备或其它方法进展通信的时候,使用该函数可以使正在等待事件的Zinc任务解除阻塞。b)共享内存在VxWorks中很容易实现共享内存。为了平安地共享内存,最好让一个信号量和共享内存关联。这样可以防止任务之间出现资源冲突。使用共享内存的时候,通常不需要使用Zinc提供的保证线程平安的入口点
5、。但是当一个窗口对象的某个成员指向共享内存的时候是一个例外情况。例如,假设一个ZafButton的bitmapData成员正指向共享内存,除非已经确保Zinc任务目前没有使用该共享内存,才能平安地更新该共享内存。可以使用ZafApplication:BeginSynchronize()和ZafApplication:EndSynchronize()函数来保证在某一时刻该任务是唯一使用该共享内存的任务。c)OS消息队列在VxWorks环境下使用Zinc的时候,有两种不同类型的消息队列可供选用:事件管理器消息队列和VxWorks操作系统提供的消息队列。可以通过ZafEventManager:Put
6、()和ZafEventManager:Get()函数访问事件管理器消息队列。事件管理器队列只提供从非GUI任务到Zinc任务的通信,利用事件管理器队列进展从GUI任务到非GUI任务的通信是不实用的。VxWorks消息队列可以实现从GUI任务到非GUI任务的通信,也可以实现从非GUI任务到GUI任务的通信,但是不允许同时在两个方向上进展通信。d)派生设备选用共享内存或消息队列作为通信方法时,Zinc需要与该通信方法进展交互,这可以通过派生设备实现。使用派生设备的目的是为了检查是否有来自另一个任务的通信。每当ZafEventManager:Get()函数被调用,事件管理器轮询该设备,看看是否有新消
7、息。这个派生设备仅仅需要检查共享内存或消息队列。假设有新信息可用,派生设备可以直接调用对象的Event()函数在队列上面放置一个新事件,也可以自己处理这个消息。派生设备还可用于实现从GUI任务到非GUI任务的通信。ZafEventManager:UnBlock()函数对这种通信方法是非常有用的。在正常的情况下,假设没有需要处理的事件,Zinc会阻塞自己。假设采用一个派生设备监听一个VxWorks消息队列,向该队列发送一个消息后解除事件管理器的阻塞可以更及时地轮询该派生设备。派生设备自身不会阻塞,也不会导致Zinc暂停。3选择通信方式的原那么上述关于GUI任务的通信方法各有其优缺点。在选择通信方
8、法的时候,应该以详细的应用场合为根据,一般应遵循如下的原那么:a)应该尽可能选用简单的通信方式。在大多数情况下,Zinc入口点足够用。Zinc入口点是最简单的关于GUI任务的通信方式,因为它们不需要Zinc任务内部的任何专门代码。可用的最简单入口点是ZafEventManager:Put()函数。然而,它有以下缺点:第一,它只允许从非GUI任务到GUI任务的通信;第二,它是异步的;第三,因为要防止ZafEventManager:Get()和ZafEventManager:Put()函数同时访问Zinc事件队列以对其进展保护,ZafEventManager:Put()可能会阻塞。假设异步通信是可
9、承受的,但是不能承受阻塞,可以采用以下两种方法:第一,使用ZafEventManager:Put()函数,并且另外有一个可被阻塞的任务向Zinc队列中放置事件。这个任务可以监听一个OS消息队列,而原先产生消息的任务正是使用OS消息队列来发送消息第二,创立一个设备以监听OS消息队列,产生消息的任务发送一个消息给OS消息队列,然后由派生设备接收并解释。派生设备可以放置一个事件在Zinc队列中,或者自己处理这个事件。只是这两种方法都给应用程序增加了一点复杂性。b)假设需要进展同步通信,必须使用函数对ZafApplication:BeginSynchronize()和ZafApplication:En
10、dSynchronize()。调用ZafApplication:BeginSynchronize()之后,可以保证对Zinc对象的任何访问是平安的。该方法很简单,且不需要在GUI任务中添加专门的代码。使用ZafApplication:BeginSynchronize()的缺点是该函数会阻塞,使用该方法时必须采取预防措施。c)采用共享内存进展通信时必须创立保护和同步机制共享内存是从GUI任务到非GUI任务的两种通彳t方法之一,其优点是对数据的访问简单而直接。共享内存没有对数据访问进展保护的内在支持,所以必须创立一个对访问进展保护及同步的机制,并且访问共享内存的所有任务都应该使用该机制。采取这种方
11、案的缺点是容易发生阻塞。d)在不能承受阻塞的应用场合,最好使用OS消息队列。OS消息队列是从GUI任务到非GUI任务和从非GUI任务到GUI任务进展通信的另一种方法。使用OS消息队列进展通信的时候,需要在GUI任务和非GUI任务中编写访问消息队列的代码。在正确进展设置的情况下,消息队列不会引起阻塞的问题。创立消息队列时,必须保证消息队列有足够的消息容量或者建立处理消息队列溢出的机制。4 Zinc的事件模型Zinc中的GUI任务与非GUI任务的多种通彳t方式都与Zinc的事件模型有关,因此在设计和实现GUI任务与非GUI任务之间白通信时,需要对Zinc的事件模型有深化的理解。Zinc具有一个事件
12、驱动的体系构造。输入设备与应用程序之间的交互是通过事件完成的。由于VxWorks本身不是事件驱动的实时操作系统,在VxWorks运行平台中,Zinc主要从输入设备和应用任务获取事件。然后Zinc以标准的方式将这些事件打包,并且将它们路由给适当的对象以进展进一步的处理。在EGIS中,GSM通讯任务使用了自定义的事件与GUI任务进展异步通信。基于Zinc的EGIS事件模型如图1所示。脆人武备通船仃芬串疗管睫辞r*nt图1基于Zinc的EGIS事件路由示意图从图1中,在VxWorks中Zinc事件的主要来源是输入设备和应用程序(比方GSM通信程序),由于VxWorks不支持事件驱动的系统,事件管理器
13、周期性地查询或接收来自输入设备的数据并以Zinc定义的事件构造包装成事件。一旦事件管理器获得事件,Zinc主控进程重新获得对应用程序的控制,该进程从时间管理器中得到事件并传送给窗口管理器。窗口管理器决定事件的最终目的地和适宜的路由并将其发送。最终窗口对象的Event方法收到每个事件并对其进展处理。在EGIS中,通过重载Event函数实现对自定义事件的处理。5 EGIS系统中GUI任务与非GUI任务之间通信的实现嵌入式地理信息系统包括了两个部分,跑车分系统和中心显示分系统。跑车上包括一台PC机、一台GPS接收机和一台短信收发设备。中心包括一台VxWorks目的机、一台PC机(用于开发和调试)和一
14、台短信收发设备。其中,VxWorks目的机上运行的是EGIS各功能模块。为了进步系统性能和简化代码,将目的机上的EGIS软件划分为两个任务:GUI任务和GSM通信任务。GUI任务的主要功能是:负责界面和菜单的实现,并且需要根据GSM实时接收到的经纬度数据在地图上画出跑车的运行轨迹。GSM通讯任务的主要功能是:实时接收以短消息方式传输的GPS经纬度数据,存放在环形缓冲区中,并通知GUI任务。EGIS系统需要满足两方面的实时性:第一,GSM通信任务接收经纬度数据的实时性;第二,GUI任务响应菜单操作的实时性和特定情况下画出跑车轨迹的实时性。为此,在该系统中采取两种通信方式:Zinc入口点和共享内存
15、。GUI任务与非GUI任务之间通信的实现主要包括如下几个方面:a)用户事件的定义Zinc中的事件共分为七类,其中包括用户事件。用户事件的取值范围为10,000到32,767。在EGIS中定义的用户事件为:constZafEventTypeTRACKING=10028;其中,ZafEventType是Zinc事件类型。b)用户事件的发送用户事件的发送通过下面的调用完成:zafApplication->EventManager()->Put(TRACKING)其中,zafApplication是Zinc全局变量,也是GUI任务的任务变量。某些程序可能同时被多个任务调用,这些程序可能要求
16、全局变量或静态变量对于每个调用该程序的任务具有一个不同的值。为了适应这种情况,VxWorks提供了一种所谓任务变量的机制。一个4字节的变量可以以任务变量的方式被添加到一个任务的上下文中,这样每当任务切换的时候同时切换该变量的值。由于在GUI任务和GSM通信任务中的zafApplication具有不同的值,因此,可以在创立GSM通信任务的时候通过参数传递使GSM通信任务获得GUI任务的任务变量zafApplication:if(GSMTaskID=taskSpawn("SERIAL_PORT”,90,VX_FP_TASK,ZAF_VXW_STACK_SIZE,(FUNCPTR)Trac
17、e,(int)zafApplication,0,0,0,0,0,0,0,0,0)!=ERROR)taskVarAdd(GSMTaskID,(int*)&zafApplication);/*将zafApplication添加为任务变量*/*通过参数传递GUI任务的任务变量zafApplication*/在GSM通信任务中:intTrace(CGIS_Window*pWindow,ZafApplication*application)taskVarAdd(0,(int*)&zafApplication);/*将zafApplication添加为任务变量*/zafApplicatio
18、n=application;/*GSM通信任务变量zafApplication赋值*/zafApplication->EventManager()->Put(TRACKING)/*发送用户事件*/c)用户事件的处理ZafEventTypeCGIS_Window:Event(constZafEventStruct&event)ZafEventTypecode;if(event_type=TRACKING)/*判断是否用户定义事件TRACKING*/m_pMainController->ZoomToPosition(Lat_Long0,Lat_Long1);/*事件处理函数*/code=TrackCode;return(code);else/处理其他事件*/d)任务之间的数据共享共享数据是通过下面的全局变量数据实现的。GSM任务收到数据之后,首先将经纬度数据存入数组Lat_Long
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 止痛药物应用总结模版
- 平衡的稳定性教学设计
- 机械工程材料基础第三章钢的热处理
- 人教版三年级语文下册《口语交际:春游去哪儿玩》教学课件
- 医院人事管理课件
- 肿瘤机器技术应用与发展
- 提高课堂教学的有效性心得体会模版
- 本学期少先队工作总结模版
- 手术室传染病分管规范
- 初一上英语教学总结模版
- CJT 489-2016 塑料化粪池 标准
- 2023-2024学年广东省惠州市惠城区八年级(下)期末数学试卷(含答案)
- 2022-2023学年广东省广州市番禺区教科版(广州)四年级下册期末测试英语题卷(无答案)
- 纺纱厂管理制度
- 2024年福建省莆田市初中八年级教学质量检测生物试卷
- 医疗器械仓库管理课件
- 中华水文化智慧树知到期末考试答案2024年
- 整套电子课件:液压传动与气动技术(第二版)
- 《人类起源的演化过程》阅读测试题及答案
- 2024年03月甘肃省文化和旅游厅直属事业单位2024年公开招考11名人员笔试参考题库附带答案详解
- MOOC 民事诉讼法学-西南政法大学 中国大学慕课答案
评论
0/150
提交评论