OSII操作系统分析

合集下载

uCOS原理及应用

uCOS原理及应用
周立功单片机
• 多任务系统工作原理
操作系统的调度程序对所有任务实现运行控制 调度程序对所有任务实现运行控制; 任务切换实际就是把当前任务所占用的CPU资源用其它任务来替 任务切换 换; CPU资源包括寄存器R0-R15、CPSR、SPRS和其它一些全局变量; 调度程序由系统节拍驱动 系统节拍驱动。
移植时需要 编写的代码
用于产生 系统时钟
周立功单片机
移植简介
• 概述
要移植 移植一个操作系统到一个特定的CPU体系结构 上并不是一件很容易的事情 并不是一件很容易的事情,它对移植者有以下要求: 1. 对目标体系结构要有很深了解; 2. 对OS原理要有较深入的了解; 3. 对所使用的编译器要有较深入的了解; 4. 对需要移植的操作系统要有相当的了解; 5. 对具体使用的芯片也要一定的了解。
栈底 任务环境开始
SP
周立功单片机
• 堆栈初始化函数
OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt) { OS_STK *stk; opt = opt; stk = ptos; *stk = (OS_STK) task; *--stk = (OS_STK) task; *--stk = 0; 栈底 任务入栈的 *--stk = 0; 其它数据 *--stk = 0; *--stk = 0; PC *--stk = 任务环境开始 0; LR *--stk = 0; R12 *--stk = 0; R11 *--stk = 0; R10 *--stk = 0; R9 *--stk = 0; R8 *--stk = 0; ... *--stk = 0; R2 *--stk = (unsigned int) pdata; R1 *--stk = (USER_USING_MODE|0x00); R0 *--stk = 0; OSEnterSum SP return (stk); 空闲空间 } 周立功单片机

uCOS-II

uCOS-II

实验一、任务创建与删除1、uC/OS-II介绍对于操作系统的学习,创建任务和删除任务是最为基础的工作,uC/OS-II以源代码的形式发布,是开源软件, 但并不意味着它是免费软件。

可以将其用于教学和私下研究;但是如果将其用于商业用途,那么必须通过Micrium获得商用许可。

uC/OS-II属于抢占式内核,最多可以支持64个任务,分别对应优先级0~63,每个任务只能对应唯一的优先级,其中0为最高优先级。

63为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个。

uC/OS-II提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。

系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个整型变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前cpu的利用率。

μC/OS-II可管理多达63个应用任务,并可以提供如下服务,本章将针对以下服务分别以例程的方式来介绍1)信号量2)互斥信号量3)事件标识4)消息邮箱5)消息队列6)任务管理7)固定大小内存块管理8)时间管理2、任务创建与删除想让uC/OS-II管理用户的任务,用户必须要先建立任务,在开始多任务调度(即调用OSStart())前,用户必须建立至少一个任务。

uC/OS-II提供了两个函数来创建任务:OSTask Create()或OSTaskCreateExt()。

可以使用其中任意一个即可,其函数原型如下:INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U pri o)INT8U OSTaskCreateExt (void(*task)(void *pd),void *pdata,SD_STK *ptos,INT8U prio, INT16U id,OS_STK *pbos,INT32U stk_size, void *pext,INT16U opt)task:任务代码指针pdata:任务的参数指针ptos:任务的堆栈的栈顶指针prio:任务优先级id:任务特殊的标识符(uC/OS-II中还未使用)pbos:任务的堆栈栈底的指针(用于堆栈检验)stk_size:堆栈成员数目的容量(宽度为4字节)pext:指向用户附加的数据域的指针opt:是否允许堆栈检验,是否将堆栈清零,任务是否要进行浮点操作等等删除任务,是说任务将返回并处于休眠状态,任务的代码不再被uC/OS-II调用,而不是删除任务代码。

常用微型结点操作系统的对比

常用微型结点操作系统的对比

常用微型结点操作系统的对比1、uCos-II(ucos ii):商业和GPL双许可。

μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。

是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。

2、FreeRtos:和ucos-ii有部分类似,移植更方便,有赶超uCos-II的趋势,GPL许可。

相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。

FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。

当被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行效率。

FreeRTOS操作系统既有优点也存在不足。

其不足之处,一方面体现在系统的服务功能上,如FreeRTOS只提供了消息队列和信号量的实现,无法以后进先出的顺序向消息队列发送消息;另一方面,FreeRTOS只是一个操作系统内核,需外扩第三方的GUI(图形用户界面)、TCP/IP协议栈、FS(文件系统)等才能实现一个较复杂的系统,不像μC/OS-II可以和μC/GUI、μC/FS、μC/TCP-IP等无缝结合。

3、eCos: GPL许可。

eCos由Redhat推出的小型即时操作系统,最低编译核心可小至10K的级别,适合用于作bootloader增强,微小型系统。

此系统和嵌入式Linux系统的差异是他将操作系统做成静态连结(static library)的方式,让应用程式透过连结(linker)产生出具有操作系统的特性的应用程式。

几种嵌入式实时操作系统的分析与比较

几种嵌入式实时操作系统的分析与比较

⼏种嵌⼊式实时操作系统的分析与⽐较VxWorks、µClinux、µC/OS-II和eCos是4种性能优良并被⼴泛应⽤的实时操作系统。

