- 1、本文档共60页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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:函数调用
您可能关注的文档
最近下载
- 2024年上海市普通高校招生本科艺术甲批次平行段院校专业组投档分数线美术与设计类.pdf VIP
- 2024入团共青团基础知识题库(含答案).docx
- 2024年在线网课学习课堂《健康管理科研思维训练(杭州师大 )》单元测试考核答案.pdf
- 2024年中国河南国际合作集团有限公司人员招聘考试题库及答案解析.docx
- 《骆驼祥子》读书分享PPT课件(精选图文).pptx
- 汉长安城遗址总体规划.pptx
- 欠钱不还的法院起诉书.docx VIP
- GB-T 10125-2012 人造气氛腐蚀试验 盐雾试验.pdf
- 新人教版七年级上册生物全册教案(2024年秋季新版教材).docx
- pcs-9651_080885技术和使用说明书.pdf
文档评论(0)