任务同步与通信ppt课件_第1页
任务同步与通信ppt课件_第2页
任务同步与通信ppt课件_第3页
任务同步与通信ppt课件_第4页
任务同步与通信ppt课件_第5页
已阅读5页,还剩42页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八讲4 义务同步与通讯授课教师:李英祥电邮地址:drliyingxiang163 主要内容1. 事件控制块ECB 2. 信号量 3. 邮箱4. 音讯队列 1. 事件控制块ECB事件控制块ECB初始化一个ECB块 OSEVENTWAITLISTINIT使一个义务进入就绪形状 OSEVENTTASKRDY使一个义务进入等待形状 OSEVENTTASKWAIT由于等待超时将一个义务置为就绪形状 OSEVENTTO事件控制块ECBwC/OS-II经过定义的OS_EVENT数据构造事件控制块ECB来维护一个事件控制块的一切信息;w该构造中除了包含了:w事件本身的定义,如用于信号量的计数器,用于指向邮箱

2、的指针,以及指向音讯队列的指针数组等;w等待该事件的一切义务的列表;OSEventType定义了事件的详细类型,可以是:信号量OS_EVENT_SEM;邮箱OS_EVENT_TYPE_MBOX;或音讯队列OS_EVENT_TYPE_Q中的一种; 与义务就绪列表类似!等待事件义务列表等待事件义务列表 w事件控制块的总数由用户所需求的信号量、邮箱和音讯队列的总数决议;w该值由OS_CFG.H 中的#define OS_MAX_EVENTS定义;w在调用OSInit时,一切事件控制块被链接成一个单向链表空闲事件控制块链表;w每当建立一个信号量、邮箱或者音讯队列时,就从该链表中取出一个空闲事件控制块,

3、并对它进展初始化;w由于信号量、邮箱和音讯队列一旦建立就不能删除,所以事件控制块也不能放回到空闲事件控制块链表中; w对于事件控制块进展的一些通用操作包括:w初始化一个事件控制块w使一个义务进入就绪态w使一个义务进入等待该事件的形状w由于等待超时而使一个义务进入就绪态wC/OS-II将上面的操作用4个系统函数实现,它们是:wOSEventWaitListInitwOSEventTaskRdywOSEventWaitwOSEventTO初始化一个事件控制块OSEventWaitListInitw当建立一个信号量、邮箱或者音讯队列时,相应的建立函数OSSemCreate,OSMboxCreate,

4、或者OSQCreate经过调用OSEventWaitListInit对事件控制块中的等待义务列表进展初始化;w该函数的调用参数只需一个,就是指向需求初始化的事件控制块的指针pevent。 使一个义务进入就绪态OSEventTaskRdyw当发生了某个事件,该事件对应的OSSemPost,OSMboxPost,OSQPost,和OSQPostFront函数调用OSEventTaskRdy;w该函数从等待义务队列中删除HPT义务Highest Priority Task,并把该义务置于就绪态;使一个义务进入等待某事件发生形状 OSEventTaskWaitw当某个义务要等待一个事件的发生时,相应事

5、件的OSSemPend,OSMboxPend或者OSQPend函数会调用该函数OSEventTaskWait;w该函数将当前义务从就绪义务表中删除,并放到相应事件的事件控制块的等待义务表中; 等待超时而将义务置为就绪态 OSEventTOw当在预先指定的时间内义务等待的事件没有发生时,OSTimeTick函数会由于等待超时而将义务的形状置为就绪;w在这种情况下,事件的OSSemPend,OSMboxPend或者OSQPend函数会调用OSEventTO来完成这项任务;w该函数担任从事件控制块中的等待义务列表里将义务删除,并把它置成就绪形状;w信号量w建立信号量OSSemCreate w等待信号

6、量 OSSemPend w发送信号量 OSSemPost w无等待地恳求信号量 OSSemAccept w查询信号量的当前形状 OSSemQuery2. 信号量wC/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数0 到65,535之间;另一个是由等待该信号量的义务组成的等待义务表 ;w假设信号量是用于对共享资源的访问,那么该信号量的初始值应设为1例如,把它当作二值信号量运用。最后,假设该信号量是用来表示允许义务访问n个一样的资源,那么该初始值显然应该是n,并把该信号量作为一个可计数的信号量运用;wC/OS-II提供了5个对信号量进展操作的函数:OSSemCr

7、eate,OSSemPend,OSSemPost,OSSemAccept和OSSemQuery 建立信号量OSSemCreate wOSSemCreate函数建立并初始化一个信号量。信号量的作用如下:w允许一个义务和其他义务或者中断同步w获得设备的运用权w标志事件的发生w参数wvalue 参数是建立的信号量的初始值,可以取0到65535之间的任何值。w前往值w OSSemCreate前往给调用函数一个指向义务控制块的指针。w 假设没有可用的事件控制块,OSSemCreate函数前往空指针。 等待信号量 OSSemPend wOSSemPend函数用于义务试图获得设备的运用权。w假设义务调用OS