本⽂通过对这4种操作系统的主要性能进⾏分析与⽐较,归纳出它们的选型依据和适⽤领域。

1 4种操作系统的介绍(1)VxWorksVxWorks是美国WindRiver公司的产品,是⽬前嵌⼊式系统领域中应⽤很⼴泛,市场占有率⽐较⾼的嵌⼊式操作系统。

VxWorks实时操作系统由400多个相对独⽴、短⼩精悍的⽬标模块组成,⽤户可根据需要选择适当的模块来裁剪和配置系统;提供基于优先级的任务调度、任务间同步与通信、中断处理、定时器和内存管理等功能,内建符合POSIX(可移植操作系统接⼝)规范的内存管理,以及多处理器控制程序;并且具有简明易懂的⽤户接⼝,在核⼼⽅⾯甚⾄町以微缩到8 KB。

(2) µC/OS-IIµC/OS-II是在µC-OS的基础上发展起来的,是美国嵌⼊式系统专家Jean J.Labrosse⽤C语⾔编写的⼀个结构⼩巧、抢占式的多任务实时内核。

µC/OS-II 能管理64个任务,并提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,具有执⾏效率⾼、占⽤空间⼩、实时性能优良和可扩展性强等特点。

(3)µClinuxµClinux是⼀种优秀的嵌⼊式Linux版本,其全称为micro-control Linux,从字⾯意思看是指微控制Linux。

同标准的Linux相⽐,µClinux的内核⾮常⼩,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强⼤的⽹络功能、出⾊的⽂件系统⽀持、标准丰富的API,以及TCP/IP⽹络协议等。

因为没有MMU内存管理单元,所以其多任务的实现需要⼀定技巧。

(4)eCoseCos(embedded Configurable operating system),即嵌⼊式可配置操作系统。

嵌入式实时多任务操作系统的特征介绍

嵌入式实时多任务操作系统的特征介绍

嵌入式实时多任务操作系统的特征介绍引言:适逢公司进行通用计算平台的硬件基础研究,在此硬件平台之上,必要引入通用的软件平台。

为此,操作系统无疑是最佳的选择。

在德国十二套软启动项目中,远程IO控制机的软件设计成功引入了实时多任务操作系统μC/OS—II, 本文结合作者的工作成果,针对μC/OS—II将嵌入式操作系统的基本特征和原理进行简单的描述,并对大家所熟知的实时特性概念进行简要的抛析。

嵌入式实时操作系统在国外在上世纪60年代便已发展,至今已有不下百种产品。

从在商业领域取得巨大成功的两个突出代表VxWorks和QNX;到开源并广泛传播的Linux;以及由知名公司所推出的WINCE等;再到由个人之力发展至今的μC/OS,每种操作系统皆有其自身的特点及所专长的应用领域,但同时作为嵌入式的实时多任务操作系统又有其共同的特征,以下将结合实际工作中所用到的μC/OS—II为大家进行简单的介绍。

首先,操作系统作为用户应用程序同系统硬件之间的接口,承担着系统全部软、硬件资源的分配、工作调度、控制协调并发活动的重任。

如图1所示为包含操作系统的软硬件体系结构。

图1比较于传统的PC机操作系统,除具有任务调度、同步机制、中断处理、文件功能外,嵌入式实时操作系统还具有如下几个主要特点:◆可裁减性,嵌入式系统开发所特有的一点便是具有有限的存储空间。

面向不同硬件资源的情况下,操作系统具有自身可裁减的特性,以适应系统的存储容量,以μC/OS—II为例,最小可将代码量裁减到2K+。

◆实时性,于军事及高端工业领域发展起来的嵌入式操作系统,系统所处运行环境极为复杂,要求极为苛刻。

对于外部的激励,操作系统能够及时的做出响应,来保证系统的可靠运行。

◆可移植性,操作系统作为通用型的软件平台,必要面对不同厂家、不同硬件架构的处理器平台。

因此为保证自身的可重用特性及兼容性的特点,操作系统多可进行移植,来适应不同处理器的硬件架构。

以μC/OS—II为例,在四款主流IP核PowerPC、ARM、MIPS和X86上皆可进行移植。

关于DSP2812上uCOS-II操作系统的说明

关于DSP2812上uCOS-II操作系统的说明

关于uCOS-II操作系统的说明一、工程文件的说明工程的所有文件在ucos目录下,打开工程文件后可以看到下面一些源文件·cmd文件工程的CMD文件与一般程序中的CMD 文件相同。

由F2812.cmd和DSP281x_Headers_nonBIOS.cmd两个文件组成。

其中对F2812.cmd文件进行了一些修改,将代码段定义在FLASH中,.bss和.ebss段都定义在低64K的数据空间中,以保证定义在.ebss段中的人物堆栈可以通过堆栈指针被访问。

·C语言和汇编源文件这部分文件在CCS窗口的Source文件夹下可以看到,主要有下面一些文件:Ucos_ii.c:操作系统的头文件包含文件。

OS_TickISR.asm:主要是OSTickISR( )函数,是操作系统时钟节拍中断的服务函数。

OS_Sw.asm:主要是OSCtxSw( )函数,非中断级任务切换函数,也是系统完成任务切换调用的30号中断(即USER 11 软中断)的中断服务函数。

