第3讲 UCOS-II任务调度.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文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * UCOS-II任务调度 uC/OS-II系统移植与开发 课程目标: 本章旨在向学员介绍UCOS-II系统的任务调度机制及任务管理接口,通过本章的学习,学员应掌握以下内容: UCOS-II任务调度及管理 UCOS-II任务初始化及启动 UCOS-II任务接口的使用 uC/OS-II任务结构 前一个任务控制块的指针 后一个任务控制块的指针 指向任务的指针 指向任务堆栈的指针 任务的优先级别 … … void mytask(void *pdata) { … … for(;;) { … … } } 任务的代码 任务控制块 … … 任务堆栈 任务 任务的组成 从应用程序设计的角度来看,任务就是一个线程。就是一个用来解决用户问题的C语言函数和与之相关联的一些数据结构而构成的一个实体。 从任务存储结构来看,由三部分构成:任务程序代码、任务堆栈和任务控制块。任务控制块用来保存任务属性,任务堆栈用来保存任务工作环境,任务程序代码是任务的执行部分。 任务代码 任务 控制块 任务堆栈 任务1 任务代码 任务 控制块 任务堆栈 任务2 任务代码 任务 控制块 任务堆栈 任务n UCOS-II任务链表 uC/OS-II的任务有两种:用户任务和系统任务。由应用程序设计者编写的任务叫做用户任务,由系统提供的任务叫做系统任务。用户任务是为解决应用问题而编写的,系统任务是为应用程序来提供某种服务的。 为了管理上的方便,uC/OS-II把每一个任务都作为一个节点,然后把它连接成一个任务链表。 目前,uC/OS-II最多可以对64个任务(包括用户任务和系统任务)进行管理。 uC/OS-II任务链表 uC/OS-II任务状态 uC/OS-II任务状态 休眠态:任务只是以代码的形式驻留在程序空间,还没有交给操作系统管理时的情况叫休眠态。简单地说,任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫作任务的休眠态。 就绪态:如果系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,则任务就具备了运行的充分条件,这时的任务的状态叫就绪态。 运行态:处于就绪态的任务如果经调度器判断获得了CPU的使用权,则任务就进入运行态。任何时刻只能有一个任务处于运行态,就绪的任务只有当所有优先级高于本任务的任务都转为等待状态时,才能进入运行态。 等待态:正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给其他任务而使任务进入等态状态。 中断态:正在运行的任务是可以被中断的,除非该任务将中断关了,或者μC/OS-Ⅱ将中断关了。被中断了的任务就进入了中断服务态(ISR)。响应中断时,正在执行的任务被挂起,中断服务子程序控制了CPU的使用权。中断服务子程序可能会报告一个或多个事件的发生,而使一个或多个任务进入就绪态。在这种情况下,从中断服务子程序返回之前,μC/OS-Ⅱ要判定,被中断的任务是否还是优先级最高的。如果中断服务子程序使一个优先级更高的任务进入了就绪态或唤醒了一个优先级更高的挂起任务,则这个优先级更高的任务将得以运行,否则原来被中断了的任务才能继续运行。 uC/OS-II任务优先级 uC/OS-II分为64个优先级别,每一个级别都用一个数字表示。 数字0的级别最高,数字越大优先级别越低。 通常,一个应用程序的任务数小于64,用户可根据应用程序的需要,在OS_CFG.H中设置OS_LOWEST_PRIO,即定义了可供使用的优先级别共OS_LOWEST_PRIO+1个。 固定地,系统总是把最低优先级别自动赋给空闲任务,如果系统中还有统计任务,则其优先级别为OS_LOWEST_PRIO -1。 uC/OS-II任务代码 void MyTask(void *pdata) { for (;;) { 可以被中断的任务代码; OS_ENTER_CRITICAL(); //进入临阶段(关中断) 不可以被中断的任务代码; OS_EXIT_CRITICAL(); //退出临阶段 (开中断) 可以被中断的任务代码; } } 根据嵌入式系统任务的工作特点,任务的执行代码通常是一个无限循环结构,并且在这个循环中可以响应中断,这种结构也叫超循环结构。 为了有效的对中断进行控制,在任务的代码里可使用UC/OS-II定义的宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来控制何时响应中断,何时屏蔽中断。在运行这两个宏之间的代码时是不会响应中断的,这种受保护的代码段叫临界段。 uC/OS-II任务控制块 任务控制

文档评论(0)

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

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

1亿VIP精品文档

相关文档