8、SemPend函数时,信号量的值大于零,OSSemPend函数递减该值并前往该值。假设调用时信号量等于零,OSSemPend函数将义务参与该信号量的等待队列。OSSemPend函数挂起当前义务直到其他的义务或中断置起信号量或超出等待的预期时间。w假设在预期的时钟节拍内信号量被置起,C/OS-默许最高优先级的义务获得信号量恢复执行。一个被OSTaskSuspend函数挂起的义务也可以接受信号量,但这个义务将不时坚持挂起形状直到经过调用OSTaskResume函数恢复义务的运转。w参数参数wpevent 是指向信号量的指针。该指针的值在建立该信号量时可以是指向信号量的指针。该指针的值在建立该信号量

9、时可以得到。参考得到。参考OSSemCreate函数。函数。wTimeout 允许一个义务在经过了指定数目的时钟节拍后还没有得允许一个义务在经过了指定数目的时钟节拍后还没有得到需求的信号量时恢复运转形状。假设该值为零表示义务将继续的到需求的信号量时恢复运转形状。假设该值为零表示义务将继续的等待信号量。最大的等待时间为等待信号量。最大的等待时间为65535个时钟节拍。这个时间长度个时钟节拍。这个时间长度并不是非常严厉的,能够存在一个时钟节拍的误差,由于只需在一并不是非常严厉的,能够存在一个时钟节拍的误差,由于只需在一个时钟节拍终了后才会减少定义的等待超时时钟节拍。个时钟节拍终了后才会减少定义的等

10、待超时时钟节拍。wErr 是指向包含错误码的变量的指针。是指向包含错误码的变量的指针。OSSemPend函数前往函数前往的错误码能够为下述几种:的错误码能够为下述几种:wOS_NO_ERR :信号量不为零。:信号量不为零。wOS_TIMEOUT :信号量没有在指定的周期数内置起。:信号量没有在指定的周期数内置起。wOS_ERR_PEND_ISR :从中断调用该函数。虽然规定了不允许从:从中断调用该函数。虽然规定了不允许从中断调用该函数,但中断调用该函数,但C/OS-依然包含了检测这种情况的功能。依然包含了检测这种情况的功能。wOS_ERR_EVENT_TYPE :pevent 不是指向信号量的

11、指针;不是指向信号量的指针;发送信号量 OSSemPost OSSemPost函数置起指定的信号量:假设指定的信号量是零或大于零,OSSemPost函数递增该信号量并前往。假设有任何义务在等待信号量,最高优先级的义务将得到信号量并进入就绪形状。参数pevent 是指向信号量的指针。该指针的值在建立该信号量时可以得到。前往值OSSemPost函数的前往值为下述之一:OS_NO_ERR :信号量胜利的置起OS_SEM_OVF :信号量的值溢出OS_ERR_EVENT_TYPE :pevent 不是指向信号量的指针。 无等待地恳求信号量 OSSemAccept 当一个义务恳求一个信号量时,假设该信号

12、量暂时无效,也可以让该义务简单地前往,而不是进入睡眠等待形状,这种情况下的操作是由OSSemAccept函数完成的 ;参数pevent 是指向需求查询的设备的信号量;前往值当调用OSSemAccept函数时,设备信号量的值大于零,阐明设备就绪,这个值被前往调用者,设备信号量的值减一;当调用OSSemAccept函数时,设备信号量的值等于零,阐明设备没有就绪,前往零;查询信号量的当前形状 OSSemQueryOSSemQuery函数用于获取某个信号量的信息:可以得知能否有,以及有多少义务位于信号量的义务等待队列中;运用OSSemQuery之前,运用程序需求先创建类型为OS_SEM_DATA的数据

13、构造,用来保管从信号量的事件控制块中获得的数据;参数pevent是一个指向信号量的指针。该指针在信号量建立后前往调用程序;Pdata是一个指向数据构造OS_SEM_DATA的指针;前往值 OSSemQuery函数有下述两个前往值:OS_NO_ERR 表示调用胜利。OS_ERR_EVENT_TYPE 表示未向信号量传送指针。 2. 邮箱邮箱建立一个邮箱OSMboxCreate等待一个邮箱中的音讯OSMboxPend发送一个音讯到邮箱中OSMboxPost无等待地从邮箱中得到一个音讯OSMboxAccept查询一个邮箱的形状OSMboxQuery邮箱w邮箱是C/OS-II中另一种通讯机制;w它可以

