嵌入式-3(new)详解.ppt

  1. 1、本文档共137页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 ?C/OS-II中的任务 第3章 ?C/OS-II中的任务 本部分的主要内容包括: 任务的基本概念 任务代码、任务控制块和任务堆栈 任务的优先权 任务就绪表结构及其操作 任务切换及任务调度 任务的创建、删除、挂起、恢复和查询 ?C/OS-II的初始化和启动 3.1 任务的基本概念 3.1.1 任务及其内存结构 在设计一个较为复杂的应用程序时,通常把一个大型任务分解成多个小任务,然后在计算机中通过运行这些小任务,最终达到完成大任务的目的。实时应用程序的设计过程包括如何把问题分割成多个任务。每个任务都是整个应用程序的一部分,都被赋予一定的优先级,有自己的一套CPU寄存器和栈空间。由于这种方法可以使系统并发地运行多个任务,从而提高处理器的利用率,加快程序的执行速度,因此现代操作系统几乎都是多任务操作系统。 一个任务,也称作一个线程,是一个简单的程序,与大任务分割成的小任务对应的程序实体就叫做“任务”,而?C/OS-II就是一个能对这些小任务的运行进行管理和调度的多任务操作系统。 从代码上看,?C/OS-II的任务就是一个函数。而从任务的存储结构上看,?C/OS-II的任务由三个部分组成:任务程序代码(函数)、任务堆栈和任务控制块。其中任务控制块就是关联了任务代码的程序控制块(TCB),它记录了任务的各个属性;任务堆栈则用来保存任务的工作环境;任务程序代码就是任务的执行部分。 ?C/OS-II任务控制块实质上就是2.4.2节中所介绍的具有二级结构的代码控制块,只不过用来指向代码的指针是CPU程序指针(程序计数器)PC的副本。系统可以根据任务控制块来了解代码的相关信息,当然也就是能够找到代码。 注:任务控制块通过任务堆栈和任务代码间接的关联起来 ?C/OS-II用任务控制块链表对任务进行管理,如下图所示: ?C/OS-II的任务有两种:用户任务和系统任务。由应用程序设计者编写的任务,叫做用户任务;由系统提供的任务叫做系统任务。用户任务是为了解决应用问题而编写的;系统任务是为应用程序提供某种服务或为系统本身服务的。目前,在?C/OS-II中,最多可以含有64个任务(包括用户任务和系统任务)。 ● ?C/OS –II 支持64个任务,每个任务有一个特定的优先级。 ● 任务的优先级别用数字表示,0表示的任务的优先级最高,数字越大表示的优先级越低。 ● 通过常数OS_LOWEST_PRIO (在OS_CFG.H中)定义系统的最低优先级别,同时限定系统能容纳的最多任务数量。 ● 建议用户不要使用优先级为0、1、2、3、OS_LOWEST_PRIO-3、 OS_LOWEST_PRIO-2、 OS_LOWEST_PRIO-1、 OS_LOWEST_PRIO-0的任务。最低的两个已被目前版本的系统占用,将来版本可能会用到其它的。 3.1.2 任务的状态 ?C/OS-II是按照系统中只有一个CPU来设计的,在这种系统中,一个具体时刻只会有一个任务占用,及处在运行状态,而其他任务只能处在其他状态。?C/OS-II系统中的任务共有5种状态: 睡眠态(DORMANT):任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫作任务的睡眠态。 就绪态(READY):如果系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,则任务就具备了运行的充分条件,这时的任务的状态叫就绪态。 ? 运行态(RUNNING):处于就绪态的任务如果经调度器判断获得了CPU的使用权,则任务就进入运行态。任何时刻只能有一个任务处于运行态。 等待态(WAITING):正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给其他任务而使任务进入waiting状态。 注:进入waiting的状态有可能是因为延时,有可能是被挂起,有可能是等待的资源未获得,总之,uC/OS将所有的已经注册了的但未就绪的任务归为waiting态。 被中断态(ISR):正在运行的任务是可以被中断的,除非该任务将中断关了,或者uC/OS-Ⅱ将中断关了。被中断了的任务就进入了中断服务态(ISR)。 当所有的任务都在等待事件发生或等待延迟时间结束,uC/OS-Ⅱ执行空闲任务(idle task),执行OSTaskIdle() 函数。 在系统的管理下,一个任务可以在5个不同的状态之间发生转换。其转换关系如图所示 线上的函数作用:状态迁移依靠这些函数完成 3.1.3 用户任务代码的一般结构 1. 用户任务代码的一般结构 根据嵌入式系统任务的工作特点,任务的执行代码通常是一个无限循环结构(对于一些一次性任务例外),并且在这个循环中可以响应中断,这种结构也叫做超循环结构。例3-1就是一个具有超循环结构的任务的示意性代码。

文档评论(0)

三沙市的姑娘 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档