OS_StartHighRdy.asm:主要是OSStartHighRdy()函数,在操作系统开始运行后(OSStart()函数开始执行以后)启动优先级最高的任务,一般情况下该任务是TaskStart任务。

OS_ISR.asm:中断服务程序的汇编源文件,尽量把要使用的中断服务程序放在这个文件中,使用汇编语言按照OS_SCIARXISR( )的结构编写。

关于中断服务程序后面会进一步加以说明。

OS_IntSw.asm:主要包含中断级任务切换函数OSIntCtxSw( ),完成中断级任务切换。

OS_GlobalStack.c:该文件中主要是全局任务堆栈的定义。

OS_cpu_c.c:该文件中主要是任务堆栈初始化函数OSTaskStkInit( )及其他一些与CPU相关的C语言函数的定义。

Ex1l.c:工程的主函数文件。

DSP281x_xxxx.c:例程中DSP2812外设操作的一些源代码,可以在这些文件中添加必要的操作外设的函数。

μCOS-Ⅱ操作系统

μCOS-Ⅱ操作系统

μC/OS-Ⅱ操作系统的简介2009-05-26 22:06μc/os-ii是由jean brosse于1992年编写的一个嵌入式多任务实时操作系统。

最早这个系统叫做μc/os,后来经过近10年的应用和修改,在1999年jean j.labrosse推出了;μc/os-ii,并在2000年得到了美国联邦航空管理局对用于商用飞机的、符合rtca do178b标准的认证,从而证明μc/os-ii具有足够的稳定性和安全性。

μc/os-ii是一个可裁减、源代码开放、结构小巧、可抢占式的实时多任务内核,是专为微控制器系统和软件开发而设计的,是控制器启动后首先执行的背景程序,并作为整个系统的框架贯穿系统运行的始终。

它具有执行效率高、占用空间小、可移植性强、实时性能良好和可扩展性强等特点。

采用μc/os-ii实时操作系统可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应,而且采用实时操作系统,降低了程序的复杂度,方便程序的开发和维护。

μc/os-ii的文件体系结构如图1所示。

图1 μc/os-ii的文件体系结构图基于μC/OS—II的嵌入式构件系统设计2009-05-26 22:08引言近些年来,随着嵌入式产品需求的不断增加,嵌入式软件正变得越来越复杂,而产品的开发周期也越来越短。

嵌入式软件开发迫切需要更高效的软件重用手段。

随着软件复用研究成为热点,其核心技术——构件化软件开发方法(CBD)引起了软件工程领域的高度关注,并且在工程应用领域获得了极大的成功。

这种开发方法已在办公应用、电子商务、因特网及分布式网络应用中广泛使用;但在嵌入式领域,构件技术仍处于起步阶段,目前没有一个统一通用的构件规范。

尽管如此,由于基于构件的软件设计方法能够极好地满足嵌入式软件几乎所有的特性(如定制、裁剪、动态演变等),有效缩短产品开发周期,这种设计方法无疑将给嵌入式系统的开发带来巨大的好处。

本文尝试将构件化软件设计思想引入嵌入式软件设计中,提出了一种适用于嵌入式软件的基于构件的软件体系结构,并且在常用输入设备键盘的应用实践中,验证了此体系结构的可行性。

C-OS-Ⅱ实时操作系统概述

C-OS-Ⅱ实时操作系统概述
嵌入式系统设计与开发
C/OS-Ⅱ实时操作系o C O S 2”,意为“微控制器 操作系统版本2”。μC/OS-II是源码公开的著名实时内 核,可用于各类8位、16位和32位单片机或DSP。从 μC/OS算起,该内核已有10多年应用史,在诸多领域 得到广泛应用。
μC/OS-II是一个完整的、可移植、可固化、可剪 裁的占先式实时多任务内核。μC/OS-II使用ANSI C语 言编写,包含一小部分汇编代码,使之可以供不同架 构的微处理器使用。至今,从8位到64位,μC/OS-II已 在超过40种不同架构的微处理器上运行。
实时系统概念
1.任务 任务是一个简单的程序,也称作一个线程,该程序可以认为 CPU完全属于该程序占用。 2.任务切换 多任务系统中,任务切换是指CPU的控制权由当前运行任务转 移到另外一个准备就绪任务时所发生的事件。 3.操作系统内核 多任务系统中,内核负责管理各个任务,或者说为每个任务分 配CPU时间,并且负责任务之间的通信,内核提供的基本服务 是任务切换。
7.可确定性 绝大多数μC/OS-II的函数调用和服务的执行时间具有确定性,也就是 说,用户总是能知道μC/OS-II的函数调用与服务执行了多长时间。
8.任务栈 μC/OS-II的每个任务都有自己单独的栈,使用μC/OS-II的占空间校验 函数,可确定每个任务到底需要多少栈空间。
9.系统服务 μC/OS-II提供很多系统服务,例如信号量、互斥信号量、时间标志、 消息邮箱、消息队列、块大小固定的内存的申请与释放及时间管理 函数等。
English
ISBN 1-57820-103-9 美国CMP BOOK
Chinese
ISBN 7-81077-290-2 北京航空航天大学出版社
Korean

嵌入式实时操作系统ucosii

嵌入式实时操作系统ucosii

