uc os嵌入式实时操作系统

上传人:公**** 文档编号:507807054 上传时间:2023-11-23 格式:DOCX 页数:8 大小:23.79KB
返回 下载 相关 举报
uc os嵌入式实时操作系统_第1页
第1页 / 共8页
uc os嵌入式实时操作系统_第2页
第2页 / 共8页
uc os嵌入式实时操作系统_第3页
第3页 / 共8页
uc os嵌入式实时操作系统_第4页
第4页 / 共8页
uc os嵌入式实时操作系统_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《uc os嵌入式实时操作系统》由会员分享,可在线阅读,更多相关《uc os嵌入式实时操作系统(8页珍藏版)》请在金锄头文库上搜索。

1、u C / O S 是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。pC/OS-ll的前身是pC/OS,最早出自于1992年美国嵌入式系统专家Jean J丄abrosse 在嵌入式系统编程杂志的5月和6月刊上刊登的文章连载,并把pC/OS的源码发布 在该杂志的 B B S 上。pC/OS和pC/OS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言 编写的。CPU硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到 最低限度,为的是便于移植到任何一种其它的CPU上。用户只要有标准的ANSI的C交 叉编译器,有汇编器、连接器等软件工具,就可以将pC/

2、OS-II嵌人到开发的产品中pC/OS-ll 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点, 最小内核可编译至 2KB。pC/OS-II已经移植到了几乎所有知名的CPU上。严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理, 时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统, 网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全 可以由用户自己根据需要分别实现。uC/OS-II 目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提 供最基本的系统服务,如信号量,邮箱,消息

3、队列,内存管理,中断管理等。编辑本段任务管理uC/OS-II中最多可以支持64个任务,分别对应优先级063,其中0为最高优先级。 63 为最低级,系统保留了 4个最高优先级的任务和4个最低优先级的任务,所有用户可以 使用的任务数有56个。uC/OS-II 提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优 先级,任务挂起和恢复等。系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,改任务仅给一 个整形变量做累加运算;另一个是系统任务,它的优先级为次低,改任务负责统计当前cpu 的利用率。编辑本段时间管理uC/OS-II 的时间管理是通过定时中断来实现的,该定时中断一

4、般为 10毫秒或100毫秒 发生一次,时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔是固 定不变的,该中断也成为一个时钟节拍。uC/OS-II 要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统 函数,例如中断级的任务切换函数,系统时间函数。编辑本段内存管理在 ANSI C 中是使用 malloc 和 free 两个函数来动态分配和释放内存。但在嵌入式实时 系统中,多次这样的错作会导致内存碎片,且由于内存管理算法的原因,malloc和free的 执行时间也是不确定。uC/OS-ll中把连续的大快内存按分区管理。每个分区中包含整数个大小相同的内存块, 但不同分

5、区之间的内存快大小可以不同。用户需要动态分配内存时,系统选择一个适当的分 区,按块来分配内存。释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题, 同时执行时间也是固定的。任务间通信与同步对一个多任务的操作系统来说,任务间的通信和同步是必不可少的。uC/OS-ll中提供了 4 中同步对象,分别是信号量,邮箱,消息队列和事件。所有这些同步对象都有创建, 等待,发送,查询的接口用于实现进程间的通信和同步。编辑本段任务调度uC/OS-ll 采用的是可剥夺型实时多任务内核。可剥夺型的实时内核在任何时候都运行 就绪了的最高优先级的任务。uC/os-ll 的任务调度是完全基于任务优先级的抢占式调

6、度,也就是最高优先级的任务一 旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。为了简化系统设计, uC/OS-ll 规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身。任务调度将在以下情况下发生:1) 高优先级的任务因为需要某种临界资源,主动请求挂起,让出处理器,此时将调 度就绪状态的低优先级任务获得执行,这种调度也称为任务级的上下文切换。2) 高优先级的任务因为时钟节拍到来,在时钟中断的处理程序中,内核发现高优先 级任务获得了执行条件(如休眠的时钟到时),则在中断态直接切换到高优先级任务执行。这 种调度也称为中断级的上下文切换。这两种调度方式在uC/OS-ll

7、的执行过程中非常普遍,一般来说前者发生在系统服务中, 后者发生在时钟中断的服务程序中。调度工作的内容可以分为两部分:最高优先级任务的寻找和任务切换。其最高优先级任 务的寻找是通过建立就绪任务表来实现的。C/OS中的每一个任务都有独立的堆栈空间, 并有一个称为任务控制块TCB(Task Co ntrol Block)的数据结构,其中第一个成员变量就是 保存的任务堆栈指针。任务调度模块首先用变量 OSTCBHighRdy 记录当前最高级就绪任务 的TCB地址,然后调用OS_TASK_SW()函数来进行任务切换。pC/OS-ll的组成部分pC/OS-ll可以大致分成核心、任务处理、时间处理、任务同步

8、与通信,CPU的移植等 5 个部分。1) 核心部分(OSCore.c) 是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部分都在这里。2) 任务处理部分(OSTask.c) 任务处理部分中的内容都是与任务的操作密切相关的。包括任务的建立、删除、挂起、恢复等等。因为pC/OS-II是以任务为基本单位调度的,所以这部分内容也相当重要。3) 时钟部分(OSTime.c)pC/OS-II中的最小时钟单位是timetick(时钟节拍)。任务延时等操作是在这里完成的。4) 任务同步和通信部分 为事件处理部分,包括信号量、邮

