- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
主要内容 信号量 邮箱和消息队列 事件 异步信号* 概述 多任务系统中任务之间的关系 相互独立 仅竞争CPU资源 竞争除CPU外的其他资源(互斥) 同步 协调彼此运行的步调 通信 彼此间传递数据或信息,以协同完成某项工作 概述 任务能以以下方式与中断处理程序或其他任务进行同步或通信: 单向同步或通信:一个任务与另一个任务或一个ISR同步或通信。 双向同步或通信:两个任务相互同步或通信。双向同步不能在任务与ISR之间进行,因为ISR不能等待。 概述 在嵌入式多任务系统中,任务间的耦合程度是不一样的: 耦合程度较高:任务之间需要进行大量的通信,相应的系统开销较大; 耦合程度较低:任务之间不存在通信需求,其间的同步关系很弱甚至不需要同步或互斥,系统开销较小。 研究任务间耦合程度的高低对于合理地设计应用系统、划分任务有很重要的作用。 概述 在单处理器平台上,嵌入式操作系统内核提供的同步、互斥与通信机制主要包括: 信号量(semaphore),用于互斥与同步 事件(组)(event group),用于同步 异步信号(asynchronous signal),用于同步 邮箱(mailbox)、消息队列(message queue)或管道(pipe),用于消息通信 概述 以下一些机制也可用于同步与通信(在单处理器或多处理器系统中): 全局变量 共享内存 Sockets 远程过程调用(Remote Procedure Call) 一个简单的信号量 信号量内部实现机制实例说明-μC/OS-II 事件控制块函数总结 创建事件时调用事件初始化函数 OSXXXCreate() = OS_EventWaitListInit() 申请事件时调用事件等待函数 OSXXXPend() = OS_EventTaskWait() 超时OSXXXPend() = OS_EventTO() 发送事件时调用事件调度函数 OSXXXPost() = OS_EventTaskRdy() 事件一览 信号量 1、二进制信号量(互斥信号量),用以任务的互斥和同步 2、多进制信号量(计数信号量),用以任务的同步 消息邮箱 用以任务的同步和通信,可以传一个数据 消息队列 用以任务的同步和通信,可以传多个数据 * * 第4章 任务的同步与通信 Task x Task y POST PEND ISR x Task y POST PEND Task x Task y POST PEND POST PEND 任务与任务之间的同步(单向) 任务与ISR之间的同步(单向) 任务与任务之间的同步(双向) 系统中的多个任务在运行时,经常需要互相无冲突地访问同一个共享资源,或者需要互相支持和依赖,甚至有时还要互相加以必要的限制和制约,才保证任务的顺利运行。因此,操作系统必须具有对任务的运行进行协调的能力,从而使任务之间可以无冲突、流畅地同步运行,而不致导致灾难性的后果。 与人们依靠通信来互相沟通,从而使人际关系和谐、工作顺利的做法一样,计算机系统是依靠任务之间的良好通信来保证任务与任务的同步的。 例如,两个任务:任务A和任务B,它们需要通过访问同一个数据缓冲区合作完成一项工作,任务A负责向缓冲区写入数据,任务B负责从缓冲区读取该数据。显然,当任务A还未向缓冲区写入数据时(缓冲区为空时),任务B因不能从缓冲区得到有效数据而应该处于等待状态,只有等任务A向缓冲区写入了数据之后,才应该通知任务B去取数据。 例如,任务A和任务B共享一台打印机,如果系统已经把打印机分配给了任务A,则任务B因不能获得打印机的使用权而应该处于等待状态,只有当任务A把打印机释放后,系统才能唤醒任务B使其获得打印机的使用权。如果这两个任务不这样做,那么也会造成极大的混乱 。 总之,多个任务共享同一资源或有工作顺序要求时,在正式工作之前要互相打招呼 。 一个没有同步的例子 例4-1 事件 任务间的同步依赖于任务间的通信。在μC/OS-II中,是使用信号量、邮箱(消息邮箱)和消息队列这些被称作事件的中间环节来实现任务之间的通信的。 ac_key 1/0 收信方 发信方 共享资源 例4-2 二进制信号量 0 1 0 事件控制块 为了把描述事件的数据结构统一起来,μC/OS-II使用叫做事件控制块ECB的数据结构来描述诸如信号量、邮箱(消息邮箱)和消息队列这些事件。事件控制块中包含包括等待任务表在内的所有有关事件的数据 typedef struct { INT8U OSEventType; //事件的类型 INT16U OSEventCnt; //信号量计数器 void *OSEventPtr; /
文档评论(0)