医疗电子
ucosii在医疗电子领域 中应用于医疗设备、监
护仪、分析仪等。
物联网
ucosii在物联网领域中 应用于传感器节点、网
关、路由器等设备。
02
ucosii的体系结构与内核
任务管理
任务创建
ucosii提供了创建新任务的函数,如 OSTaskCreate(),用于创建新任务。
任务删除
ucosii提供了删除任务的函数,如 OSTaskDelete(),用于删除不再需要的任 务。
时间管理
01
02
03
时间节拍
ucosii通过定时器产生固 定时间间隔的节拍信号, 用于任务调度和时间管理 。
超时处理
ucosii支持超时机制,当 某个任务等待时间超过预 定阈值时触发相应的处理 函数。
时间函数
ucosii提供了一系列时间 函数,如OSTimeDly()、 OSTimeTick()等,用于时 间相关的操作和控制。
智能家居
ucosii适用于智能家居领域,可应用于 智能家电控制、家庭安全监控等场景。
02
03
医疗电子
ucosii适用于医疗电子领域,如医疗设 备控制、病人监控等,其可靠性和实 时性为医疗系统提供了有力保障。
THANKS。
应用软件的开发
任务管理
在UCOSII中,任务是用来实现应用程序功能的。在进行应用软件的开发时,需要创建和管理任务。这包括任务的创 建、删除、挂起和恢复等操作。
任务间通信
为了实现任务间的协同工作,需要进行任务间通信。UCOSII提供了信号量、消息队列、互斥量等机制来实现任务间 通信。在进行应用软件的开发时,需要利用这些机制来实现任务间的同步和数据交换。

VxWorks,uCOS II、RT-Linux、QNX大比拼

VxWorks,uCOS II、RT-Linux、QNX大比拼

VxWorks,uC/OS II、RT-Linux、QNX大比拼20世纪70年代以来嵌入式系统的硬件和软件技术的飞速进步,使得嵌入式应用得到了蓬勃发展,在这些应用中实时操作系统起着决定性的作用。

在复杂测控应用中,必须使用对实时性要求非常高的实时操作系统。

例如在工业控制、交通管理、机器人、航空航天、武器装备等领域,系统事件的响应如果不能准时或超时,就可能导致巨大的损失和灾难。

因而,选择操作系统时,对实时性的仔细考虑至关重要。

本文从实时性的角度细致的分析对比了适用于此类有苛刻实时性要求的 4 种操作系统——VxWorks、uC/OS II、RT-Linux、QNX,为系统选型提供一定参考。

实时性能主要实现技术实时操作系统的实时性是第一要求,需要调度一切可利用的资源完成实时任务。

根据响应时间在微秒、毫秒和秒级的不同,可分为强实时、准实时和弱实时三种。

强实时系统必须是对即时的事件作出反应,绝对不能错过事件处理时限。

例如测控领域就是要求强或接近强实时系统。

在机顶盒、PDA、信息家电等应用领域,系统负荷较重的时候,允许发生错过时限的情况而且不会造成太大的危害,准和弱实时系统就可满足应用。

一个强实时的操作系统通常使用以下技术:∙占先式内核当系统时间响应很重要时,要使用占先式内核。

当前最高优先级的任务一旦就绪,总能立即得到CPU 的控制权,而CPU 的控制权是可知的。

使用占先式内核使得任务级响应时间得以最优化。

∙调度策略分析任务调度策略是直接影响实时性能的因素。

强实时系统和准实时系统的实现区别主要在选择调度算法上。

选择基于优先级调度的算法足以满足准实时系统的要求,而且可以提供高速的响应和大的系统吞吐率。

当两个或两个以上任务有同样优先级,通常用时间片轮转法进行调度。

对硬实时系统而言,需要使用的算法就应该是调度方式简单,反应速度快的实时调度算法了。

尽管调度算法多种多样,但大多由单一比率调度算法(RMS)和最早期限优先算法(EDF)变化而来。

uCOS-II嵌入式操作系统介绍与移植

uCOS-II嵌入式操作系统介绍与移植

OSStartHighRd
1、该函数是在OSStart函数中调用 2、负责从最高优先级任务的TCB中获得该任务的堆
栈指针sp,并依次将cpu现场恢复,这时系统就将 控制权交给用户创建的该任务进程,直到该任务被 阻塞或者被其他更高优先级的任务抢占cpu 3、该函数仅在多任务启动时被执行一次,用来启 动之前创建的第一个,也就是最高优先级的任务执 行
3、可从网站上获 得全部源码及其在各种体系结构平 台上的移植范例。
uC/OS-II特点
1、uC/OS-II内核具有可抢占的实时 多任务调度功能
2、提供了许多系统服务,如信号量、 消息队列、邮箱、内存管理、时间 函数等
3、这些功能可以根据不同的需求进 行裁减。
uC/OS-II的移植
ARM处理器相关宏定义
1、退出临界区
#defineOS_ENTER_CRITICAL() ARMDisableInt()
2、进入临界区
#defineOS_EXIT_CRITICAL() ARMEnableInt()
堆栈增长方向
1、堆栈由高地址向低地址增长,这个也 是和编译器有关的,当进行函数调用时, 入口参数和返回地址一般都会保存在当 前任务的堆栈中,编译器的编译选项和 由此生成的堆栈指令就会决定堆栈的增 长方向。
#define OS_STK_GROWTH 1
OS_CPU.c的移植
1、任务堆栈初始化 2、系统hook函数 3、中断级任务切换函数
任务堆栈初始化OSTaskStkInit
1、由OSTaskCreate或OSTaskCreateExt调用 2、用来初始化任务的堆栈并返回新的堆栈指针stk。
退出/进入临界区函数 ARMDisableInt/ARMEnableInt

