第2章 μCOS与μCOSII的任务part1.pptVIP

  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文档。上传文档
查看更多
* 1、系统在调用函数OSInit()对uC/OS-II系统进行初始化时,先在RAM中建立一个OS_TCB结构类型的数组OSTCBTbl[ ],每个数组元素就是一个任务控制块,然后把这些控制块链接成一个如图所示的链表。由于链表中的这些控制块还没有与具体任务相关联,因此这个链表叫做空任务块链表。 2、从图中可以看到,uC/OS-II初始化时建立的空任务链表元素一共是OS_MAX_TASKS+OS_N_SYS_TASKS个。其中定义在文件OS_CFG.H中的常数OS_MAX_TASKS 指明了用户任务的最大数目;而定义在文件UCOS_II.H中的常数OS_N_SYSTASKS指明了系统任务的数目(在图中,其值为2:一个空闲任务,一个统计任务)。 3、每当应用程序调用系统函数OSTaskCreate()或OSTaskCreateExt()创建一个任务时,系统就会将任务控制块链表头指针OSTCBFreeList指向的任务控制块分配给该任务。在给任务控制块中的各成员赋值后,就按任务控制块链表的头指针OSTCBList 将其加入到任务控制块链表中。 1、图2-9是在图2-8所示任务控制块链表基础上,应用程序创建了两个用户任务并使用了两个系统任务(空闲任务和统计任务)的情况时,空任务块链表和任务块链表的结构示意图(图中阴影区域为任务块链表) 2、为了加快对任务控制块的访问速度,除了任务控制块链表被创建为双向链表之外,uC/OS-II在uCOS_II.H文件中还定义了一个数据类型为OS_TCB*的数组OSTCBPrioTbl[],专门用来以任务的优先级别为顺序在各个数组元素里存放指向各个任务控制块的指针。这样系统在访问一个任务的任务控制块时,就可以不必遍历任务控制块链表了。数组OSTCBPrioTbl[]与任务控制块之间的关系如图2-9所示。 3、另外,为了uC/OS-II能随时访问正在运行任务的任务控制块, uC/OS-II还定义了一个OS_TCB*类型的变量OSTCBCur,专门存放正在运行的任务的任务控制块指针。图2-9是在假设任务优先级别为3的任务正在运行时,指针变量OSTCBCur的指向。 4、uC/OS-II允许用函数OSTaskDel()删除一个任务。删除一个任务,实质上就是把该任务的任务从任务控制块链表中删掉,并把它归还给空任务控制块链表。这样, uC/OS-II对这个没有任务控制块的任务就不再理会了,因为与这个任务对应的任务控制块已经被“吊销”了。由此可见,任务的任务控制块就如同人的身份证一样重要。 * * 2.2.8.2 任务控制块链表 图2-8 空任务块链表 OSTCBNext OSTCBPrev OSTCBPrio OSTCBNext OSTCBPrev OSTCBPrio OSTCBNext OSTCBPrev OSTCBPrio OSTCBNext OSTCBPrev OSTCBPrio OSTCBNext OSTCBPrev OSTCBPrio OSTCBNext OSTCBPrev OSTCBPrio OSTCBTbl[0] OSTCBTbl[1] OSTCBTbl[2] OSTCBTbl[3] OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASK_-2] OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASK_-1] OSTCBFreeList 系统在调用函数OSInit()对uC/OS-II系统进行初始化时,先在RAM中建立一个OS_TCB结构类型的数组OSTCBTbl[ ],每个数组元素就是一个任务控制块,然后把这些控制块链接成一个如图所示的链表。由于链表中的这些控制块还没有与具体任务相关联,因此这个链表叫做空任务块链表。 每当应用程序调用系统函数OSTaskCreate()创建一个任务时,系统就会将任务控制块链表头指针OSTCBFreeList指向的任务控制块分配给该任务。在给任务控制块中的各成员赋值后,就按任务控制块链表的头指针OSTCBList将其加入到任务控制块链表中。 2.2.8.2 任务控制块链表(续) OSTCBPrio=3 OSTCBPrev OSTCBNext OSTCBPrio=1 OSTCBPrev OSTCBNext OSTCBPrio OSTCBPrev OSTCBNext OSTCBPrio OSTCBPrev OSTCBNext OSTCBPrio OSTCBPrev OSTCBNext OSTCBPrio OSTCBPrev OSTCBNext OSTCBTbl[3] OSTCBTbl[2] OSTCBTbl[4] OSTCBTbl[0] OSTCBTbl[1] OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASK_-1]

文档评论(0)

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

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

1亿VIP精品文档

相关文档