第3章任务管理详解.ppt

  1. 1、本文档共115页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
μC/OS-Ⅱ的任务管理的原理与实现方法 μC/OS-Ⅱ的9个核心任务管理函数 μC/OS-Ⅱ的9个用户任务管理函数。 3.1 核心任务管理 3.1.1 临界区的处理(Critical Sections) 什么是“宏定义” 简单地说,宏定义就是定义一种符号来代替另外一种符号。 特点: 宏定义只是在编译前做一个简单的替换,它不进行错误检查。要等到编译开始后,才能对替换的字符串进行错误检查。 宏定义又分为两类: 不带参数的宏定义,格式:#define 标识符 字符串 带参数的宏定义 , 格式: #define 标识符(参数) 字符串 宏定义的取消: 格式:#undef 标识符 例: #define PI 3.14 不带参数 #define S(R) PI*R*R 带参数 #define S1(R) PI*(R)*(R) 带参数 #undef PI 取消宏定义 # undef S(R) OS_CRITICAL_METHOD = 1 直接开关,优点:最简单;缺点:可能会破坏中断原来的状态 例如: #define OS_ENTER_CRITICAL() EA = 0 // 关中断 #define OS_EXIT_CRITICAL() EA = 1 // 开中断 关(原状态)→处理临界段代码→关(现在)→处理完毕→开 结果:中断被打开→原始状态被破坏 OS_CRITICAL_METHOD = 2 用堆栈保存中断开关状态 优点:保护了原始中断状态,缺点:必须使用汇编代码,如果某些编译器对嵌入汇编代码优化得不好将导致严重错误。 例如: #define OS_ENTER_CRITICAL() asm(“ PUSH PSW”) asm(“DI”) #define OS_EXIT_CRITICAL() asm(“POP PSW”) OS_CRITICAL_METHOD = 3 用局部变量保存中断开关状态 例如: OS_CPU_SR cpu_sr; #define ENTER_CRITICAL() cpu_sr = get_processor_psw(); Disable_interrupt(); #define OS_EXIT_CRITICAL set_processor_psw(cpu_sr); 3.1.2 任务的形式 void MyTask(void *ppdata) reentrant { *ppdata = *ppdata;// 使用一次形式参量,避免出现编译错误 用户代码; OSTaskDel(OS_PRIO_SELF); } μC/OS-Ⅱ可以管理多达64个任务,但目前版本的μC/OS-Ⅱ有两个任务已经被系统占用了。 必须给每个任务赋以不同的优先级,优先级可以从0到OS_LOWEST_PR10-2。建议保留8个优先级以备将来使用: 0、1、2、3、 OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2,OS_LOWEST_PRI0-1以及OS_LOWEST_PRI0。 优先级号越低,任务的优先级越高。 μC/OS-Ⅱ总是运行进入就绪态的优先级最高的任务。 目前版本的μC/OS-Ⅱ中,任务的优先级号就是任务编号(ID)。 优先级号(或任务的ID号)也被一些内核服务函数调用,如改变优先级函数OSTaskChangePrio(),以及任务删除函数OSTaskDel()。 为了使μC/OS-Ⅱ能管理用户任务,用户必须在建立一个任务的时候,将任务的起始地址与其它参数一起传给:OSTastCreat或OSTaskCreatExt()。 3.1.3 任务的状态 3.1.4 任务控制块(Task Control Blocks, OS_TCB) 任务控制块是一个数据结构,其功能如下: 一旦任务建立了,任务控制块OS_TCB将被赋值 ; 当任务的CPU使用权被剥夺时,μC/OS-Ⅱ用它来保存该任务的状态 ; 当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行。 OS_TCB全部驻留在RAM中。 OS_TCB数据结构中的一些成员变量使用了条件编译语句定义,为的是便于用户裁剪不需要的功能,以减少对资源的需求。 文件OS_CFG.H定义了应用程序中最多任务数量(OS_MAX_TASKS),每个任务都有一个单独的任务控制块,所以最多任务数也是μC/OS-Ⅱ分配给用户程序任务控制块的最大数量。 最多任务数OS_MAX_TASKS不能

文档评论(0)

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

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

1亿VIP精品文档

相关文档