嵌入式实时操作系统(uCOS_II)详解
- 格式:pdf
- 大小:4.72 MB
- 文档页数:97
实时操作系统UCOS-II,学会RTOS给你的身价增值如果,你最近关注一些嵌入式招聘职位描述,你可能会经常看到看到使用过uCOS、Vxworks、QNX等RTOS者优先。
随便打开一个20K的嵌入式开发工作职责:你会发现熟悉RTOS的开发、移植、剪裁真的很吃香!今天,我们就来介绍一下实时操作系统UCOS-II。
一、嵌入式操作系统概览嵌入式操作系统的主要好处就是屏蔽了底层硬件的差别,给上层应用提供统一的接口,并管理进程调度和资源(如CPU时间、内存)分配等。
并且可以充分利用硬件资源,如在单任务时(大循环结构,如大部分51程序)遇到delay函数时,CPU在空转。
而在多任务系统,遇到delay或需等待资源时系统会自动运行下一个任务,等条件满足再回来运行先前的任务,这样就充分利用了CPU,提高了效率。
uC/OS操作系统与裸机程序的最大不同点就在于uC/OS有任务调度,可以根据任务的重要程度(优先级)优先执行重要的任务,从而确保能及时处理最重要的数据。
(所以对于一个系统有必要使用OS的判断是能否划分一个个的任务,并且各任务间的耦合很小)可以思考下裸机程序中断的时候发生的过程。
利用堆栈可以很自由的在A、B中切换,如果切换足够快,A、B看以来好像同时在执行,这就是并行,A、B就是任务。
如果这个切换操作放到定时器函数中来做,就可以严格按照时间来切换。
另外,各个任务之间有存在一定的关系,有逻辑上的先后等,必须引进全局的结构体、变量来标记一些信息,全局的这些数据是不会被释放的,所以所有的任务可以去通过读、写这些数据来实现各个程序块交流信息,实现所谓的同步、互斥。
这就是操作系统的原理,而这些不同的通信方式按功能细分就成事件管理、内存管理等。
uC/OS-II北京邮电大学计算机学院 邝 坚 2011年10月教材及参考文献《嵌入式实时操作系统 uC/OS-II(第2 版)》,Jean brosse, 邵贝贝, 北航出版 社, 2003年1月uC/OS-II的主要特点实时性可确定:绝大多数系统服务的执行时间具有可确定 性,不依赖于用户应用程序Task数目的多少。
多任务、独立栈:最多64个Task,基于优先级抢占调度方 式。
每个Task有自身独立的堆栈。
可裁减性:系统最小可裁减到几K到十几K,这种裁减还可 以做到基于函数级。
可移植性:与CPU体系结构相关部分用汇编编写,其他功 能组件CPU无关。
可靠、稳定性:由整个系统设计来保证,市场验证。
美国 联邦航空管理局(FAA)认证。
开源代码:内核约5500行C代码。
可固化:面向嵌入式应用。
系统功能实时内核 任务管理 时间管理 信号量、互斥信号量管理 事件标志组管理 消息邮箱管理 消息队列管理 内存管理 …Targets x86 68k PPC CPU32 i960 SPARC ARM MIPS XScale …Typical development configurationEthernetRS-232Development HostTargetTypical scenario:1. Boot target. 4. Download object module. 2. Attach target server. 5. Test & Debug. 3. Edit & compile. 6. Return to 3 or 1 as necessaryMulti-TaskingTask是代码运行的一个映像,从系统的角 度看,Task是竞争系统资源的最小运行单 元。
Task可以使用或者等待CPU、I/O设备 及内存空间等系统资源,并独立于其它的 Task,与它们一起并发运行。
Task OperationPriority-base preemptive scheduling(基 于优先级的抢占式调度)Task调度器上锁和开锁给调度器上锁函数OSSchedlock() 用于临 时禁止任务调度,直到任务完成后调用给 调度器开锁函数OSSchedUnlock()为止。
第一章:范例在这一章里将提供三个范例来说明如何使用 µC/OS-II。
笔者之所以在本书一开始就写这一章是为了让读者尽快开始使用 µC/OS-II。
在开始讲述这些例子之前,笔者想先说明一些在这本书里的约定。
这些例子曾经用Borland C/C++ 编译器(V3.1)编译过,用选择项产生Intel/AMD80186处理器(大模式下编译)的代码。
这些代码实际上是在Intel Pentium II PC (300MHz)上运行和测试过,Intel Pentium II PC可以看成是特别快的80186。
笔者选择PC做为目标系统是由于以下几个原因:首先也是最为重要的,以PC做为目标系统比起以其他嵌入式环境,如评估板,仿真器等,更容易进行代码的测试,不用不断地烧写EPROM,不断地向EPROM仿真器中下载程序等等。
用户只需要简单地编译、链接和执行。
其次,使用Borland C/C++产生的80186的目标代码(实模式,在大模式下编译)与所有Intel、AMD、Cyrix公司的80x86 CPU兼容。
1.00 安装 µC/OS-II本书附带一张软盘包括了所有我们讨论的源代码。
是假定读者在80x86,Pentium,或者Pentium-II处理器上运行DOS或Windows95。
至少需要5Mb硬盘空间来安装uC/OS-II。
请按照以下步骤安装:1.进入到DOS(或在Windows 95下打开DOS窗口)并且指定C:为默认驱动器。
2.将磁盘插入到A:驱动器。
3.键入 A:INSTALL 【drive】注意『drive』是读者想要将µC/OS-II安装的目标磁盘的盘符。
INSTALL.BAT 是一个DOS的批处理文件,位于磁盘的根目录下。
它会自动在读者指定的目标驱动器中建立\SOFTWARE目录并且将uCOS-II.EXE文件从A:驱动器复制到\SOFTWARE并且运行。
µC/OS-II将在\SOFTWARE目录下添加所有的目录和文件。
μ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)引起了软件工程领域的高度关注,并且在工程应用领域获得了极大的成功。
这种开发方法已在办公应用、电子商务、因特网及分布式网络应用中广泛使用;但在嵌入式领域,构件技术仍处于起步阶段,目前没有一个统一通用的构件规范。
尽管如此,由于基于构件的软件设计方法能够极好地满足嵌入式软件几乎所有的特性(如定制、裁剪、动态演变等),有效缩短产品开发周期,这种设计方法无疑将给嵌入式系统的开发带来巨大的好处。
本文尝试将构件化软件设计思想引入嵌入式软件设计中,提出了一种适用于嵌入式软件的基于构件的软件体系结构,并且在常用输入设备键盘的应用实践中,验证了此体系结构的可行性。
第10章从µC/OS 升级到µC/OS-II本章描述如何从µC/OS 升级到µC/OS-II。
如果已经将µC/OS移植到了某类微处理器上,移植µC/OS-II所要做的工作应当非常有限。
在多数情况下,用户能够在1个小时之内完成这项工作。
如果用户熟悉µC/OS的移植,可隔过本章前一部分直接参阅10.05节。
10.0 目录和文件用户首先会注意到的是目录的结构,主目录不再叫\SOFTWARE\uCOS。
而是叫\SOFTWARE\uCOS-II。
所有的µC/OS-II文件都应放在用户硬盘的\SOFTWARE\uCOS-II目录下。
面向不同的微处理器或微处理器的源代码一定是在以下两个或三个文件中:OS_CPU.H, OS_CPU_C.C,或许还有OS_CPU_A.ASM.。
汇编语言文件是可有可无的,因为有些C编译程序允许使用在线汇编代码,用户可以将这些汇编代码直接写在OS_CPU_C.C.中。
与微处理器有关的特殊代码,即与移植有关的代码,在µC/OS 中是放在用微处理器名字命名的文件中的,例如,Intel 80x86的实模式(Real Mode),在大模式下编译(Large Modle)时,文件名为Ix86L.H,Ix86L_C.C,和Ix86L_A.ASM.。
表 L10.1在µC/OS-II中重新命名的文件.新的文件名,这比重新建立一些新文件要容易许多。
表10.2给出来几个与移植有关的新旧文件名命名法的例子。
表L10.2对不同微处理器从µC/OS到µC/OS-II,要重新命名的文件.10.1INCLUDES.H用户应用程序中的INCLUDES.H文件要修改。
以80x86 实模式,在大模式下编译为例,用户要做如下修改:•变目录名µC/OS 为µC/OS-II•变文件名IX86L.H为OS_CPU.H•变文件名UCOS.H为uCOS_II.H新旧文件如程序清单 L10.1和 L10.2所示10.2OS_CPU.HOS_CPU.H文件中有与微处理器类型及相应硬件有关的常数定义、宏定义和类型定义。
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 为最高优先级。
嵌入式实时操作系统ucosIIucosII是一款源代码公开、可免费使用的嵌入式实时操作系统。
它是由德国嵌入式系统专家brosse于1992年编写完成的,主要适用于嵌入式系统的开发。
ucosII具有源代码短小精悍、可移植性好、稳定性高等优点,被广泛应用于各种嵌入式系统中。
源代码短小精悍:ucosII的源代码只有几百KB,相对于其他RTOS来说,其代码量较小,易于理解和修改。
可移植性好:ucosII采用了可移植性的设计方法,可以在不同的处理器和编译器上进行移植和优化。
稳定性高:ucosII在各种嵌入式系统中得到了广泛应用,其稳定性和可靠性得到了充分的验证。
支持多任务:ucosII支持多任务处理,可以同时运行多个任务,提高系统的效率和响应速度。
实时性:ucosII具有较高的实时性,可以满足各种实时性要求高的应用场景。
可扩展性:ucosII具有较好的可扩展性,可以根据需要进行功能扩展和优化。
系统内核:包括任务调度、任务管理、时间管理、内存管理等核心功能。
中断处理程序:处理各种中断请求,包括硬件中断、软件中断等。
系统API:提供了一套完善的API函数,方便应用程序的开发和调试。
调试和测试工具:包括各种调试和测试工具,如内存检查工具、性能分析工具等。
ucosII被广泛应用于各种嵌入式系统中,如工业控制、智能家居、智能交通、航空航天等。
其应用场景涵盖了消费类电子产品、医疗设备、通信设备、汽车电子等领域。
ucosII作为一款源代码公开、可免费使用的嵌入式实时操作系统,具有短小精悍、可移植性好、稳定性高等优点。
它广泛应用于各种嵌入式系统中,为应用程序的开发提供了便利和支持。
其可扩展性和实时性也使得它在各种领域中具有广泛的应用前景。
随着嵌入式系统的广泛应用,对嵌入式操作系统的需求也日益增长。
uCOSII是一种流行的实时嵌入式操作系统,具有轻量级、实时性、可扩展性等优点。
本文将介绍如何在AT91平台上实现uCOSII的移植。
ucos-ii工作原理uC/OS-II(Micro C/Operating System-II)是一种用于嵌入式系统的实时操作系统。
它的工作原理可以简单归纳为以下几个步骤:1. 任务管理:uC/OS-II使用优先级调度算法管理多个任务。
每个任务都有一个优先级,高优先级的任务会优先执行。
uC/OS-II通过一个任务控制块(TCB)来管理每个任务的信息,包括任务的状态、堆栈信息、优先级等。
2. 中断处理:uC/OS-II可以处理多种类型的中断。
当发生中断时,uC/OS-II会根据中断类型进行相应的处理,并且可以自动切换到中断服务程序(ISR)进行执行。
中断服务程序中的代码通常是短小且高效的,用于处理特定的中断事件。
3. 任务切换:uC/OS-II使用抢占式的任务调度方式,因此任务切换可以发生在任何时刻。
当一个任务的时间片用尽或者有更高优先级的任务需要执行时,uC/OS-II会保存当前任务的上下文信息,并切换到下一个任务的执行。
任务切换时,uC/OS-II会保存当前任务的栈指针等信息,并从下一个任务的栈指针中恢复相应的上下文,以使下一个任务继续执行。
4. 事件同步:uC/OS-II提供了多种事件同步机制,如信号量、事件标志、消息邮箱等,用于任务之间的同步和通信。
这些机制可以帮助任务之间按照一定的顺序进行执行,实现数据共享和互斥访问等功能。
5. 内存管理:uC/OS-II提供了内存管理功能,可以动态分配和释放内存块。
这种内存管理机制可以帮助节省内存空间,提高系统的效率。
总而言之,uC/OS-II通过任务管理、中断处理、任务切换、事件同步和内存管理等机制,实现了对嵌入式系统的实时调度和资源管理,以提供稳定、可靠的操作系统支持。