网站大量收购闲置独家精品文档,联系QQ:2885784924

《嵌入式操作系统》第3章任务管理.ppt

  1. 1、本文档共133页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本章将讨论 μC/OS-Ⅱ的任务调度与管理的原理 主要学习7个任务的核心管理函数 9个任务的用户管理函数。 3.1 核心函数 OS_CFG.H文件中的核心功能函数的配置常数 3.1.1 临界段的处理(Critical Sections) 和其它内核一样,μC/OS-Ⅱ为了处理临界段代码需要关中断,处理完毕后再开中断。 μC/OS-Ⅱ定义了两个宏(macros)来关中断和开中断,以便避开不同C编译器厂商选择不同的方法来处理关中断和开中断。 μC/OS-Ⅱ中的这两个宏调用分别是: OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL() 这两个宏的定义取决于所用的微处理器,故在文件OS_CPU.H中可以找到相应宏定义。每种微处理器都有自己的OS_CPU.H文件。 什么是“宏定义” 简单地说,宏定义就是定义一种符号来代替另外一种符号。 特点: 宏定义只是在编译前做一个简单的替换,它不进行错误检查。要等到编译开始后,才能对替换的字符串进行错误检查。 宏定义又分为两类: 不带参数的宏定义,格式:#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 直接开关,最简单,但可能会破坏中断原来的状态 例: 关(原状态)→处理临界段代码→关(现在)→处理完毕→开 结果:中断被打开→原始状态被破坏 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; cpu_sr = get_processor_psw(); Disable_interrupt();处理临界段代码;set_processor_psw(cpu_sr); 3.1.2 任务的形式 μC/OS-Ⅱ的任务就是一个C函数,它具有如下特征: 具有一个返回类型和一个参数; 任务的返回类型必须定义成void型; 任务的结构必须是两种之一: 第一种是无限循环结构,其示意性代码如程序清单3.1所示; 第二种是只执行一次就被删除的程序,其示意性代码如程序清单3.2所示。 任务删除后,其代码依然驻留在RAM中,只是μC/OS-Ⅱ将任务转入休眠状态,不再管理该段代码,而不是将代码真正的删除了,除非重新启动,否则代码永远都不会再运行; 任务永不返回。 3.1.2 任务的形式 程序清单3.2 任务结构二:任务执行一次就自我删除示意性代码 void MyTask(void *pdata){ *pdata = *pdata;// 使用一次形式参量,以避免出现编译错误。 用户代码; OSTaskDel(OS_PRIO_SELF); } μC/OS-Ⅱ可以管理多达64个任务,但目前版本的μC/OS-Ⅱ有两个任务已经被系统占用了。 建议保留优先级: 0、1、2、3、 OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2,OS_LOWEST_PRI0-1以及OS_LOWEST_PRI0 这8个任务以被将来使用。 用户可以有多达56个应用任务。必须给每个任务赋以不同的优先级,优先级可以从0到OS_LOWEST_PR10-2。 优先级号越低,任务的优先级越高。 μC/OS-Ⅱ总是运行进入就绪态的优先级最高的任务。 目前版本的μC/OS-Ⅱ中,任务的优先级号就是任务编号(ID)。 优先级号(或任务的ID号)也被一些内核服务函数调用,如改变优先级函数OSTaskChangePrio(),以及任务删除函数OSTaskDel()。 为了使μC/OS-Ⅱ能管理用户任务,用户必须在建立一个任务的时候,将任务的起始地址与其它参数一起传给:OSTastCreat或OSTaskCreatExt()。 3.1.3

文档评论(0)

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

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

1亿VIP精品文档

相关文档