《uCOSII原理》PPT课件

《uCOSII原理》PPT课件

ID:37689431

大小:1.96 MB

页数:18页

时间:2019-05-28

《uCOSII原理》PPT课件_第1页
《uCOSII原理》PPT课件_第2页
《uCOSII原理》PPT课件_第3页
《uCOSII原理》PPT课件_第4页
《uCOSII原理》PPT课件_第5页
资源描述:

《《uCOSII原理》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第4章任务的同步与通信系统中的多个任务在运行时,经常需要互相无冲突地访问同一个共享资源,或者需要互相支持和依赖,甚至有时还要互相加以必要的限制和制约,才保证任务的顺利运行。因此,操作系统必须具有对任务的运行进行协调的能力,从而使任务之间可以无冲突、流畅地同步运行,而不致导致灾难性的后果。与人们依靠通信来互相沟通,从而使人际关系和谐、工作顺利的做法一样,计算机系统是依靠任务之间的良好通信来保证任务与任务的同步的。例如,两个任务:任务A和任务B,它们需要通过访问同一个数据缓冲区合作完成一项工作,任务A负责向缓冲区写入数据,任务B

2、负责从缓冲区读取该数据。显然,当任务A还未向缓冲区写入数据时(缓冲区为空时),任务B因不能从缓冲区得到有效数据而应该处于等待状态,只有等任务A向缓冲区写入了数据之后,才应该通知任务B去取数据。例如,任务A和任务B共享一台打印机,如果系统已经把打印机分配给了任务A,则任务B因不能获得打印机的使用权而应该处于等待状态,只有当任务A把打印机释放后,系统才能唤醒任务B使其获得打印机的使用权。如果这两个任务不这样做,那么也会造成极大的混乱。总之,多个任务共享同一资源或有工作顺序要求时,在正式工作之前要互相打招呼。黄宏:别走啊!宋丹丹:

3、我自己的腿,我爱走就走,你管不着!黄宏:腿是你自己的,但手是咱俩的呀!事件任务间的同步依赖于任务间的通信。在μC/OS-II中,是使用信号量、邮箱(消息邮箱)和消息队列这些被称作事件的中间环节来实现任务之间的通信的。宋丹丹黄宏一个简单的信号量1/0收信方发信方共享资源事件控制块为了把描述事件的数据结构统一起来,μC/OS-II使用叫做事件控制块ECB的数据结构来描述诸如信号量、邮箱(消息邮箱)和消息队列这些事件。事件控制块中包含包括等待任务表在内的所有有关事件的数据typedefstruct{INT8UOSEventType

4、;//事件的类型INT16UOSEventCnt;//信号量计数器void*OSEventPtr;//消息或消息队列的指针INT8UOSEventGrp;//等待事件的任务组INT8UOSEventTbl[OS_EVENT_TBL_SIZE];//任务等待表}OS_EVENT;把一个任务置于等待状态要调用OS_EventTaskWait()函数。该函数的原型为:voidOS_EventTaskWait(OS_EVENT*pevent//事件控制块的指针);函数OS_EventTaskWait(),将在任务调用函数OS×××P

5、end()请求一个事件时,被OS×××Pend()所调用。如果一个正在等待的任务具备了可以运行的条件,那么就要使它进入就绪状态。这时要调用OS_EventTaskRdy()函数。该函数的作用就是把调用这个函数的任务在任务等待表中的位置清0(解除等待状态)后,再把任务在任务就绪表中对应的位置1,然后引发一次任务调度。OS_EventTaskRdy()函数的原型为:INT8UOS_EventTaskRdy(OS_EVENT*pevent,//事件控制块的指针void*msg,//未使用INT8Umsk//清除TCB状态标志掩码)

6、;函数OS_EventTaskRdy()将在任务调用函数OS×××Post()发送一个事件时,被函数OS×××Post()所调用。如果一个正在等待事件的任务已经超过了等待的时间,却仍因为没有获取事件等原因而未具备可以运行的条件,却又要使它进入就绪状态,这时要调用OS_EventTO()函数。OS_EventTO()函数的原型为:voidOS_EventTO(OS_EVENT*pevent//事件控制块的指针);函数OS_EventTO()将在任务调用OS×××Pend()请求一个事件时,被函数OS×××Pend()所调用。空

7、事件控制块链表在μC/OS-II初始化时,系统会在初始化函数OSInit()中按应用程序使用事件的总数OS_MAX_EVENTS(在文件OS_CFG.H中定义),创建OS_MAX_EVENTS个空事件控制块并借用成员OSEventPtr作为链接指针,把这些空事件控制块链接成一个单向链表。由于链表中的所有控制块尚未与具体事件相关联,故该链表叫做空事件控制块链表。以后,每当应用程序创建一个事件时,系统就会从链表中取出一个空事件控制块,并对它进行初始化以描述该事件。而当应用程序删除一个事件时,就会将该事件的控制块归还给空事件控制块

8、链表信号量及其操作在使用信号量之前,应用程序必须调用函数OSSemCreate()来创建一个信号量,OSSemCreate()的原型为:OS_EVENT*OSSemCreate(INT16Ucnt//信号量计数器初值);函数的返回值为已创建的信号量的指针。任务通过调用函数OSSemPend

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

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

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