VxWorks基于Zinc的GUI任务与非GUI任务通信sfx

上传人:壹****1 文档编号:488370631 上传时间:2023-06-01 格式:DOCX 页数:12 大小:56.58KB
返回 下载 相关 举报
VxWorks基于Zinc的GUI任务与非GUI任务通信sfx_第1页
第1页 / 共12页
VxWorks基于Zinc的GUI任务与非GUI任务通信sfx_第2页
第2页 / 共12页
VxWorks基于Zinc的GUI任务与非GUI任务通信sfx_第3页
第3页 / 共12页
VxWorks基于Zinc的GUI任务与非GUI任务通信sfx_第4页
第4页 / 共12页
VxWorks基于Zinc的GUI任务与非GUI任务通信sfx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《VxWorks基于Zinc的GUI任务与非GUI任务通信sfx》由会员分享,可在线阅读,更多相关《VxWorks基于Zinc的GUI任务与非GUI任务通信sfx(12页珍藏版)》请在金锄头文库上搜索。

1、VxWoorkss环境下下基于ZZincc的GUUI任务务与非GGUI任任务之间间的通信信1引言言 VxxWorrks是是美国WWindd Riiverr Syysteems公公司开发发的一种种嵌入式式实时操操作系统统,它以以高性能能可剪裁裁的微内内核以及及友好的的用户开开发环境境在嵌入入式实时时操作系系统领域域占有重重要的地地位。在在很多实实时应用用场合(如嵌入入式地理理信息系系统) ,需要要在VxxWorrks环环境下设设计图形形用户界界面(GGUI) 。VVxWoorkss提供了了两种开开发图形形用户界界面的组组件:WWinddML (Wiind多多媒体库库)和ZZincc。WiindM

2、ML为图图形、图图象和声声音应用用程序的的开发提提供了基基本技术术,并且且提供了了为定制制设备开开发标准准化驱动动程序的的框架。ZZincc是以WWinddML为为基础的的, ZZincc是为应应用创建建图形用用户界面面提供框框架的可可扩展的的面向对对象的类类库。ZZincc为实现现复杂的的图形用用户界面面提供了了更多的的支持。 为了提高性能和简化源代码,大多数情况下在一个实时环境中的应用程序是以多任务的方式实现的, Zinc自身通常也是多任务的。一般不在外部任务里直接处理GUI ,而是在一个专用的GUI任务里执行所有的GUI处理。在多任务环境下,非GUI任务将需要在不同的时期和GUI任务通信

3、, GUI也可能需要与外部任务通信。GUI任务与非GUI任务之间的通信方式将对整个实时系统的实时性、可靠性和稳定性产生重大的影响。因此, 深入研究VxWorks环境下Zinc所支持的GUI任务与非GUI任务之间的通信方式并确定在特定应用场合选择通信方式的原则是非常重要的。2GUUI( Zinnc)任任务和外外部任务务之间的的通信方方法GGUI任任务和非非GUII任务之之间的通通信大致致可以分分为两种种:同步步通信和和异步通通信。ZZincc主要提提供了如如下几种种通信机机制供程程序员选选择使用用: Zincc入口点点 共享内存存 OS消息息队列 派生设备备 a)Ziinc入入口点 可以利利用Z

4、iinc入入口点实实现GUUI任务务与非GGUI任任务之间间的通信信,主要要有如下下两种方方法: 与Zinnc通信信的基本本入口点点是ZaafEvventtMannageer:Putt()程程序。利利用该函函数可以以在Ziinc事事件队列列中放置置一个事事件。这这是一个个异步方方法,因因此只能能适用于于可接受受异步通通信的场场合。 ZafAAppllicaatioon:BegginSSyncchroonizze() 和ZZafAAppllicaatioon:EnddSynnchrroniize() 。这这两个函函数自身身并不是是通信程程序,但但能确保保直接通通信方式式访问ZZincc是安全全的

