任务及其任务管理摘要.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
任务及其任务管理摘要

μC/OS-II任务及其任务管理 本章主要讲述 μC/OS-II的任务 μC/OS-II任务的构成 任务的创建 任务的调度 任务的延时和取消延时 任务的挂起和恢复 任务的删除 一、μC/OS-II的任务 任务是在μC/OS-II嵌入式操作系统下进行软件设计的一个重要概念。 一个任务也称作一个进程,是一个“可执行的程序单元”。每个任务都有一个任务控制块,记录任务的信息(如优先级、状态等),有它自己的存储CPU寄存器值的堆栈。 基于μC/OS-II应用程序一般是由一个个任务构成。 二、μC/OS-II的任务的构成 任务主要由三个部分组成: 任务代码(任务函数) 任务堆栈 任务控制块 μC/OS-II任务构成 任务代码 μC/OS-II下的任务代码一般定义为一个任务函数,函数的主体通常是一个无限的循环 void MyTask(void *pdata) { while (1) { 用户代码; } } 示例: void MyTask(void *pdata) { pdata = pdata; while(1) { printf(M); Beep(1950, 20); OSTimeDly(OS_TICKS_PER_SEC); } } 任务堆栈 每一个任务都有其相应的任务堆栈。 任务堆栈主要用于在任务切换是保存现场(将寄存器的值保存到堆栈)和恢复现场(将堆栈中数据加载到寄存器中)。 一般定义了一个任务,同时需要定义该任务的任务堆栈: OS_STK MyTaskStk[TaskStkSize]; 堆栈的增长方向 由OS_STK_GROWTH确定(在OS_CPU.h定义) OS_STK_GROWTH==0 意味堆栈从下往上长,则开始时栈顶位置为下标为0的元素 OS_STK_GROWTH==1 意味堆栈从上往下长,则开始时栈顶位置为下标为TaskStkSize-1的元素 任务控制块 任务控制快(Task Control Block,TCB)就相当于是一个任务的身份证,没有任务控制块的任务是不能被系统承认和管理的。 任务控制块用来记录任务的堆栈指针、任务状态、优先级等一些与任务管理有关的属性。 任务控制块结构的主要成员 typedef struct os_tcb { //在ucos_ii.h中定义 OS_STK *OSTCBStkPtr; //指向任务堆栈栈顶的指针 ? …… ? struct os_tcb *OSTCBNext;//指向后一个任务控制块的指针 struct os_tcb *OSTCBPrev; //指向前一个任务控制块的指针? …… INT16U OSTCBDly; //任务等待的时限(节拍数) INT8U OSTCBStat; //任务的当前状态标志 INT8U OSTCBPrio; //任务的优先级别? …… } OS_TCB; 任务的优先级 μC/OS_II 把任务的优先权分为64个优先级别,每一个级别都用一个数字来表示。数字0表示任务的优先级别最高,数字越大则表示任务的优先级别越低 可以在OS_CFG.H中修改OS_LOWEST_PRIO(表示最低优先级别的常数),来确定可供使用的优先级别为:0,1,2,…,OS_LOWEST_PRIO,共OS_LOWEST_PRIO+1个。 OS_LOWEST_PRIO:赋给空闲任务 OS_LOWEST_PRIO-1:赋给统计任务( 。如果应用程序中还使用了统计任务,系统则会把优先级别) 0,1,2,…OS_LOWEST_PRIO-2: 用户任务可以使用的优先级别,共OS_LOWEST_PRIO-1个 任务状态:休眠、就绪、执行、等待、中断 三、任务的创建 任务创建的工作就是:初始化任务堆栈,给任务分配一个任务控制块,初始化其相关属性,并通过TCB把任务代码、任务堆栈关联起来形成一个完整的任务。 用户定义了任务函数,但μC/OS_II不会理会这些代码,这些代码也不会运行(休眠状态)。任务创建后,它就可以接受μC/OS_II的管理和调度。 创建任务OSTaskCreate( )函数如下:? INT8U OSTaskCreate ( void (*task)(void *pd),//指向任务的指针 void *pdata, //传递给任务的参数 OS_STK *ptos, //指向任务堆栈栈顶的指针 INT8U prio //任务的优先级 ) 返回值:OSTaskCreate()的返回值为下述之一: OS_NO_ERR:函数调用

文档评论(0)

1520520 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档