实时操作系统μC/OS-II的改进与应用研究

实时操作系统μC/OS-II的改进与应用研究

软 中 断 命令 或 依 靠 处 理 器 在 任 务 执 行 中调 度 。 当没 有 任
何任务进入就绪态时 , 去执行空任务 。 就
越 来 越 高 的需 要 , 时 避 免 频 繁 改 变 就 绪 任 务 的优 先 级 , 同
在 分 析 . os—I 代 码 的基 础 上 , 其 调 度 算 法 进 行 c/ I源 对
变化 。 . os—I c/ I系统 采用 的 是 静 态 优 先 级 分 配 策 略 , 由用 户来 为 每个 任 务 指 定 优 先 级 虽 然 任 务 的优 先 级 可 通 过 O Ta k h n e r ( S s C a g P i )函数 改 变 , 函 数 功 能 简单 , 以用 o 但 仅 户 指 定 的 新 优 先 级 来 替 换 任 务 当前 的优 先 级 。 随 着 实 时
维普资讯
实时操 作系统 p / , OS—l的 C l 改进 与应 用研 究
■ 莱 阳农 学 院 马 德 新
传统 的嵌 入 式 系统 设 计 大 多 采 用 单 任 务 顺 序 机 制 , 应
用 程 序 是 一 个无 限 的 大 循 环 , 有 的 事 件 都 按 顺 序 执 行 , 所 与 时 间 相 关性 较强 的 事件 靠 定 时 中断 来 保 证 , 由此 带 来 系 统 的稳 定性 、 时 性 较 差 ; 实 尤其 当 系统 功 能 较 复 杂 , 对 实 且
改进 。
2 调 度 算 法 的 改进
2 1 实 时 系统 的 调 度 策 略 .
在 操 作 系统 的多 任 务 调 度 算 法 的设 计 上 , 根 据 系 统 要
1 u/ C oS—l概 述 l
c OS—I 是 一 个 完 整 的 , 移 植 、 固化 、 裁 剪 的 / I 可 可 可 占先 式实 时 多 任务 内核 ; 支持 5 6个 用 户 任务 , 持 信 号 量 、 支

UCOS-II操作系统详解

UCOS-II操作系统详解

VμC/OS 和μC/OS-II是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。

CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。

工作原理编辑uC/OS-II是一种基于优先级的可抢先的硬实时内核。

要实现多任务机制,那么目标CPU必须具备一种在运行期更改PC的途径,否则无法做到切换。

不幸的是,直接设置PC指针,还没有哪个CPU支持这样的指令。

但是一般CPU都允许通过类似JMP,CALL这样的指令来间接的修改PC。

我们的多任务机制的实现也正是基于这个出发点。

事实上,我们使用CALL指令或者软中断指令来修改PC,主要是软中断。

但在一些CPU上,并不存在软中断这样的概念,所以,我们在那些CPU上,使用几条PUSH指令加上一条CALL指令来模拟一次软中断的发生。

在uC/OS-II里,每个任务都有一个任务控制块(Task Control Block),这是一个比较复杂的数据结构。

在任务控制块的偏移为0的地方,存储着一个指针,它记录了所属任务的专用堆栈地址。

事实上,在uC/OS-II内,每个任务都有自己的专用堆栈,彼此之间不能侵犯。

这点要求程序员在他们的程序中保证。

一般的做法是把他们申明成静态数组。

而且要申明成OS_STK类型。

当任务有了自己的堆栈,那么就可以将每一个任务堆栈在那里记录到前面谈到的任务控制快偏移为0的地方。

以后每当发生任务切换,系统必然会先进入一个中断,这一般是通过软中断或者时钟中断实现。

然后系统会先把当前任务的堆栈地址保存起来,仅接着恢复要切换的任务的堆栈地址。

由于哪个任务的堆栈里一定也存的是地址(还记得我们前面说过的,每当发生任务切换,系统必然会先进入一个中断,而一旦中断CPU就会把地址压入堆栈),这样,就达到了修改PC为下一个任务的地址的目的。

任务管理编辑uC/OS-II 中最多可以支持64 个任务,分别对应优先级0~63,其中0 为最高优先级。

uC_OS-II的特点

uC_OS-II的特点

早在20世纪60年代,就已经有人开始研究和开发嵌入式操作系统。

但直到最近,它才在国内被越来越多的提及,在通信、电子、自动化等需要实时处理的领域所日益显现的重要性吸引了人们越来越多的注意力。

但是,人们所谈论的往往是一些著名的商业内核,诸如VxWorks、PSOS等。

这些商业内核性能优越,但价格昂贵,主要用于16位和32位处理器中,针对国内大部分用户使用的51系列8位单片机,可以选择免费的uC/OS-II。

uC/OS-II的特点1.uC/OS-II是由Labrosse先生编写的一个开放式内核,最主要的特点就是源码公开。

