- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3章。uCOS II的任务调度
* * * * * * * * * * * * * * UCOS-II任务调度 uC/OS-II系统移植与开发 课程目标: 本章旨在向学员介绍UCOS-II系统的任务调度机制及任务管理接口,通过本章的学习,学员应掌握以下内容: UCOS-II任务调度及管理 UCOS-II任务初始化及启动 UCOS-II任务接口的使用 凝辛煤雁豢榨彭澈渺弧瑚舍欣集锻颈奶镑琴舒扩汰抖离惺协讽假疆女粥祁3章。uCOS II的任务调度3章。uCOS II的任务调度 uC/OS-II任务结构 前一个任务控制块的指针 后一个任务控制块的指针 指向任务的指针 指向任务堆栈的指针 任务的优先级别 … … void mytask(void *pdata) { … … for(;;) { … … } } 任务的代码 任务控制块 … … 任务堆栈 任务 任务的组成 从应用程序设计的角度来看,任务就是一个线程。就是一个用来解决用户问题的C语言函数和与之相关联的一些数据结构而构成的一个实体。 从任务存储结构来看,由三部分构成:任务程序代码、任务堆栈和任务控制块。任务控制块用来保存任务属性,任务堆栈用来保存任务工作环境,任务程序代码是任务的执行部分。 珠脓习梭涤前沸闹砸姐实走登巧惭湘鹏镀塘宗硒宗腐鲤塞溉金剁项耘枪熊3章。uCOS II的任务调度3章。uCOS II的任务调度 任务代码 任务 控制块 任务堆栈 任务1 任务代码 任务 控制块 任务堆栈 任务2 任务代码 任务 控制块 任务堆栈 任务n UCOS-II任务链表 uC/OS-II的任务有两种:用户任务和系统任务。由应用程序设计者编写的任务叫做用户任务,由系统提供的任务叫做系统任务。用户任务是为解决应用问题而编写的,系统任务是为应用程序来提供某种服务的。 为了管理上的方便,uC/OS-II把每一个任务都作为一个节点,然后把它连接成一个任务链表。 目前,uC/OS-II最多可以对64个任务(包括用户任务和系统任务)进行管理。 uC/OS-II任务链表 务山浆易裴宙缚摸版蝎宦酷颓润蕾蚕疵用莫南齿愚由盘谨狂零狡蛮区宁而3章。uCOS II的任务调度3章。uCOS II的任务调度 uC/OS-II任务状态 人锐莲闽箍稗骆辖盈畔复睬毕宰闹转铭笔羞岸镣痊肃珍祷裁罗倘看样铬窟3章。uCOS II的任务调度3章。uCOS II的任务调度 uC/OS-II任务状态 休眠态:任务只是以代码的形式驻留在程序空间,还没有交给操作系统管理时的情况叫休眠态。简单地说,任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫作任务的休眠态。 就绪态:如果系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,则任务就具备了运行的充分条件,这时的任务的状态叫就绪态。 运行态:处于就绪态的任务如果经调度器判断获得了CPU的使用权,则任务就进入运行态。任何时刻只能有一个任务处于运行态,就绪的任务只有当所有优先级高于本任务的任务都转为等待状态时,才能进入运行态。 等待态:正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给其他任务而使任务进入等态状态。 中断态:正在运行的任务是可以被中断的,除非该任务将中断关了,或者μC/OS-Ⅱ将中断关了。被中断了的任务就进入了中断服务态(ISR)。响应中断时,正在执行的任务被挂起,中断服务子程序控制了CPU的使用权。中断服务子程序可能会报告一个或多个事件的发生,而使一个或多个任务进入就绪态。在这种情况下,从中断服务子程序返回之前,μC/OS-Ⅱ要判定,被中断的任务是否还是优先级最高的。如果中断服务子程序使一个优先级更高的任务进入了就绪态或唤醒了一个优先级更高的挂起任务,则这个优先级更高的任务将得以运行,否则原来被中断了的任务才能继续运行。 仅堆搪么稻茬蛆搪撇练内曙冠辟穴痹锄侮那半橡巩鳃阉猛劲炉垫豪憨剪兢3章。uCOS II的任务调度3章。uCOS II的任务调度 uC/OS-II任务优先级 uC/OS-II分为64个优先级别,每一个级别都用一个数字表示。 数字0的级别最高,数字越大优先级别越低。 通常,一个应用程序的任务数小于64,用户可根据应用程序的需要,在OS_CFG.H中设置OS_LOWEST_PRIO,即定义了可供使用的优先级别共OS_LOWEST_PRIO+1个。 固定地,系统总是把最低优先级别自动赋给空闲任务,如果系统中还有统计任务,则其优先级别为OS_LOWEST_PRIO -1。 恍塑儿询奋拎拘辜腺疵挞谗校谋调闽鲁药怀挥却扬掏跨除笺牺焦凌旬肋案3章。uCOS II的任务调度3章。uCOS II的任务调度 uC/OS-II任务代码 void MyTask(void *pdata)
文档评论(0)