第6章信号量与互斥信号量管理解说.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 信号量与互斥信号量管理 6.1 信号量管理 信号量的类型 一种是只有0和1两种值的信号量,称为二值信号量; 另一种是可以有多种值的信号量,称为计数式信号量,其值的大小取决于信号量的数据类型,如计数式信号量是8位整型变量,则其值可以是0~255,若是16位整型变量,则其值可以是0~65,535。 μC/OS-II信号量的两个组成部分 一个是信号量的计数值,范围是0~65,535; 另一个是由等待该信号量的任务组成的任务等待列表。 6.1.1.2 信号量的功能 信号量可以使用在如下场合: 允许一个任务与其它任务或中断同步; 取得共享资源的使用权; 标志事件的发生。 6.1.1.4 信号量管理函数 如表6.1所示,μC/OS-II提供了6种对信号量进行操作的函数,所属文件是OS_SEM.C。 6.1.1.5 信号量的配置常量 6.1.1.6 中断、任务与信号量之间的关系 如果信号量用于对共享资源的访问,那么信号量就用钥匙符号。符号旁边的数字N代表可用资源数。对于二值信号量,该值就是1; 如果信号量用于表示某事件的发生,那么就用旗帜符号。这时的数字N代表事件已经发生的次数。 6.1.2 建立一个信号量,OSSemCreate() 6.1.2.1 函数原型 OS_EVENT * OSSemCreate( INT16U value) 功能:OSSemCreate()函数用于建立一个信号量,并对信号量赋予初始计数值。这个初始值就是函数的参数value,可以为0~65,535中的任何值,初始值有自己的设置规则。 初始值的设置规则 如果信号量用来表示一个或多个事件的发生,那么该信号量的初值通常赋为0; 如果信号量用于对共享资源的访问,那么该信号量的初值应赋为1(例如,把它当成二值信号量使用); 如果信号量用来表示允许访问n个相同的资源,那么该信号量的初值应赋为n,并把信号量作为一个可计数的信号量使用。 返回值:OSSemCreate()函数返回指向分配给所建立的信号量的事件控制块的指针。如果没有可用的事件控制块,OSSemCreate()函数返回空指针。 调用者:任务或者启动代码。 配置常量:OS_SEM_EN。使用任何信号量函数的前提都是需要用此函数建立信号量。 6.1.2 建立一个信号量,OSSemCreate() 6.1.2.1 函数原型 OS_EVENT * OSSemCreate( INT16U value) reentrant 功能:OSSemCreate()函数用于建立一个信号量,并对信号量赋予初始计数值。这个初始值就是函数的参数value,可以为0~65,535中的任何值,初始值有自己的设置规则。 初始值的设置规则 如果信号量用来表示一个或多个事件的发生,那么该信号量的初值通常赋为0; 如果信号量用于对共享资源的访问,那么该信号量的初值应赋为1(例如,把它当成二值信号量使用); 如果信号量用来表示允许访问n个相同的资源,那么该信号量的初值应赋为n,并把信号量作为一个可计数的信号量使用。 调用者:任务或者启动代码。 配置常量:OS_SEM_EN。使用任何信号量函数的前提都是需要用此函数建立信号量。 图6.3 返回之前的ECB数据结构 6.1.3 删除一个信号量,OSSemDel() 6.1.3.1 函数原型 OS_EVENT *OSSemDel(OS_EVENT *pevent,INT8U opt,INT8U *err) reentrant 功能:OSSemDel()函数用于删除一个信号量。 调用者:只能是任务。 配置常量:OS_SEM_EN和OS_SEM_DEL_EN。 参数 pevent 指向信号量的指针,该指针的值可以在建立信号量时得到; opt 定义信号量删除条件的选项,它有两个选择: OS_DEL_NO_PEND,规定只能在已经没有任何任务等待信号量时,才能删除该信号量; OS_DEL_ALWAYS, 规定不管有没有任务在等待,立即删除这个信号量。删除后,所有等待该信号量的任务立即进入就绪状态。 err 指向包含错误代码的变量的指针,返回值可能为下列几种之一; OS_NO_ERR 调用成功,信号量被删除; OS_ERR_DEL_ISR 试图在中断服务子程序中删除信号量; OS_ERR_INVALID_OPT 参数opt不是2种合法参数之一; OS_ERR_TASK_WAITING 有任务在等待信号量; OS_ERR_PEVENT_TYPE pevent不是指向信号量的指针; OS_ERR_PEVENT_NULL 没有可用的OS_EVENT数据结构。 6.1.3.2 返回值 如果信号量已被删除了,则返回空

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档