这一点对于用户来说可谓利弊各半,好处在于,一方面它是免费的,另一方面用户可以根据自己的需要对它进行修改。

缺点在于它缺乏必要的支持,没有功能强大的软件包,用户通常需要自己编写驱动程序,特别是如果用户使用的是不太常用的单片机,还必须自己编写移植程序。

2.uC/OS-II是一个占先式的内核,即已经准备就绪的高优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。

这个特点使得它的实时性比非占先式的内核要好。

通常我们都是在中断服务程序中使高优先级任务进入就绪态(例如发信号),这样退出中断服务程序后,将进行任务切换,高优先级任务将被执行。

拿51单片机为例,比较一下就可以发现这样做的好处。

假如需要用中断方式采集一批数据并进行处理,在传统的编程方法中不能在中断服务程序中进行复杂的数据处理,因为这会使得关中断时间过长。

所以经常采用的方法是置一标志位,然后退出中断。

由于主程序是循环执行的,所以它总有机会检测到这一标志并转到数据处理程序中去。

但是因为无法确定发生中断时程序到底执行到了什么地方,也就无法判断要经过多长时间数据处理程序才会执行,中断响应时间无法确定,系统的实时性不强。

如果使用uC/OS-II的话,只要把数据处理程序的优先级设定得高一些,并在中断服务程序中使它进入就绪态,中断结束后数据处理程序就会被立即执行。

OS-II实时操作系统是一种可移植

OS-II实时操作系统是一种可移植

4.1 任务堆栈初始化函数OSTaskStkInit()
此函数是在任务创建函数OSTaskCreat()或OSTaskCreatExt()中调用的。因为系统为每个任务申请了一个数组作为栈,当一个任务运行时,就把堆栈指针指向本任务的栈,任务堆栈初始化函数就是在任务创建时将要创建任务的堆栈进行初始化。但C51的堆栈指针SP是8位的,只能在片内RAM的256个字节内寻址。因其寻址空间有限且SP唯一,不能像DSP或ARM那样为每一段程序或每一种模式定义堆栈,需小心管理堆栈空间。为了适应上述情况,需要换一种思路,不是让SP去指向各任务堆栈空间,而是把各任务堆栈空间的内容复制到系统栈中。至于堆栈数组空间要有多大以及堆栈数组空间里放些什么内容,可以借鉴keil中中断函数的压栈情况,当中断函数不指定寄存器组时,编译器一般将PC、ACC、B、DPTR、PSW、R0~R7寄存器入栈,其中PC和DPTR是双字节的,其它都是单字节的,一共15个字节,所以把堆栈数组设计成至少15个字节的,以保证任务所用的寄存器都在堆栈数组中包含着。因为每个数组里放的是寄存器的值,在此就把这每个任务的堆栈数组叫做寄存器数组,暂且把寄存器数组设计成15个字节,依次存放PC、ACC、B、DPTR、PSW、R0~R7。
任务调度是μC/OS-II的重要部分,和具体的微处理器关系紧密。必须移植的5个函数有4个都和任务有关。任务调度就是保存当前任务的寄存器和PC指针(即当前任务的断点),然后把将要执行的任务的寄存器值返回给寄存器并把PC指向将要执行任务的断点。这些的实现要借助于堆栈和中断,为了简便起见,先看函数调用时堆栈的使用情况。在函数调用时,堆栈的一个重要功能就是保存被调函数的断点地址。若有4个函数,Fun1调用Fun2,Fun2调用Fun3,Fun3调用Fun4,Fun4为叶子程序(无子程序调用)。

实时嵌入式操作系统μC/OS

实时嵌入式操作系统μC/OS

实时嵌入式操作系统μC/OS介绍了实时操作系统μC/OS-II的特点和内核结构,并首次实现了μC/OS-II在摩托罗拉处理器MPC上的移植,介绍了移植后OS的应用办法μC/OS-II是一种占先式多任务移植性十分强的免费微控制器实时操作系统,从1992年浮现以来,已在照相机发动机控制和工业等多种领域中得到应用它一方面相对GNU下衍生出来的EOS更小巧且移植便利,实时性更好,更适合工业控制领域应用;另一方面因为是免费的,比用法等商业实时EOS大大节约成本,十分适用于开发有用简约的嵌入式控制程序摩托罗拉的MPC555是建立在PowerPC体系结构上,采纳RISC技术的一款高档适用于精密控制的微控制器其芯片内嵌增强了浮点单元的32位RCPU核心 26KB静态RAM 448KB片内Flash 一个QSMCM(串行通讯模块) 两个TouCAN模块两个TPU 一个MIOS(模块化I/O系统) 两个Q 模块,工作频率达40MHz 另外芯片体积小,仅为2.5cm%26;215;2.5cm%26;215;0.5cm 全部这些特性使其特殊适用于汽车等现场控制领域的嵌入式微控制系统将μC/OS-II移植于MPC555上既有益于MPC和μC/OS-II在车用控制器上的应用,其成绩也可以用于其他嵌入式工业控制领域本次移植中,用法CodeWarrior for PPC 6.5编译调试环境1 移植原理μC/OS-II包括中断管理任务管理时光管理任务之间通信管理和内存管理五方面功能其结构共分三层,1 I层为与处理器相关的代码,在μC/OS-II的Intel 80x86版本上为OS_CPU.H OS_CPU_C.C和OS_CPU_A.ASM三个文件该层完成系统时钟的设置出入中断的管理和任务切换功能,为第II层提供接口 II层包括时光管理任务调度管理任务间的通信管理和内存管理四部分,是OS的主体部分,所有由ANSI C 代码写成,与处理器无关,它为用户应用程序提供接口 III层是用户应第1页共7页。

