


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VxWorks的多任务通信机制杭州海康威视数字技术有限公司 陈军科一、 VxWorks操作系统介绍VxWorks实时操作系统式由美国WindRiver公司推出的一个运行在目标机上的高性能、可裁减的嵌入式实时操作系统,VxWorks的核心是高性能的微内核wind,其具有快速任务切换、中断支持、抢占式和时间片轮转调度机制等特点,保证对外部事件的快速反应。除了微内核,VxWorks还包括了I/O系统、文件系统、TCP/IP网络系统、图形系统、虚拟内存管理、板极支持包BSP (Board Support Package)等模块,而BSP层的存在使VxWorks可以方便地移植到各种硬件平台。在目前的嵌入式操作系统市场,VxWorks占据着80%以上的市场份额,广泛地应用于通信、消费电子、交通运输、工业控制、航天航空等领域。二、 VxWorks的多任务通信机制通常,在一个实时系统中,存在着多个并发的任务来协同实现系统的功能,操作系统必须为这些任务提供快速且功能强大的通信机制。在VxWorks系统中,有信号量(semaphore)、消息队列(message queue)、管道(pipe)、事件(event)等通信机制,对一个系统开发人员来说,如何合理地使用这些通信机制,是系统能够长期高效、可靠、安全运行的关键。1、 信号量(semaphore)在VxWorks种,信号量是提供任务间同步和互斥的最快速、开销最小的机制,VxWorks有三种不同类型的信号量:(1) 二进制信号量:可用于2个任务之间的同步工作。如任务A必须在任务B完成特定的动作以后才能进行,在这种情况下,任务A可以获取信号量而处于阻塞(pend)状态,任务B在完成特定的动作后释放该信号量。一般来说二进制信号量适用于一对一的任务之间的同步。(2) 互斥信号量:主要用于任务之间共享数据区的互斥保护,具有优先级反转、安全删除、递归等特性。在有2个或2个以上的任务共享一个数据区的时候,必须使用互斥机制进行保护。(3) 计数器信号量:类似于二进制信号量,但是对信号量的释放、获取有计数功能,而二进制信号量则只有0和1两种状态。VxWorks提供了一组管理信号量的函数接口供开发者使用,包括创建、删除、获取、释放等。虽然信号量具有快速、开销小的优点,但也有它的局限性,首先它无法提供额外的信息,其次对于一个任务必须与多个任务进行同步的情况,信号量也无能为力。因此在许多场合,信号量必须与其它通信机制配合使用来完成任务之间的通信。2、 消息队列(message queue)消息队列是VxWorks提供的单个CPU中的任务之间通信的主要机制之一。消息队列允许基于FIFO或基于任务优先级方式排队消息,一个消息队列的消息数目和消息长度可以由开发者在创建消息队列时指定。在理论上,VxWorks允许多个任务向同一个消息队列发送消息,或者从同一个消息队列接收消息;而在实际应用中,一般来说只有一个任务从消息队列接收消息,有一个或多个任务发送消息,即这个消息队列有多个生产者,而只有一个消费者。消息队列时单向的,对于需要进行双向通信的两个任务,必须使用两个消息队列。消息队列非常适合于Client-Server结构的任务之间的通信,如图一,任务Client1和Client2都需要任务Server的服务,它们通过消息队列“Request Queue”向任务Server发送请求和参数,任务Server处理请求后分别通过“Reqpy Queue 1”和“Reqpy Queue 2”向这两个任务返回结果。图一 Client-Server 任务之间使用消息队列进行通信在VxWorks中,消息队列是一种代价比较高的一种通信机制,因此在使用时应该使消息的长度尽量短,而且应避免在需要十分频繁通信的场合使用消息队列。另外消息队列中的消息是排队的,即使是完全相同的消息,后面的消息也不会覆盖前面的消息。3、管道(pipe)在VxWorks中,管道是一种通过虚拟的I/O设备来实现的消息队列通信机制。使用函数pipeDevCreate()和pipeDevDelete()来生成和删除管道,管道一经生成后,任务之间就可以使用标准I/O操作主要是read()和write()进行通信。管道的优点在于它是一个I/O设备,与标准的VxWorks I/O一样,可以使用select机制,而有了select机制,一个任务很方便地使用多个异步I/O设备,如任务要处理同时从串口、管道、socket接收到的数据,就可以使用select。4、事件(event)在5.5版本之前,VxWorks并没有事件这一通信机制。事件(event) 最早出现在pSOS实时操作系统中,在风河公司收购了pSOS之后,从VxWorks 5.5之后,加入了事件机制,并在pSOS事件的基础上做了增强和改进。事件可用于任务和中断服务程序ISR之间、任务和任务之间、任务和VxWorks资源之间进行通信。任务用函数eventReceive()来接收它关心的事件,用eventSend()来向另一个任务发送事件。VxWorks资源主要是指信号量和消息队列,一个任务要想从VxWorks资源接收到事件,必须先进行注册(register),那么当资源处于FREE状态时,会向注册过的任务发送一个事件。对于每一个VxWorks资源,最多只允许有一个任务注册。如对于消息队列,任务可以使用函数msgQEvStart()来进行注册,那么当有消息到达这个消息队列而又没有任务等待这个消息队列时,会向这个任务发送一个事件,表明消息队列可用。而对于信号量,可以用函数semEvStart()来进行注册。但必须注意的是,一个任务接收到资源发送的事件后,并不能保证这个任务能获取该资源,如获取信号量、从消息队列接收到消息。在VxWorks中,每一个任务都有一个32位事件寄存器,其中高8位由VxWorks系统保留,开发者可以使用低24位,其每一位表示一种事件,而事件的意义则完全有任务来定义,因此对于不同的任务,相同的位可能有不同的意义。而VxWorks并不对事件进行计数,而只表示该事件发生过,这与消息队列不同,因此接收事件的任务并不能知道接受到的事件发生的次数。事件非常适合于一个任务必须与多个任务进行通信的场合,如任务A必须同时与任务B、任务C、任务D进行通信,其中任务B通过消息队列向任务A发送数据,其发送频率较低,它要求任务A必须及时进行处理;而任务C则只是向任务A指示一种状态,但频率很高;而任务D用来通知任务A释放动态申请的资源,并停止运行。在这种场合,事件机制能很好地解决问题。三、 总结在VxWorks中,任务之间高效、经济地通信对整个系统的性能有很大的影响。一般来说
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康教育公众咨询方案
- 学校拼音考试试题及答案
- DB65T 4338-2021 玉米产区玉米螟绿色防控技术规程
- 活动1 策划方案巧编排说课稿-2025-2026学年初中信息技术安徽版八年级上册-安徽版2018
- DB65T 4447-2021 羊粪有机肥机械化制作技术规范
- 农业绿色转型背景下2025年农业绿色技术创新与应用前景报告
- 有关音乐的测试题及答案
- 2025年邮政综合考题题库及答案
- 城东科四考试题型及答案
- 第16课 我的“冬奥会”(三)说课稿-2025-2026学年初中信息技术龙教版2018八年级上册-龙教版2018
- O型圈推荐沟槽设计
- GB/T 3810.14-2016陶瓷砖试验方法第14部分:耐污染性的测定
- GB/T 26567-2011水泥原料易磨性试验方法(邦德法)
- 企业知识产权管理中的专利挖掘工作概述课件
- 癫痫的急救与护理课件
- 国家地表水环境质量监测网采测分离实施方案课件
- 【高等数学练习题】兰州交通大学专升本自考真题汇总(附答案解析)
- 加速康复在肝胆胰外科的应用课件
- 【完整版】锁骨骨折护理查房课件
- 大学植物学1细胞
- GB∕T 35320-2017 危险与可操作性分析(HAZOP分析)应用指南
评论
0/150
提交评论