μCOS-II下任务调度的实验方法.docVIP

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
μCOS-II下任务调度的实验方法

μC/OS-II下任务调度的实验方法 作者姓名:指导教师:。本文对的任务调度μC/OS-II下的任务调度,内核基于优先级的抢占式调度算法关键词:; 1引言 μC/OS-II是一个完整的,可移植,可固化,可剪裁的嵌入式实时操作系统。它采用占先式调度方式,即最高优先级的任务一旦就绪,总能立刻得到CPU的使用权,从而保证系统的实时性。 在任务调度过程中,μC/OS-II内核能快速、准确的从众多的就绪态任务中找出优先级最高的任务,减少系统的响应时间,保证系统的实时性。本文μC/OS-II的最高优先级查找算法和任务调度原理并结合实例加以说明。在分析最高优先级查找算法时首先分析将任务置于就绪态的过程,这样更抑郁理解内核的查找。接着讨论为实时操作系统μC/OS-II下的结果μC/OS-II的最高优先级查找算法和任务调度原理并结合实例加以说明。在分析最高优先级查找算法时首先分析将任务置于就绪态的过程,这样更抑郁理解内核的查找。接着讨论为实时操作系统μC/OS-II下的结果。 4.1.1任务及其任务状态 任务,也称线程,是一个简单的应用程序,每个任务都是被赋予一定的优先级,并有自己的一套CPU寄存器和栈空间。实时应用程序的设计过程是如何把问题分割成多个任务。每个任务都是一个无限的循环,都处在一下五种状态之一,即休眠态,就绪态,运行态,挂起态和被中断态。 休眠态:相当于任务驻留在内存中,但并不能被多任务内核所调度; 就绪态:意味着任务已经准备好,可以运行,但是由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行; 运行态:指任务掌握了CPU的使用权,正在运行中; 挂起太:指任务在等待,等待某一事件的发生; 被中断态:指发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂时不能运行,就进入了中断态。 4.1.2任务控制块(OS_TCB)Typedef struts os_tcb{ OS_STK OSTCBStkPtr; ... INT8U OSTCBPrio; INT8U OSTCBX; INT8U OSTCBY; INT8U OSTCBBitX; INT8U OSTCBBitY; ... }OS_TCB; OSTCBStkPtr是当前任务的栈顶指针,每个任务都有自己的堆栈和指向栈顶指针。在上下文切换时,对于优先级的任务,要将任务当前状态保存于任务堆栈中(以便以后再次调度到此任务继续执行),然后OSTCBStkPtr指向栈顶;对于优先级高的任务,通过OSTCBStrPtr找到任务的上次被切换是的状态,把保存的状态恢复到CPU,这样任务就毫无差错的继续执行。 OSTCBPrio是任务的优先级号。OSTCBX,OSTCBBitX,OSTCBY,OSTCBBitY用于加速任务进入就绪态的过程或等待事件发生状态的过程,这些值在任务建立时调用OS_TCBInit进行赋值。 4.2 μC/OS-II最高优先级查找算法 在μC/OS-II中,每个就绪的任务都是放在就绪表(ready list)中,内核通过就绪表找到就绪太最高优先级的任务让其占用CPU,进入运行态。 μC/OS-II中最多运行任务是64哥,内核把任务优先级分组,八个为一组,如图1所示。任务优先级号中Y 是所属组部分,X 是所在组部分,在就绪表中有2 个变量OSRdyGrp和OSRdyTbl[ ],OSRdyGrp 表示所属组,每一位代表一个组内是否有进入就绪态的任务,OSRdyTbl[ ]表示所在组,一组八个任务,即一位代表一个任务是否进入就绪态。当任务进入就绪态时,就绪表OSRdyGrp 和OSRdyTbl[ ]相应位置1。OSRdyGrp 和OSRdyTbl[ ]之间的关系见图1,OSRdyGrp 的第n 位对应OSRdyTbl[ n ],即OSRdyTbl[ n ]中任何一位是1时,OSRdyGrp 的第n 位要置1。 任务创建成功后被置于就绪态,这里就以任务被创建时为例来说明内核是如何把任务置于就绪态。首先,建立任务,调用函数OSTaskCreat( )或OStaskCreatExt( ),OSTaskCreat( )和OStaskCreatExt( )都将调用OS_TCBInit( )来初始化任务控制块,函数OS_TCBInit( )完成将任务优先级放就绪表中,使任务置于就绪态,函数OS_TCBInit( )中有关将任务优先级放就绪表的部分如下所示 // File : OS_CORE.C INT8U OS_TCBInit(INT8U prio,...){ … OS_TCB* ptcb; … /* 初始化OS_TCB 中OSTCBX,OSTCBBitX, OSTCBY,OSTCBBitY */ ptcb-OSTCBY=

文档评论(0)

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

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

1亿VIP精品文档

相关文档