5、。直直接通信信通常由由一个对对象的EEvennt()函数来来实现,也可能能采用其其它的方方式,比比如数据据对象更更新。间间接通信信可以使使用ZaafEvventtMannageer:Unbblocck()函数来来实现。使使用一个个派生设设备或其其它方法法进行通通信的时时候,使使用该函函数可以以使正在在等待事事件的ZZincc任务解解除阻塞塞。 b)共享享内存 在VxxWorrks中中很容易易实现共共享内存存。为了了安全地地共享内内存,最最好让一一个信号号量和共共享内存存关联。这这样可以以避免任任务之间间出现资资源冲突突。 使使用共享享内存的的时候,通常不不需要使使用Ziinc 提供的的保证线线

6、程安全全的入口口点。但但是当一一个窗口口对象的的某个成成员指向向共享内内存的时时候是一一个例外外情况。例例如,如如果一个个ZaffButttonn的biitmaapDaata成成员正指指向共享享内存,除非已已经确保保Zinnc任务务目前没没有使用用该共享享内存,才能安安全地更更新该共共享内存存。可以以使用ZZafAAppllicaatioon:BegginSSyncchroonizze() 和ZZafAAppllicaatioon:EnddSynnchrroniize() 函函数来保保证在某某一时刻刻该任务务是唯一一使用该该共享内内存的任任务。cc)OSS消息队队列 在在VxWWorkks环境

7、境下使用用Zinnc的时时候,有有两种不不同类型型的消息息队列可可供选用用:事件件管理器器消息队队列和VVxWoorkss操作系系统提供供的消息息队列。 可以通过ZafEventManager:Put()和ZafEventManager:Get()函数访问事件管理器消息队列。事件管理器队列只提供从非GUI任务到Zinc任务的通信,利用事件管理器队列进行从GUI任务到非GUI任务的通信是不实用的。 VxWorks消息队列可以实现从GUI任务到非GUI任务的通信,也可以实现从非GUI任务到GUI任务的通信,但是不允许同时在两个方向上进行通信。d)派生设备 选用共享内存或消息队列作为通信方法时,Zi

8、nc需要与该通信方法进行交互,这可以通过派生设备实现。使用派生设备的目的是为了检查是否有来自另一个任务的通信。每当ZafEventManager:Get() 函数被调用,事件管理器轮询该设备,看看是否有新消息。这个派生设备仅仅需要检查共享内存或消息队列。如果有新信息可用,派生设备可以直接调用对象的Event() 函数在队列上面放置一个新事件,也可以自己处理这个消息。 派生设备还可用于实现从GUI任务到非GUI任务的通信。ZafEventManager:UnBlock()函数对这种通信方法是非常有用的。在正常的情况下,如果没有需要处理的事件, Zinc会阻塞自己。如果采用一个派生设备监听一个Vx

9、Works消息队列,向该队列发送一个消息后解除事件管理器的阻塞可以更及时地轮询该派生设备。派生设备自身不会阻塞,也不会导致Zinc暂停。3选择择通信方方式的原原则 上上述关于于GUII任务的的通信方方法各有有其优缺缺点。在在选择通通信方法法的时候候,应该该以具体体的应用用场合为为依据,一般应应遵循如如下的原原则:aa) 应应该尽可可能选用用简单的的通信方方式。 在大多多数情况况下, Zinnc入口口点足够够用。ZZincc入口点点是最简简单的关关于GUUI任务务的通信信方式,因为它它们不需需要Ziinc 任务内内部的任任何专门门代码。可可用的最最简单入入口点是是ZaffEveentMManaa

10、gerr:PPut()函数数。然而而,它有有下列缺缺点:第第一,它它只允许许从非GGUI任任务到GGUI任任务的通通信;第第二,它它是异步步的;第第三,因因为要防防止ZaafEvventtMannageer:Gett() 和ZaafEvventtMannageer:Putt()函函数同时时访问ZZincc事件队队列以对对其进行行保护, ZaafEvventtMannageer:Putt() 可能会会阻塞。 如果异步通信是可接受的,但是不能接受阻塞,可以采用下列两种方法:第一,使用ZafEventManager:Put ( )函数,并且另外有一个可被阻塞的任务向Zinc队列中放置事件。这个任务可