OS-Ⅱ

OS-Ⅱ

第36卷第1期2010年1月信息化研究InformatizationResearchVol-36No.1Jan.2010在MCS·51单片机上移植叫C/os—II葛世超(西安电子科技大学技术物理学院,陕西省西安市710126)摘要:介绍了实时嵌入式操作系统p.C/OS一1I及有关硬件移植的要点。

在MCS-51系列中典型的单片机AT89C52上移植该操作系统,经过裁剪的操作系统通过了移植测试,成功加载和创建了一系列任务,并达到了实时性的要求。

解决了嵌入式操作系统斗C/OS-II移植中的难题。

关键词:wC/OS-Ⅱ;MCS-51;嵌入式;移植中图分类号:TP311.54O引言随着半导体技术的发展,片上系统已成为嵌入式应用的发展趋势,RTOS(Real-timeoperatingsystem)的使用也越来越广泛,诸如在消费电子、无线通信、网络通信、医疗电子和工控等领域的应用。

嵌入式IxC/OS一Ⅱ操作系统具有高实时性、源码公开、可裁剪、可剥夺、多任务、内核稳定、高可靠性等特点,并得到美国航空管理局的认证,因此吸引了不少商业公司和嵌入式工程师。

而完成实时操作系统wC的成功移植是嵌入式开发的前提。

1t,c/os-Ⅱ的分析wC/OS的工作原理如下:voidmain(void){OSInit();OSTaskCreate(…);OSStart();}以上程序省略了一些堆栈、变量以及子函数的罗列,旨在说明ILLC/OS工作原理,OSInit();建立两个任务:空闲任务和统计CPU利用率任务,OSTaskCreate(…)是用来创建用户的应用程序的,其间会调用TaskStart()来进一步创建应用程序;OSStart()是进行系统任务调用,亦即使用户创建的最高优先级任务运行。

以上只是一个简单的示例程序,斗C/OS的系统结构如图l所示。

图1中表左侧的一栏是与处理器无关的代码,即操作系统在移植的时候是不需要修改的源码,右侧的一栏与配置有关,就是利用这些文件可以达到裁剪内核的目的,使源码编译后最小可达2K,而与移植有关收稿日期:2009.10-17;修回日期:2009-12-20。

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

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

uCOS-II的任务切换机理及中断调度优化uC/OS-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) 任务处理部分中的内容都是与任务的操作密切相关的。

包括任务的建立、删除、挂起、恢复等等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