9、箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。5) 与 CPU 的接口部分是指pC/OS-II针对所使用的CPU的移植部分。由于pC/OS-II是一个通用性的操作系 统,所以对于关键问题上的实现,还是需要根据具体CPU的具体内容和要求作相应的移植。 这部分内容由于牵涉到SP等系统指针,所以通常用汇编语言编写。主要包括中断级任务切 换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分 等内容。编辑本段更多信息uC/OS-II的任务切换机理及中断调度优化摘要:pC/OS-II是一种适用于嵌入式系统的抢占式实时多任务操作系统,开放源代码, 便于

10、学习和使用。介绍pC/OS-II在任务级和中断级的任务切换原理,以及这一操作系统基 于嵌入式系统的对于中断的处理;相对于内存资源较少的单片机,着重讨论一种优化的实用 堆栈格式和切换形式,以提高资源的利用率;结合MSP430单片机,做具体的分析。关键 词:实时多任务操作系统 pC/OS MSP430 中断 堆栈引言在嵌入式操作系统领域,由Jean J. Labrosse开发的pC/OS,由于开放源代码和强大 而稳定的功能,曾经一度在嵌入式系统领域引起强烈反响。而其本人也早已成为了嵌入式系 统会议(美国)的顾问委员会的成员。不管是对于初学者,还是有经验的工程师,pC/OS开放源代码的方式使其不但知

11、其然, 还知其所以然。通过对于系统内部结构的深入了解,能更加方便地进行开发和调试;并且在 这种条件下,完全可以按照设计要求进行合理的裁减、扩充、配置和移植。通常,购买 RTOS 往往需要一大笔资金,使得一般的学习者望而却步;而pC/OS对于学校研究完全免费,只 有在应用于盈利项目时才需要支付少量的版权费,特别适合一般使用者的学习、研究和开发。 自 1992 第 1 版问世以来,已有成千上万的开发者把它成功地应用于各种系统,安全性和稳 定性已经得到认证,现已经通过美国FAA认证。1 “C/0SII的几大组成部分pC/OS-II 可以大致分成核心、任务处理、时间处理、任务同步与通信, CPU 的移

12、植等 5 个部分。核心部分(OSCore.c)是操作系统的处理核心,包括操作系统初始化、操作系统运行、 中断进出的前导、时钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部分 都在这里。任务处理部分(OSTask.c)任务处理部分中的内容都是与任务的操作密切相关的。包括 任务的建立、删除、挂起、恢复等等。因为pC/OS-II是以任务为基本单位调度的,所以这 部分内容也相当重要。时钟部分(OSTime.c) pC/OS-II中的最小时钟单位是timetick(时钟节拍)。任务延时 等操作是在这里完成的。任务同步和通信部分 为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部 分;主

13、要用于任务间的互相联系和对临界资源的访问。与CPU的接口部分 是指pC/OS-II针对所使用的CPU的移植部分。由于pC/OS-II是 一个通用性的操作系统,所以对于关键问题上的实现,还是需要根据具体CPU的具体内容 和要求作相应的移植。这部分内容由于牵涉到SP等系统指针,所以通常用汇编语言编写。 主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、 中断的相关处理部分等内容。2 对于 MSP430 的中断处理2.1 函数调用和中断调用的操作MSP430最常使用的C编译器应该就是IAR Embedd-ed WorkBench。对于这一编译 器来说,通过分析和研究,

14、发现它有以下规律。(1) 函数调用如果是函数级调用,编译器会在函数调用时先把当前函数PC压栈,然后调用函数,PC 值改变。如果被调用的函数带有参数,那么,编译器按照以下的规则进行。最左边的两个参数如果不是struct (结构体)或者union (联合体),将被赋值到寄存 器,否则将被压栈。函数剩下的参数都将被压栈。根据最左边的那两个参数的类型,分别赋 值给R12 (对于32位类型赋值给R12:R13)和R14(对于32位类型赋值给R14:R15)。(2) 中断调用如果是在中断中调用中断服务子程序的话,编译器将把当前执行语句的PC压栈,同时 再把SR压栈。接着,根据中断服务子程序的复杂程度,选择

15、把R12R15中的寄存器压栈。 然后,执行中断服务子程序。中断处理结束后再把Rx寄存器出栈,SR出栈,PC出栈。把 系统恢复到中断前的状态,使程序接着被中断的部分继续运行。图 3 中断发生时的任务栈压栈操作2.2 任务级和中断级的任务切换步骤和原理(1) 任务级的任务切换原理pC/OS-ll是一个多任务的操作系统,在没有用户自己定义的中断情况下,任务间的切 换步骤是这样的:任务间的切换一般会调用OSSched()函数。函数的结构如下:void OSSched(void)关中断如果(不是中断嵌套并且系统可以被调度)确定优先级最高的任务 如果(最高级的任务不是当前的任务)调用 OSCtxSw();

16、开中断我们把这个函数称作任务调度的前导函数。它先判断要进行任务切换的条件,如果条件 允许进行任务调度,则调用OSCtxSw()。这个函数是真正实现任务调度的函数。由于期间 要对堆栈进行操作,所以OSCtxSw()般用汇编语言写成。它将正在运行的任务的CPU的 SR寄存器推入堆栈,然后把R4R15压栈。接着把当前的SP保存在TCB-OSTCBStkPtr 中,然后把最高优先级的TCB-OSTCBStkPtr的值赋值给SP。这时候,SP就已经指到最 高优先级任务的任务堆栈了。然后进行出栈工作,把R15R4出栈。接着使用RETI返回, 这样就把SR和PC出栈了。简单地说,pC/OS-II切换到最高优先级的任务,只是恢复最高 优先级

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号