14、使一个义务或者中断效力子程序向另一个义务发送一个指针型的变量;w该指针指向一个包含了特定“音讯的数据构造; wC/OS-II提供了5种对邮箱的操作:wOSMboxCreatewOSMboxPendwOSMboxPostwOSMboxAcceptwOSMboxQuery 建立一个邮箱OSMboxCreateOSMboxCreate建立并初始化一个音讯邮箱,音讯邮箱允许义务或中断向其他一个或几个义务发送音讯参数msg 参数用来初始化建立的音讯邮箱。假设该指针不为空,建立的音讯邮箱将含有音讯。前往值指向分配给所建立的音讯邮箱的事件控制块的指针。假设没有可用的事件控制块,前往空指针。 等待一个邮箱中的

15、音讯OSMboxPendwOSMboxPend用于义务等待音讯。音讯经过中断或另外的义务发送给需求的义务。音讯是一个以指针定义的变量,在不同的程序中音讯的运用也能够不同。假设调用OSMboxPend函数时音讯邮箱曾经存在需求的音讯,那么该音讯被前往给OSMboxPend的调用者,音讯邮箱中去除该音讯。假设调用OSMboxPend函数时音讯邮箱中没有需求的音讯,OSMboxPend函数挂起当前义务直到得到需求的音讯或超出定义等待超时的时间。假好似时有多个义务等待同一个音讯,C/OS-默许最高优先级的义务获得音讯并且义务恢复执行。一个由OSTaskSuspend函数挂起的义务也可以接受音讯,但这个

16、义务将不时坚持挂起形状直到经过调用OSTaskResume函数恢复义务的运转。 参数参数pevent 是指向即将接受音讯的音讯邮箱的指针。该指针的是指向即将接受音讯的音讯邮箱的指针。该指针的值在建立该音讯邮箱时可以得到;值在建立该音讯邮箱时可以得到;Timeout 允许一个义务在经过了指定数目的时钟节拍后还没允许一个义务在经过了指定数目的时钟节拍后还没有得到需求的音讯时恢复运转。假设该值为零表示义务将继有得到需求的音讯时恢复运转。假设该值为零表示义务将继续的等待音讯;续的等待音讯;Err 是指向包含错误码的变量的指针;是指向包含错误码的变量的指针;前往值前往值OSMboxPend函数前往接受的

17、音讯并将函数前往接受的音讯并将 *err置为置为OS_NO_ERR;假设在指定数目的时钟节拍内没有接遭到需求的音讯,假设在指定数目的时钟节拍内没有接遭到需求的音讯,OSMboxPend函数前往空指针并且将函数前往空指针并且将 *err设置为设置为OS_TIMEOUT。 发送一个音讯到邮箱中OSMboxPostOSMboxPost函数经过音讯邮箱向义务发送音讯。假设音讯邮箱中曾经存在音讯,前往错误码阐明音讯邮箱已满。OSMboxPost函数立刻前往调用者,音讯也没有可以发到音讯邮箱。假设有多个义务在等待音讯邮箱的音讯,最高优先级的义务将得到这个音讯。参数pevent 是指向即将接受音讯的音讯邮箱

18、的指针。Msg 是即将实践发送给义务的音讯。音讯是一个指针长度的变量,在不同的程序中音讯的运用也能够不同。不允许传送一个空指针,由于这意味着音讯邮箱为空。前往值OS_NO_ERR :音讯胜利的放到音讯邮箱中。OS_MBOX_FULL :音讯邮箱曾经包含了其他音讯,不空。OS_ERR_EVENT_TYPE :pevent 不是指向音讯邮箱的指针。 无等待地从邮箱中得到一个音讯OSMboxAcceptOSMboxAccept函数查看指定的音讯邮箱能否有需求的音讯。不同于OSMboxPend函数,假设没有需求的音讯,OSMboxAccept函数并不挂起义务。假设音讯曾经到达,该音讯被传送到用户义务并

19、且从音讯邮箱中去除。参数pevent 是指向需求查看的音讯邮箱的指针。前往值假设音讯曾经到达,前往指向该音讯的指针;假设音讯邮箱没有音讯,前往空指针。查询一个邮箱的形状OSMboxQueryOS_MBOX.C义务或中断OS_MBOX_ENOSMboxQuery函数用来获得音讯邮箱的信息。用户程序必需分配一个OS_MBOX_DATA的数据构造,该构造用来从音讯邮箱的事件控制块接受数据。经过调用OSMboxQuery函数可以知道义务能否在等待音讯以及有多少个义务在等待音讯,还可以检查音讯邮箱如今的音讯。参数pevent 是指向即将接受音讯的音讯邮箱的指针。Pdata 是指向OS_MBOX_DATA

