μCOS-II微小内核分析.ppt

  1. 1、本文档共148页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
μCOS-II微小内核分析

信号量| μC/OS-II微小内核分析 改进的任务控制块及任务删除函数 有了事件支持之后,删除任务时就要特别小心了。当一个任务在等待事件时可能被别的任务删除,此时尽管任务已经删除,但任务还保存在事件的等待任务列表中。当对应的事件到来之时,会将这个已经不存在(或者说睡眠态)的任务设置为就绪态,这显然是不可能的。如果在事件来临之前又建立了另一个优先级相同任务,则程序执行的结果显然是错误的。 因此,删除任务时必须将任务从它等待事件的等待任务列表中删除。 信号量| μC/OS-II微小内核分析 改进的任务控制块及任务删除函数 由于在μC/OS-II中,一个任务同一时间只能等待一个事件,所以在任务控制块中增加一个指向其所等待的事件的指针,实现这个功能就很简单了。改进后的任务控制块如下所示。 Typedef struct os_tcb { …… OS_EVENT *OSTCBEventPtr; }OS_TCB; 增加的成员,指向任务 等待的事件 信号量| μC/OS-II微小内核分析 改进的任务控制块及任务删除函数 当使用OSTCBEventPtr这个成员后,任务的删除函数也相应地得到了改进。改进的任务删除函数代码如下所示。 INT8U OSTaskDel (INT8U prio) { #if OS_EVENT_EN 0 OS_EVENT *pevent; #endif …… #if OS_EVENT_EN 0 pevent = ptcb-OSTCBEventPtr; if (pevent != (OS_EVENT *)0) { if ((pevent-OSEventTbl[ptcb-OSTCBY] = ~ptcb-OSTCBBitX) == 0) { pevent-OSEventGrp = ~ptcb-OSTCBBitY; } } #endif 增加的代码,从事件的等待任务列表中删除任务 信号量| μC/OS-II微小内核分析 改进的OS初始化 在使用事件控制块之前,需要将所有事件控制块链接成一个空闲事件控制块链表,则可以通过调用函数OS_InitEventList()来实现。从理论上来讲,只要在使用事件控制块之前调用函数OS_InitEventList()即可,但实际上在操作系统初始化时调用比较方便和可靠。这样操作系统初始化函数OSInit()就需要添加对OS_InitEventList()的调用,改进的OS初始化代码如下所示。 void OSInit (void) { OS_InitMisc(); OS_InitRdyList(); OS_InitTCBList(); OS_InitTaskIdle(); OS_InitEventList(); } 增加的函数,将所有事 件控制块链接成一个空 闲事件控制块链表 信号量| μC/OS-II微小内核分析 信号量管理 只要μC/OS-II支持信号量,就必须有3种操作:创建信号量OSSemCreate()、发送信号量OSSemPost()和等待信号量OSSemPend() 。 操作信号量 建立信号量OSSemCreate() 等待信号量OSSemPend() 发送信号量OSSemPost() 信号量| μC/OS-II微小内核分析 信号量管理 函数名称 OSSemCreate 所属文件 OS_SEM.C 函数原型 OS_EVENT *OSSemCreate (INT16U cnt) 功能描述 建立并初始化一个信号量 函数参数 cnt :建立的信号量的初始值,可以取0到65535之间的任何值 函数返回值 正常 : 指向分配给所建立的信号量的事件控制块的指针 NULL :没有可用的事件控制块 特殊说明 必须先建立信号量,然后使用 OSSemCreate函数 1、创建信号量 在使用信号量之前,必须通过调用函数OSSemCreate()来创建一个信号量,函数OSSemCreate()只有唯一的参数cnt,用于初始化信号量的计数器初始值,创建信号量函数OSSemCreate()将返回一个指针,用于识别不同的信号量 。 信号量| μC/OS-II微小内核分析 信号量管理 建立信号量的流程图如下所示。 信号量| μC/OS-II微小内核分析 信号量管理 OSSemCreate的源代码如下所示。 OS_EVENT

文档评论(0)

153****9595 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档