11、以监听一个OS消息队列,而原先产生消息的任务正是使用OS消息队列来发送消息; 第二,创建一个设备以监听OS消息队列,产生消息的任务发送一个消息给OS消息队列,然后由派生设备接收并解释。派生设备可以放置一个事件在Zinc队列中,或者自己处理这个事件。只是这两种方法都给应用程序增加了一点复杂性。b) 如果需要进行同步通信,必须使用函数对ZafApplication:BeginSynchronize() 和ZafApplication:EndSynchronize() 。 调用ZafApplication:BeginSynchronize()之后,可以保证对Zinc对象的任何访问是安全的。该方法很简

12、单,且不需要在GUI任务中添加专门的代码。使用ZafApplication:BeginSynchronize() 的缺点是该函数会阻塞,使用该方法时必须采取预防措施。c) 采用共享内存进行通信时必须创建保护和同步机制 共享内存是从GUI任务到非GUI任务的两种通信方法之一,其优点是对数据的访问简单而直接。共享内存没有对数据访问进行保护的内在支持,所以必须创建一个对访问进行保护及同步的机制,并且访问共享内存的所有任务都应该使用该机制。采取这种方案的缺点是容易发生阻塞。d) 在不能接受阻塞的应用场合,最好使用OS消息队列。 OS消息队列是从GUI任务到非GUI任务和从非GUI任务到GUI任务进行通

13、信的另一种方法。使用OS消息队列进行通信的时候,需要在GUI任务和非GUI任务中编写访问消息队列的代码。在正确进行设置的情况下,消息队列不会引起阻塞的问题。创建消息队列时,必须保证消息队列有足够的消息容量或者建立处理消息队列溢出的机制。4Ziinc的的事件模模型 ZZincc中的GGUI任任务与非非GUII任务的的多种通通信方式式都与ZZincc的事件件模型有有关,因因此在设设计和实实现GUUI任务务与非GGUI任任务之间间的通信信时,需需要对ZZincc的事件件模型有有深入的的理解。ZZincc具有一一个事件件驱动的的体系结结构。输输入设备备与应用用程序之之间的交交互是通通过事件件完成的的。

14、由于于VxWWorkks本身身不是事事件驱动动的实时时操作系系统,在在VxWWorkks运行行平台中中, ZZincc主要从从输入设设备和应应用任务务获取事事件。 然后ZZincc以标准准的方式式将这些些事件打打包,并并且将它它们路由由给适当当的对象象以进行行进一步步的处理理。在EEGISS中, GSMM通讯任任务使用用了自定定义的事事件与GGUI任任务进行行异步通通信。基基于Ziinc的的EGIIS事件件模型如如图1所所示。图1基于ZZincc的EGGIS事事件路由由示意图图 从图图1中,在VxxWorrks中中Zinnc事件件的主要要来源是是输入设设备和应应用程序序(比如如GSMM通信程程

15、序) ,由于于VxWWorkks不支支持事件件驱动的的系统,事件管管理器周周期性地地查询或或接收来来自输入入设备的的数据并并以Ziinc定定义的事事件结构构包装成成事件。一一旦事件件管理器器获得事事件, Zinnc主控控进程重重新获得得对应用用程序的的控制,该进程程从时间间管理器器中得到到事件并并传送给给窗口管管理器。窗窗口管理理器决定定事件的的最终目目的地和和合适的的路由并并将其发发送。最最终窗口口对象的的Eveent方方法收到到每个事事件并对对其进行行处理。在在EGIIS中,通过重重载Evventt函数实实现对自自定义事事件的处处理。5EGGIS 系统中中GUII任务与与非GUUI任务务之间通通信的实实现嵌入式式地理信信息系统统包括了了两个部部分,跑跑车分系系统和中中心显示示分系统统。跑车车上包括括一台PPC机、一一台GPPS接收收机和一一台短信信收发设设备。中中心包括括一台VVxWoorkss目标机机、一台台PC机机(用于于开发和和调试)和一台台短信收收发设备备。其中中,VxxWorrks目目标机上上运行的的是EGGIS各各功能模模块。 为了提提高系统统性能和和简化代代码,将将目标机机上的EEGISS软件划划分为两两个任务务: GGUI任任务和GGSM通通信任务

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号