uCOS-II的任务切换机理及中断调度优化.docxVIP

uCOS-II的任务切换机理及中断调度优化.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
  摘要μ-是一种适用于嵌入式系统的抢占式实时多任务操作系统,开放源代码,便于学习和使用。   介绍μ-在任务级和中断级的任务切换原理,以及这一操作系统基于嵌入式系统的对于中断的处理;相对于内存资源较少的单片机,着重讨论一种优化的实用堆栈格式和切换形式,以提高资源的利用率;结合430单片机,做具体的分析。   关键词实时多任务操作系统μ430中断堆栈   引言   在嵌入式操作系统领域,由开发的μ,由于开放源代码和强大而稳定的功能,曾经一度在嵌入式系统领域引起强烈反响。   而其本人也早已成为了嵌入式系统会议美国的顾问委员会的成员。   不管是对于初学者,还是有经验的工程师,μ开放源代码的方式使其不但知其然,还知其所以然。   通过对于系统内部结构的深入了解,能更加方便地进行开发和调试;并且在这种条件下,完全可以按照设计要求进行合理的裁减、扩充、配置和移植。   通常,购买往往需要一大笔资金,使得一般的学习者望而却步;而μ对于学校研究完全免费,只有在应用于盈利项目时才需要支付少量的版权费,特别适合一般使用者的学习、研究和开发。   自1992第1版问世以来,已有成千上万的开发者把它成功地应用于各种系统,安全性和稳定性已经得到认证,现已经通过美国认证。   1μ-的几大组成部分   μ-可以大致分成核心、任务处理、时间处理、任务同步与通信,的移植等5个部分。   核心部分是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。   能够维持系统基本工作的部分都在这里。   任务处理部分任务处理部分中的内容都是与任务的操作密切相关的。   包括任务的建立、删除、挂起、恢复等等。   因为μ-是以任务为基本单位调度的,所以这部分内容也相当重要。   时钟部分μ-中的最小时钟单位是时钟节拍。   任务延时等操作是在这里完成的。   任务同步和通信部分为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。   与的接口部分是指μ-针对所使用的的移植部分。   由于μ-是一个通用性的操作系统,所以对于关键问题上的实现,还是需要根据具体的具体内容和要求作相应的移植。   这部分内容由于牵涉到等系统指针,所以通常用汇编语言编写。   主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容。   2对于430的中断处理   21函数调用和中断调用的操作   430最常使用的编译器应该就是-。   对于这一编译器来说,通过分析和研究,发现它有以下规律。   1函数调用   如果是函数级调用,编译器会在函数调用时先把当前函数压栈,然后调用函数,值改变。   如果被调用的函数带有参数,那么,编译器按照以下的规则进行。   最左边的两个参数如果不是结构体或者联合体,将被赋值到寄存器,否则将被压栈。   函数剩下的参数都将被压栈。   根据最左边的那两个参数的类型,分别赋值给12对于32位类型赋值给1213和14对于32位类型赋值给1415。   2中断调用   如果是在中断中调用中断服务子程序的话,编译器将把当前执行语句的压栈,同时再把压栈。   接着,根据中断服务子程序的复杂程度,选择把12~15中的寄存器压栈。   然后,执行中断服务子程序。   中断处理结束后再把寄存器出栈,出栈,出栈。   把系统恢复到中断前的状态,使程序接着被中断的部分继续运行。   图3中断发生时的任务栈压栈操作   22任务级和中断级的任务切换步骤和原理   1任务级的任务切换原理   μ-是一个多任务的操作系统,在没有用户自己定义的中断情况下,任务间的切换步骤是这样的任务间的切换一般会调用函数。   函数的结构如下   {   关中断   如果不是中断嵌套并且系统可以被调度{   确定优先级最高的任务   如果最高级的任务不是当前的任务{   调用;   }   }   开中断   }   我们把这个函数称作任务调度的前导函数。   它先判断要进行任务切换的条件,如果条件允许进行任务调度,则调用。   这个函数是真正实现任务调度的函数。   由于期间要对堆栈进行操作,所以一般用汇编语言写成。   它将正在运行的任务的的寄存器推入堆   栈,然后把4~15压栈。   接着把当前的保存在-中,然后把最高优先级的-的值赋值给。   这时候,就已经指到最高优先级任务的任务堆栈了。   然后进行出栈工作,把15~4出栈。   接着使用返回,这样就把和出栈了。   简单地说,μ-切换到最高优先级的任务,只是恢复最高优先级任务所有的寄存器并运行中断返回指令,实际上,所作的只是人为地模仿了一次中断。   2中断级的任务切换原理   

文档评论(0)

189****2507 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档