ucos-ii同步与通信

ucos-ii同步与通信

ID:19637800

大小:1.21 MB

页数:27页

时间:2018-10-04

ucos-ii同步与通信_第1页
ucos-ii同步与通信_第2页
ucos-ii同步与通信_第3页
ucos-ii同步与通信_第4页
ucos-ii同步与通信_第5页
资源描述:

《ucos-ii同步与通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第4章任务的同步与通信主要内容信号量邮箱和消息队列事件异步信号*概述多任务系统中任务之间的关系相互独立仅竞争CPU资源竞争除CPU外的其他资源(互斥)同步协调彼此运行的步调通信彼此间传递数据或信息,以协同完成某项工作概述任务能以以下方式与中断处理程序或其他任务进行同步或通信:单向同步或通信:一个任务与另一个任务或一个ISR同步或通信。双向同步或通信:两个任务相互同步或通信。双向同步不能在任务与ISR之间进行,因为ISR不能等待。TaskxTaskyPOSTPENDISRxTaskyPOSTPENDTaskxTaskyPO

2、STPENDPOSTPEND任务与任务之间的同步(单向)任务与ISR之间的同步(单向)任务与任务之间的同步(双向)概述在嵌入式多任务系统中,任务间的耦合程度是不一样的:耦合程度较高:任务之间需要进行大量的通信,相应的系统开销较大;耦合程度较低:任务之间不存在通信需求,其间的同步关系很弱甚至不需要同步或互斥,系统开销较小。研究任务间耦合程度的高低对于合理地设计应用系统、划分任务有很重要的作用。概述在单处理器平台上,嵌入式操作系统内核提供的同步、互斥与通信机制主要包括:信号量(semaphore),用于互斥与同步事件(组)(

3、eventgroup),用于同步异步信号(asynchronoussignal),用于同步邮箱(mailbox)、消息队列(messagequeue)或管道(pipe),用于消息通信概述以下一些机制也可用于同步与通信(在单处理器或多处理器系统中):全局变量共享内存Sockets远程过程调用(RemoteProcedureCall)系统中的多个任务在运行时,经常需要互相无冲突地访问同一个共享资源,或者需要互相支持和依赖,甚至有时还要互相加以必要的限制和制约,才保证任务的顺利运行。因此,操作系统必须具有对任务的运行进行协调的

4、能力,从而使任务之间可以无冲突、流畅地同步运行,而不致导致灾难性的后果。与人们依靠通信来互相沟通,从而使人际关系和谐、工作顺利的做法一样,计算机系统是依靠任务之间的良好通信来保证任务与任务的同步的。例如,两个任务:任务A和任务B,它们需要通过访问同一个数据缓冲区合作完成一项工作,任务A负责向缓冲区写入数据,任务B负责从缓冲区读取该数据。显然,当任务A还未向缓冲区写入数据时(缓冲区为空时),任务B因不能从缓冲区得到有效数据而应该处于等待状态,只有等任务A向缓冲区写入了数据之后,才应该通知任务B去取数据。例如,任务A和任务B

5、共享一台打印机,如果系统已经把打印机分配给了任务A,则任务B因不能获得打印机的使用权而应该处于等待状态,只有当任务A把打印机释放后,系统才能唤醒任务B使其获得打印机的使用权。如果这两个任务不这样做,那么也会造成极大的混乱。总之,多个任务共享同一资源或有工作顺序要求时,在正式工作之前要互相打招呼。一个没有同步的例子例4-1事件任务间的同步依赖于任务间的通信。在μC/OS-II中,是使用信号量、邮箱(消息邮箱)和消息队列这些被称作事件的中间环节来实现任务之间的通信的。一个简单的信号量ac_key1/0收信方发信方共享资源例4

6、-2二进制信号量010事件控制块为了把描述事件的数据结构统一起来,μC/OS-II使用叫做事件控制块ECB的数据结构来描述诸如信号量、邮箱(消息邮箱)和消息队列这些事件。事件控制块中包含包括等待任务表在内的所有有关事件的数据typedefstruct{INT8UOSEventType;//事件的类型INT16UOSEventCnt;//信号量计数器void*OSEventPtr;//消息或消息队列的指针INT8UOSEventGrp;//等待事件的任务组INT8UOSEventTbl[OS_EVENT_TBL_SIZE]

7、;//任务等待表}OS_EVENT;信号量内部实现机制实例说明 -µC/OS-II当.OSEventTbl[n]中的任何一位为1时,OSEventGrp中的第n位为1。与任务就绪列表类似!把一个任务置于等待状态要调用OS_EventTaskWait()函数。该函数的原型为:voidOS_EventTaskWait(OS_EVENT*pevent//事件控制块的指针);函数OS_EventTaskWait(),将在任务调用函数OS×××Pend()请求一个事件时,被OS×××Pend()所调用。如果一个正在等待的任务具备了

8、可以运行的条件,那么就要使它进入就绪状态。这时要调用OS_EventTaskRdy()函数。该函数的作用就是把调用这个函数的任务在任务等待表中的位置清0(解除等待状态)后,再把任务在任务就绪表中对应的位置1,然后引发一次任务调度。OS_EventTaskRdy()函数的原型为:INT8UOS_EventTaskRdy

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。