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