- 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:函数调用
您可能关注的文档
- 党课端正入党动机终稿.ppt
- 党内统计报表常见问题及解决办法(2014-12-23)终稿.ppt
- 党政机关公文格式处理201603终稿.ppt
- 日本地理2015答案.ppt
- 摄影的技术美与艺术美(孙佳慧)答案.ppt
- 确立自信学习反驳答案.ppt
- 第3章电路的基本定理、定律与方法终稿.ppt
- 确立社会主义基本制度有着怎样的意义答案.pptx
- 确保电厂新建关键机组稳定经济运行的目标管理答案.doc
- 确保TRT有效发电攻关答案.doc
- 浙江衢州市卫生健康委员会衢州市直公立医院高层次紧缺人才招聘11人笔试模拟试题参考答案详解.docx
- 浙江温州泰顺县退役军人事务局招聘编外工作人员笔试备考题库及参考答案详解一套.docx
- 江苏靖江市数据局公开招聘编外工作人员笔试模拟试题及参考答案详解.docx
- 广东茂名市公安局电白分局招聘警务辅助人员40人笔试模拟试题带答案详解.docx
- 江苏盐城市大丰区住房和城乡建设局招聘劳务派遣工作人员4人笔试模拟试题带答案详解.docx
- 浙江舟山岱山县东沙镇人民政府招聘笔试模拟试题及参考答案详解1套.docx
- 最高人民检察院直属事业单位2025年度公开招聘工作人员笔试模拟试题含答案详解.docx
- 浙江金华市委宣传部、中共金华市委网信办所属事业单位选调工作人员笔试备考题库及答案详解1套.docx
- 广东深圳市党建组织员招聘40人笔试模拟试题及答案详解1套.docx
- 江苏南京水利科学研究院招聘非在编工作人员4人笔试模拟试题及参考答案详解.docx
文档评论(0)