把“选择项”传给 任务的识别码,保留未用 任务控制块 OS_TCBs 的双向链接
#if ((OS_Q_EN>0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN >0) void #endif INT16U INT8U INT8U INT8U INT8U INT8U INT8U #if OS_TASK_DEL_EN BOOLEAN #endif } OS_TCB;
表示该任务是否需要删除自身
任务控制块初始化函数 OS_TCBInit()
函数 OstaskCreate() 、 OstaskCreateExt() 中调用
INT8U OS_TCBInit ( INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt ) { OS_ENTER_CRITICAL(); ptcb = OSTCBFreeList; /* Get a free TCB from the free TCB list */ if (ptcb != (OS_TCB *)0) { OSTCBFreeList = ptcb->OSTCBNext; /* Update pointer to free TCB list */ OS_EXIT_CRITICAL(); ptcb->OSTCBStkPtr = ptos; /* Load Stack pointer in TCB */ ptcb->OSTCBPrio = (INT8U)prio; /* Load task priority into TCB */ ptcb->OSTCBStat = OS_STAT_RDY; /* Task is ready to run */ ptcb->OSTCBDly = 0; …… }
llxx@
22/90
µC/OS-II 任务控制块
typedef struct os_tcb { OS_STK void 展 OS_STK INT32U INT16U OSTaskCreateExt() INT16U #endif struct os_tcb *OSTCBNext; struct os_tcb *OSTCBPrev; #if OS_EVENT_EN OS_EVENT
llxx@ *OSTCBEventPtr; 23/90 /* 指向事件控制块
*OSTCBStkPtr; *OSTCBExtPtr;
指向当前任务栈顶的指针 指向用户定义的任务控制块扩 指向任务栈底的指针 栈中可容纳的指针元数
#if OS_TASK_CREATE_EXT_EN>0
*OSTCBStkBottom; OSTCBStkSize; OSTCBOpt; OSTCBId;
llxx@ 20/90
} }
2.3 任务控制块( TCB )
•OS_TCB 保存任务的相关参数
– 包括任务堆栈指针,状态,优 先级,任务表位置,任务链表 指针等。 TCB 结构
链表指针 任务 ID 任务状态 任务优先级 任务上下文
•所有的任务控制块分别属于 两条链表
– 空闲 TCB 表:单向链表,与系 统最大任务数有关 – 就绪链表:双向链表
17/90
Alternate Structure
void YourTask (void *pdata) { /* 用户代码 */ OSTaskDel(OS_PRIO_SELF); }
llxx@
18/90
范例 1
void main(void) { PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); //Clear the screen (1) OSInit(); // Initialize uC/OS-II (2) PC_DOSSaveReturn(); // Save environment to return to DOS (3) PC_VectSet(uCOS, OSCtxSw); (4) RandomSem = OSSemCreate(1); OSTaskCreate(TaskStart, (void *)0, (void *) &TaskStartStk[TASK_STK_SIZE-1], 0); OSStart(); } (5) (6) (7)
• 其中 0 为最高优先级 • 静态分配优先级,但为了消除优先级翻转,支持动态优先级
– 可剥夺实时多任务内核
• 事件驱动:非轮询
llxx@ 3/90
µ C/OS 的非功能性特点(一)
•可移植性( Portable ) •可裁剪( Scalable )
– 通过条件编译(# define )实现
• 典型的任务是一个无限循环。
void mytask(void *pdata) { for (;;) { do something; waiting; // 挂起, os 调度器将调度其他任务执行 ! do something; } }
llxx@ 16/90
Task Structure
llxx@
14/90
µ C/OS-II 的优先级反转
• 优先级继承和优先级天花板都需要支持同 优先级,而 C/OS 不支持同级。 ∀ µ C/OS-II 采用化解优先级翻转 ∀ µ C/OS 使用互斥信号量 mutex 采用类似优 先级继承机制,化解优先级翻转
– 将低优先级任务的优先级提升到略高于等待 mutex 的高优先级任务的优先级 – 避免了优先级继承协议中的优先级提升开销。
µ C/OS-Ⅱ 分析
李曦 llxx@ infolab@tc
本节提要
1 µ C/OS-Ⅱ 简介 2 µ C/OS-Ⅱ 内核结构 3 4 5 6 µ C/OS-Ⅱ 任务管理 µ C/OS-Ⅱ 时间管理 µ C/OS-Ⅱ 任务通信与同步
7
µ C/OS-Ⅱ 内存管 理 µ C/OS-Ⅱ 移植
llxx@
19/90
void TaskStart (void *data) { Prevent compiler warning by assigning ‘data’ to itself; Display banner identifying this as EXAMPLE #1; OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); PC_SetTickRate(200); OS_EXIT_CRITICAL(); OSStatInit(); //Initialize the statistic task (4) (2) (3)
•多任务
µ C/OS-II 可以管理 64 个任务
•目前这一版本保留 8 个给系统,应用程序最多可以有 56 个任务 。
•占先式( Preemptive )
– 运行处于就绪状态下优先级最高的任务 µ C/OS-Ⅱ 不支持时间片轮番调度法。
• 应用程序中各任务的优先级必须互不相同。
llxx@ 4/90
llxx@
15/90
µ C/OS 中的任务
∀ µ C/OS –II 2.5 版本支持 64 个任务,每个任务一 个特定的优先级。优先级越高,数字越小。
– – 系统占用了 8 个任务,保留优先级为 0 、 1 、 2 、 3 OS_LOWEST_PRIO-3 、 OS_LOWEST_PRIO-2 、 OS_LOWEST_PRIO-1 、 OS_LOWEST_PRIO-0 。
中断可以使正在执行的任务暂时挂起。 如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌 套全部退出后立即执行,中断嵌套层数可达 255 层。
可固化( ROMable ) 稳定性与可靠性
llxx@ 5/90
本节提要
1 µ C/OS-Ⅱ 简介 2 µ C/OS-Ⅱ 内核结构 3 4 5 6 µ C/OS-Ⅱ 任务管理 µ C/OS-Ⅱ 时间管理 µ C/OS-Ⅱ 任务通信与同步
void YourTask (void *pdata) (1) { for (;;) { (2) /* 用户代码 */ 调用 uC/OS-II 的某种系统服务(将自己挂起) : OSMboxPend(); OSQPend(); OSSemPend(); OSTaskDel(OS_PRIO_SELF); OSTaskSuspend(OS_PRIO_SELF); OSTimeDly(); OSTimeDlyHMSM(); /* 用户代码 */ llxx@
• 优先级天花板( Priority ceiling )协议
–将占有者的优先级升至所有使用该信号量的任务的最高 优先级 –互斥信号量的优先级天花板在创建该信号量时指定 –可能影响中间优先级任务的实时性
llxx@ 13/90
∀ µ C/OS-II 采用互斥信号量化解优先级翻转
优先级继承
主任 务
任 务 1
任 务 n
LCD 初始化 LCD_Init()
用户 程序
……
装载字库 LoadFont()
调用系统配置文件 LoadConfigSys
ห้องสมุดไป่ตู้消息 处理
llxx@
8/90
任务
llxx@
9/90
任务的状态
llxx@
10/90
µ C/OS-Ⅱ 移植
µ C/OS-II 的文件结构
H
llxx@
7/90
操作系统的启动和运行过程
嵌入式控制器硬件 初始化 ARMTargetInit () 启动多任务调 度 OSStart()
操作系统初始 化 OSInit()
初始化用户界 面、时钟 initOSGUI() InitRtc() 创建任务 OSTaskCreate ()
相关文档
最新文档