第五节 任务间通信.pdfVIP

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 任务间通信 第五章 任务间通信 前面我们介绍了,实时内核的主要部分是任务和任务地调度,这样内核中多个任务之间不可避 免的存在相互协同的关系,来完成一定的内核功能。这种协同最直观的就是任务间相互通信。包括 VxWorks等所有的嵌入式操作系统一般都会提供许多任务间通信的方法,通常包括: 共享内存,数据的简单共享。 信号量,基本的互斥和同步。 消息队列和管道,同一CPU内多任务间消息传递。 Socket和远程调用,任务间透明的网络通信。 Signals,用于异常处理。 本节我们对于每一种机制,均从主要数据结构、功能和有关的资源配置等方面讲解,并且依然 用 VxWorks 为事例。希望通过本章的学习,读者能够了解实时多任务操作系统的同步、互斥与通讯 机制的基本原理,以便在做具体应用开发时能够正确、合理地使用。 5.1 实时内核任务间通信机制 一、 任务之间的关系 嵌入式实时多任务应用是由多个任务、多个中断处理过程以及嵌入式实时操作系统组成的有机 整体。嵌入式实时操作系统为应用提供系统管理、底层的支持、协调任务和中断处理程序功能。 操作系统任务之间的关系有: 相互独立:任务之间仅仅存在竞争CPU的资源,再无其它关联。 竞争除CPU外的其它资源(互斥):共享资源是多任务系统中主要关心的问题,在系统中,大 多数的资源在某一时刻仅能被某一任务使用,并且在使用过程中不能被其它任务中断。这些资源主 要包括特定的外设、共享内存等。当 CPU 禁止并发操作时,那些包含了使用 CPU 之外的共享资源的 代码就不能同时被多个任务调用执行。这样的代码称为“临界区域”。如果两个任务同时进入临界区 域,将会产生意想不到的错误。 同步:协调彼此运行的步调。 通信:彼此间传递数据和信息,以协调完成某项工作。通信可以是在任务与任务之间,或中 断服务程序(ISR)与任务之间。 在嵌入式多任务应用程序中,一项工作的完成往往要通过多个任务或多个任务与多个中断处理 程序共同完成。它们之间必须协调工作、相互配合,彼此还需要交换信息。交换信息的方式一般采 用: 单向同步或通信。 双向同步或通信。 另外,在嵌入式多任务系统中,如果任务之间的通信信息较大,则相应的系统开销就大,他们 之间的耦合程度较高;如果两个任务之间不存在信息的交换,其间的同步关系很弱,甚至不需要同 步或互斥,则它们的耦合程度就低,系统的开销也就小。研究任务之间耦合程度的高低对于合理地 设计应用系统和划分任务有很主要的作用。 二、共享内存 任务间最直接最明显的通信方法是访问共享数据结构,即不同的任务都可以访问同一地址空间。 由于大部分嵌入式系统的任务共存于单一的线性地址空间,在多个任务间共享数据结构是非常容易 的。因此,共享内存为多任务提供了一种非常简单而且高效的通信机制。只要通信任务双方采用了 协商一致的数据结构,包括各种类型的全局变量、双向链表、环行队列等复杂的数据结构,都可以 被所用任务直接访问。一个例子如图 5.1.1所示。 为了方便编程,一般的嵌入式系统都定义了几种数据结构类型:线性缓冲、环行缓冲、连接链 5-1 第5章 任务间通信 等,这些类型可以被运行在不同上下文的代码引用。 1、连接链 连接链是一种双向连接的数据结构,例如VxWorks定义在tornado\target\h\stLib.h头文件中。 VxWorks提供的LstLib库用于设置和控制连接链。这些函数允许用户以多种方式操作一个链,提供 以下几种操作。 在链中任意位置插入或删除节点。 在链尾增加一个节点。 链接两个链。 从一个链中提取一个子链。 删除并返回链首节点。 计算链中节点数。 图 5.1.2 一个连接链 图5.1.1 多个任务

您可能关注的文档

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档