任务同步与通信

任务同步与通信

ID:27348413

大小:336.01 KB

页数:47页

时间:2018-12-01

任务同步与通信_第1页
任务同步与通信_第2页
任务同步与通信_第3页
任务同步与通信_第4页
任务同步与通信_第5页
资源描述:

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

1、第八讲(4)任务同步与通信授课教师:李英祥电邮地址:drliyingxiang@163.com主要内容1.事件控制块ECB2.信号量3.邮箱4.消息队列2021/7/182www.cuit.edu.cn1.事件控制块ECB事件控制块ECB初始化一个ECB块OSEVENTWAITLISTINIT()使一个任务进入就绪状态OSEVENTTASKRDY()使一个任务进入等待状态OSEVENTTASKWAIT()由于等待超时将一个任务置为就绪状态OSEVENTTO()2021/7/183www.cuit.edu.cn

2、事件控制块ECBµC/OS-II通过定义的OS_EVENT数据结构(事件控制块ECB)来维护一个事件控制块的所有信息;该结构中除了包含了:事件本身的定义,如用于信号量的计数器,用于指向邮箱的指针,以及指向消息队列的指针数组等;等待该事件的所有任务的列表;2021/7/184www.cuit.edu.cnOSEventType定义了事件的具体类型,可以是:信号量(OS_EVENT_SEM);邮箱(OS_EVENT_TYPE_MBOX);或消息队列(OS_EVENT_TYPE_Q)中的一种;2021/7/185w

3、ww.cuit.edu.cn与任务就绪列表类似!等待事件任务列表2021/7/186www.cuit.edu.cn事件控制块的总数由用户所需要的信号量、邮箱和消息队列的总数决定;该值由OS_CFG.H中的#defineOS_MAX_EVENTS定义;在调用OSInit()时,所有事件控制块被链接成一个单向链表——空闲事件控制块链表;每当建立一个信号量、邮箱或者消息队列时,就从该链表中取出一个空闲事件控制块,并对它进行初始化;因为信号量、邮箱和消息队列一旦建立就不能删除,所以事件控制块也不能放回到空闲事件控制块

4、链表中;2021/7/187www.cuit.edu.cn2021/7/188www.cuit.edu.cn对于事件控制块进行的一些通用操作包括:初始化一个事件控制块使一个任务进入就绪态使一个任务进入等待该事件的状态因为等待超时而使一个任务进入就绪态µC/OS-II将上面的操作用4个系统函数实现,它们是:OSEventWaitListInit()OSEventTaskRdy()OSEventWait()OSEventTO()2021/7/189www.cuit.edu.cn初始化一个事件控制块OSEventW

5、aitListInit()当建立一个信号量、邮箱或者消息队列时,相应的建立函数OSSemCreate(),OSMboxCreate(),或者OSQCreate()通过调用OSEventWaitListInit()对事件控制块中的等待任务列表进行初始化;该函数的调用参数只有一个,就是指向需要初始化的事件控制块的指针pevent。2021/7/1810www.cuit.edu.cn使一个任务进入就绪态OSEventTaskRdy()当发生了某个事件,该事件对应的OSSemPost(),OSMboxPost(),O

6、SQPost(),和OSQPostFront()函数调用OSEventTaskRdy();该函数从等待任务队列中删除HPT任务(HighestPriorityTask),并把该任务置于就绪态;2021/7/1811www.cuit.edu.cn使一个任务进入等待某事件发生状态OSEventTaskWait()当某个任务要等待一个事件的发生时,相应事件的OSSemPend(),OSMboxPend()或者OSQPend()函数会调用该函数OSEventTaskWait();该函数将当前任务从就绪任务表中删除,并

7、放到相应事件的事件控制块的等待任务表中;2021/7/1812www.cuit.edu.cn等待超时而将任务置为就绪态OSEventTO()当在预先指定的时间内任务等待的事件没有发生时,OSTimeTick()函数会因为等待超时而将任务的状态置为就绪;在这种情况下,事件的OSSemPend(),OSMboxPend()或者OSQPend()函数会调用OSEventTO()来完成这项工作;该函数负责从事件控制块中的等待任务列表里将任务删除,并把它置成就绪状态;2021/7/1813www.cuit.edu.cn

8、信号量建立信号量OSSemCreate()等待信号量OSSemPend()发送信号量OSSemPost()无等待地请求信号量OSSemAccept()查询信号量的当前状态OSSemQuery()2.信号量2021/7/1814www.cuit.edu.cnµC/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数(0到65,535之间);另一个是由等待该信号量的任务组成

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

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

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