ucOS III任务调度机制描述.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ucOS III任务调度机制描述软件学院-朱玲芳-111250254概述uC/OS-III是一个可抢占的,基于优先级的内核。根据其重要性每个任务都被分配了一个优先级。uC/OS-III支持多个任务拥有相同的优先级。 “可抢占的 ”意味当事件发生时,如果事件让高优先级任务被就绪,uC/OS-III马上将CPU的控制权交给高优先级任务 。因此,当一个任务提交信号量、发送消息给一个高优先级的任务(若该任务被就绪了),当前的任务就会被停止,更高优先级的任务获得CPU的控制权。类似的,当ISR提交信号量或发送消息给一更高优先级的任务(若该任务被就绪了),那么中断返回的时候不会返回到原任务,而是高优先级任务。特性:?时间片轮转调度?uC/OS-III允许多个任务拥有相同的优先级。当多个相同优先级的任务就绪时,并且这个优先级是目前最高的。uC/OS-III会分配用户定义的时间片给每个任务去运行。每个任务可以定义不同的时间片。当任务用不完时间片时可以让出CPU给另一个任务。???任务数无限制?uC/OS-III对任务数量无限制。实际上,任务的数量限制于处理器能提供的内存大小。每一个任务需要有自己的堆栈空间,uC/OS-III在运行时监控任务堆栈的生长。uC/OS-III对任务的大小无限制。优先级数无限制uC/OS-III对优先级的数量无限制。就绪列表概述准备好运行的任务被放到就绪列表中,如图1。就绪列表是一个数组(OSRdyList[]),它一共有OS_CFG_PRIO_MAX条记录,记录的数据类型为OS_RDY_LIST( 见OS.H)。就绪列表中的每条记录都包含了三个变量.Entries、.TailPtr、.HeadPtr。 .Entries中该优先级的就绪任务数。当该优先级中没有任务就绪时, .Entries就会被设置为0。 .TailPtr和.HeadPtr用于该优先级就绪任务的建立双向列表。.HeadPtr指向列表的头部,.TailPtr指向列表的尾部。 表中的记录跟任务的优先级有关。例如,如果一个任务的优先级是5,那么当它就绪时会被放入OSRdyList[5] 中。图1调用OSInit()后的就绪列表有多少种优先级,就绪列表中就由多少条记录。每个记录中都有3个变量。Entries为该记录中的任务数。.PrevPtr和?.NextPtr用于指向具有相同优先级到TCB组成的双向列表。对于空闲任务,这两个值为NULL?。此时任务就绪表如图2所示。图2添加任务到就绪列表uC/OS-III提供很多服务可以把任务添加到就绪列表中。最明显的服务是OSTaskCreate(),它通常创建准备运行的任务并将任务放入就绪列表中。如图3所示,就绪列表中该优先级中已经有两个任务了。OSTaskCreate()?就会将这个任务插入到列表的未部。图3优先级调度图4-1到4-3显示了优先级的位映像组。它的宽度取决于CPU_DATA的数据类型(见CPU.H),它可以是8位?、16位、32位,根据处理器相应地设定。uC/OS-III支持多达OS_CFG_PRIO_MAX种不同的优先级(见OS_CFG.H)。在uC/OS-III中,数值越小优先级越高。因此优先级0是优先级最高的。优先级OS_CFG_PRIO_MAX-1的优先级最低。uC/OS-III将最低优先级唯一地分配给空闲任务,其它任务不允许被设置为这个优先级?。当任务准备好运行了,根据任务的优先级,位映像表中相应位就会被设置为1。如果处理器支持位清零指令CLZ,这个指令会加快位映像表的设置过程。为了确定就绪列表中优先级最高的任务,位映像表会被扫描,通过OS_PrioGetHighest()函数找到优先级最高的任务。图4-1 CPU_DATA被声明为CPU_INT08U图4-2 CPU_DATA被声明为CPU_INT16U图4-3 CPU_DATA被声明为CPU_INT32U调度调度器,决定了任务的运行顺序。uC/OS-III是一个可抢占的,基于优先级的内核。根据其重要性每个任务都被分配了一个优先级。uC/OS-III支持多个任务拥有相同的优先级。 “可抢占的 ”意味当事件发生时,如果事件让高优先级任务被就绪,uC/OS-III马上将CPU的控制权交给高优先级任务 。因此,当一个任务提交信号量、发送消息给一个高优先级的任务(若该任务被就绪了),当前的任务就会被停止,更高优先级的任务获得CPU的控制权。类似的,当ISR提交信号量或发送消息给一更高优先级的任务(若该任务被就绪了),那么中断返回的时候不会返回到原任务,而是高优先级任务。抢占式调度uC/OS-?III通过两种方法处理中断提交的事件?:直接提交或延迟提交。从调度的角度看,这两种方法产生的结果是一样的;最高优先级的就绪任务会占用CPU,如图5-1,5-2所

文档评论(0)

1243595614 + 关注
实名认证
文档贡献者

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档