ucosii实时操作系统分析-任务管理及调度精讲
- 格式:ppt
- 大小:1.16 MB
- 文档页数:37
摘要:μ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是以任务为基本单位调度的,所以这部分内容也相当重要。
基于μC/OS-II操作系统的任务调度机制论文关键词:μC/OS-II;多任务;任务调度论文摘要:μC/OS-II操作系统之所以在10多年的时间里作为一个嵌入式实时的多任务操作系统得到了广泛的应用,原因之一是它的任务管理机制存在许多的优点。
多任务运行的最大难点就在于多任务的调度。
WANG Yu-rong,ZHU Jian-bin(Computer Science College Wuhan University of Science and Engineering,Wuhan 430073,China)Abstract:As a multi-task embedded real time operation system, μC/OS-II Operating Systems has been widely used in more ten years.One of the reason is that the Operating Systems has many advantages.The hardest point is the schedul of tasks when we run multi-task Operating Systems.Key words:μC/OS-II;Multi-task;task-scheduling1 引言嵌入式系统是一种应用范围非常广泛的系统。
可以这样理解,除了桌面计算机和服务器外所有计算设备都属于嵌入式系统。
在短短十多年的时间里,伴随着微电子技术、软件技术的发展,嵌入式系统被广泛的用于如生物医学仪器、智能汽车、通信设备、网络设备、仪器仪表、手持设备等诸多领域。
[1] 它是以应用为中心的,而嵌入式操作系统则是嵌入式系统应用中的核心。
嵌入式系统是计算机硬件和软件的结合体,或许还加上机械等其他部分,被设计来完成专门的功能。
在一些情况下,嵌入式系统是一个大的系统或产品的一部分,就象汽车上的防抱死装置,与通用计算机相对。
从产品研发的角度,针对小资源系统中使用μC/OS-II的实时性和优先级关系进行了分析。
提出了可删除任务的灵活应用和可变大小任务栈的实现方法,对于并行任务使用共享资源的几种情况给出了实用解决方案。
这些措施获得了良好的任务并行性和实时响应,节约了代码存储空间。
引言μC/OS-II作为一种轻量级的嵌入式实时操作系统,正随着嵌入式微处理器性能的不断提高和外围资源(主要是存储器资源)的不断增加,得到越来越多的应用。
例如,原来的51系列单片机,限于6~12 MHz 的主频、12个Clock的机器周期以及有限的存储器资源,使用μC/OS-II会大大加重系统负担,使应用程序的运行受到影响,特别在快速A/D转换等实时性较强的场合,无法得到及时的响应,于是才有了更轻量级的Small RTOS等操作系统的出现。
但目前更强劲的51内核版本微处理器的大量出现,从根本上改变了这种情况。
40 MHz以上的主频,单周期指令的微处理器,加上64 KB的程序空间和8 KB以上的数据空间,这样的系统已经可以流畅地运行μC/OS-II[1]。
μC/OS-II的移植版本很多,选择一个适合系统CPU的版本,然后进行正确的配置和优化是非常重要的。
1 系统实时性分析本系统工作原理是在恒定温度条件下,任意启动4个测试通道来进行多个项目的并行分析,每个测试通道的工作流程完全相同,如图1所示。
C8051F120集成了8路12位高速A/D转换器(ADC0)和8路8位高速A/D转换器(ADC2)。
系统要求对4个光学传感器输出进行采样,ADC0可以构成4个差分测试通道以满足需求。
系统还要求能对2路温度实现实时控制,用于监控2个外部温度传感器的输出电压:一个保证测试部分的温度恒定在37±0.2 ℃,通过对加热组件的PWM控制来完成;另一个用于监测机箱温度,在32 ℃以上时启动风扇散热,30 ℃以下关闭风扇。
图1 通道工作流程从图1中可以看出,完整的流程包括信息输入、样本预温、通道启动、试剂添加、微分测量、结果处理6个阶段。
UC/OS-II内核调度分析一.内核概述:多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。
内核提供的基本服务是任务切换。
之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。
内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。
但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。
内核本身对CPU的占用时间一般在2到5个百分点之间。
UC/OS-II有一个精巧的内核调度算法,实时内核精小,执行效率高,算法巧妙,代码空间很少。
二.UC/OS-II内核调度特点:1.只支持基于优先级的抢占式调度算法,不支持时间片轮训;2.64个优先级,只能创建64个任务,用户只能创建56个任务;3.每个任务优先级都不相同。
4.不支持优先级逆转;5.READY队列通过内存映射表实现快速查询。
效率非常高;6.支持时钟节拍;7.支持信号量,消息队列,事件控制块,事件标志组,消息邮箱任务通讯机制;8.支持中断嵌套,中断嵌套层数可达255层,中断使用当前任务的堆栈保存上下文;9.每个任务有自己的堆栈,堆栈大小用户自己设定;10.支持动态修改任务优先级;11.任务TCB为静态数组,建立任务只是从中获得一个TCB,不用动态分配,释放内存;12.任务堆栈为用户静态或者动态创建,在任务创建外完成,任务创建本身不进行动态内存分配;13.任务的总个数(OS_MAX_TASKS)由用户决定;14.0优先级最高,63优先级最低;15.有一个优先级最低的空闲任务,在没有用户任务运行的时候运行.三.任务控制块OS_TCB描述:UC/OS-II的TCB数据结构简单,内容容易理解,保存最基本的任务信息,同时还支持裁减来减小内存消耗,TCB是事先根据用户配置,静态分配内存的结构数组,通过优先级序号进行添加,查找,删除等功能。
(转)uCOS-II任务调度过程ucos-II是基于任务优先级抢占式任务调度法的,就是内核在管理调度时,调用任务切换函数(一般为SSched()),在该函数中将此时已处于就绪状态(条件一)并且为最高优先级(条件二)的任务的保存于其栈中的相应信息压入cpu 寄存器中(软中断完成),然后cpu开始运行该任务的代码。
内核是何时进行任务调度的呢?虽然uC/OS-II是可被剥夺资源的内核(高优先级可强行占有低优先级正在使用的资源),但此事发生的前提是内核实时"检测"到了更高就绪的优先级了,那么内核是怎样来实时检测的呢?带着这个问题让我们再来看看任务的结构——里边有函数OSTimeDly(OS_TICKS_PER_SEC),一看就知道这是个延时函数,除了延时外它还会有其他用途呢?经查看其源码了解到里边有一条代码:OSSched(),对,函数OSTimeDly()的作用就是将此时正在运行的函数挂起(保存任务控制块OS_TCB中的相应信息)(任务控制块OS_TCB是系统分配给每个任务的信息存储单元),然后调用函数OSSched()进行任务切换,进而执行就绪的最高优先级任务。
此刻,我们了解到uCOS-II的任务切换是在执行的任务中调用延时函数OSTimeDly()进行的。
现在,还有一个问题还没解决,就是当延时到了,内核如何将资源返还给被延时挂起的任务?我们先来了解一下任务控制块(OS_TCB),任务控制块是一个数据结构,当任务的cpu使用权被剥夺时,uC/OS-II用它来保存该任务的状态。
当任务重新得到cpu使用权时,任务控制块确保任务从当时被中断的那一点丝毫不差地继续执行。
OS_TCB全部驻留在RAM中。
在OS_TCB中有一项时间延时项OSTCBDly,调用函数OSTimeDly()过程中有一步骤就是给OSTCBDly赋延时值。
uC/OS—II中有函数OSTimTick(),叫时钟节拍函数,它的一项工作就是给每个用户任务控制块OS_TCB中的时间延迟项OSTCBDly减1(如果该项不为零),当某项任务的任务控制块中的时间延时项OSTCBDly减为0时,这个任务就进入了就绪态,等待任务切换。