20、数据构造的指针,该数据构造包含下述成员:Void *OSMsg;/* 音讯邮箱中音讯的复制 */INT8U OSEventTblOS_EVENT_TBL_SIZE;/*音讯邮箱等待队列的复制*/INT8U OSEventGrp;前往值OS_NO_ERR :调用胜利OS_ERR_EVENT_TYPE :pevent 不是指向音讯邮箱的指针。3.音讯队列 音讯队列建立一个音讯队列OSQCreate等待一个音讯队列中的音讯OSQPend向音讯队列发送一个音讯FIFOOSQPost向音讯队列发送一个音讯LIFOOSQPostFront无等待地从一个音讯队列中获得音讯 OSQAccept清空一个音讯队列

21、 OSQFlush查询一个音讯队列的形状OS uery音讯队列w音讯队列是C/OS-II中的一种通讯机制,它可以使一个义务或者中断效力子程序向另一个义务发送以指针方式定义的变量。wC/OS-II提供了7个对音讯队列进展操作的函数:OSQCreate,OSQPend,OSQPost,OSQPostFront,OSQAccept,OSQFlush和OS uery函数。 实践上,我们可以将音讯队列看作时多个邮箱组成的数组,只是它们共用一个等待义务列表。每个指针所指向的数据构造是由详细的运用程序决议的。N代表了音讯队列中的总单元数。 wC/OS-II在初始化时建立一个空闲的队列控制块链表,如图 F6.

22、9所示。 建立一个音讯队列OSQCreateOSQCreate函数建立一个音讯队列。义务或中断可以经过音讯队列向其他一个或多个义务发送音讯。音讯的含义是和详细的运用亲密相关的。参数start 是音讯内存区的基地址,音讯内存区是一个指针数组。Size 是音讯内存区的大小。前往值前往一个指向音讯队列事件控制块的指针。假设没有空余的事件空闲块,前往空指针。 等待一个音讯队列中的音讯OSQPendwOSQPend函数用于义务等待音讯。w假设调用OSQPend函数时队列中曾经存在需求的音讯,那么该音讯被前往给OSQPend函数的调用者,队列中去除该音讯。w假设调用OSQPend函数时队列中没有需求的音讯

23、,OSQPend函数挂起当前义务直到得到需求的音讯或超出定义的超时时间。w假好似时有多个义务等待同一个音讯,C/OS-默许最高优先级的义务获得音讯并且义务恢复执行。w一个由OSTaskSuspend函数挂起的义务也可以接受音讯,但这个义务将不时坚持挂起形状直到经过调用OSTaskResume函数恢复义务的运转。w参数参数wpevent 是指向即将接受音讯的队列的指针。该指针的值在建立该是指向即将接受音讯的队列的指针。该指针的值在建立该队列时可以得到。队列时可以得到。wTimeout 允许一个义务在经过了指定数目的时钟节拍后还没有得允许一个义务在经过了指定数目的时钟节拍后还没有得到需求的音讯时恢

24、复运转形状。假设该值为零表示义务将继续的等到需求的音讯时恢复运转形状。假设该值为零表示义务将继续的等待音讯。待音讯。wErr 是指向包含错误码的变量的指针。是指向包含错误码的变量的指针。OSQPend函数前往的函数前往的错误码能够为下述几种:错误码能够为下述几种:wOS_NO_ERR :音讯被正确的接受。:音讯被正确的接受。wOS_TIMEOUT :音讯没有在指定的周期数内送到。:音讯没有在指定的周期数内送到。wOS_ERR_PEND_ISR :从中断调用该函数。虽然规定了不允许从:从中断调用该函数。虽然规定了不允许从中断调用该函数,但中断调用该函数,但C/OS-依然包含了检测这种情况的功能。

25、依然包含了检测这种情况的功能。wOS_ERR_EVENT_TYPE :pevent 不是指向音讯队列的指针。不是指向音讯队列的指针。w前往值前往值wOSQPend前往接受的音讯并将前往接受的音讯并将 *err置为置为OS_NO_ERR。假。假设没有在指定数目的时钟节拍内接遭到需求的音讯,前往空指针并设没有在指定数目的时钟节拍内接遭到需求的音讯,前往空指针并且将且将 *err设置为设置为OS_TIMEOUT。 向音讯队列发送一个音讯FIFOOSQPostOSQPost函数经过音讯队列向义务发送音讯。假设队列中曾经存满音讯,前往错误码。OSQPost函数立刻前往调用者,音讯也没有可以发到队列。假设有任何义务在等待队列中的音讯,最高优先级的义务将得到这个音讯。假设等待音讯的义务优先级比发送音讯的义务优先级高,那么高优先级的义务将得到音讯而恢复执行,也就是说,发生了一次义务切换。音讯队列是先入先出FIFO机制的,先进入队列的音讯先被传送给义务。参数pevent 是指向即将接受音讯的音讯队列的指针。Msg 是即将实践发送给义务的音讯。前往值OS_NO_ERR :音讯胜利的放到音讯队列中。OS_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论