嵌入式实时操作系统(uCOS_II)详解

合集下载

实时操作系统UCOS-II,学会RTOS给你的身价增值

实时操作系统UCOS-II,学会RTOS给你的身价增值

实时操作系统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就是任务。

如果这个切换操作放到定时器函数中来做,就可以严格按照时间来切换。

另外,各个任务之间有存在一定的关系,有逻辑上的先后等,必须引进全局的结构体、变量来标记一些信息,全局的这些数据是不会被释放的,所以所有的任务可以去通过读、写这些数据来实现各个程序块交流信息,实现所谓的同步、互斥。

这就是操作系统的原理,而这些不同的通信方式按功能细分就成事件管理、内存管理等。

第九讲 uCOSII嵌入式实时操作系统PPT课件

第九讲 uCOSII嵌入式实时操作系统PPT课件

章连载在美国1992年《嵌入式系统编程》杂志
的5月和6月刊上。uC/OS的源码发布在该杂志
的BBS上。1993年,美国的R&D出版社出版了
《uC/OS the Real Time Kernel》,在后来几年
中该书的销量超过了15000册。
3
9.19.2.1 uuCC/O/OSS-III的简介译者
2)uC/OS-II的译者
13
9.29u.2C./3OS硬-II件的系相统关函数
3)与硬件有关的部分 • OS_CPU.H
数据类型定义部分不需要修改, #typedef unsigned char BOOLEAN #typedef float FP32 #define BYTE INT8S #define UBYTE INT8U .......
4)uC/OS-II的特点 • 体积小、实时性强、易学易用。 • 源代码开放:购书即可获得,注释详细。 • 可移植性:大部分用ANSI C编写,以移
植到多种微处理器上。 • 可固化:通过一定的工具,可将其嵌入
到用户的产品中。 • 可裁剪:使用条件编译实现裁剪。
7
9.91..14 uCC//OOSS-I-II简I特介点
4
99.1.1.u3C应/O用S-I范I 简围介
3)uC/OS-II的应用范围 • 世界上数以千计的工程技术人员将
uC/OS 应用到了各个领域,如照像机 业、医疗仪器、音响设备、发动机控制、 网络接人设备、高速公路电话系统、 AT M机和工业机器人等。 • 许多大学用uC/OS作教材,用于实时系 统教学。
与硬件相关的部分如下: #include <os_cpu.h> #include <os_cfg.h> #include <ucos-ii.h> #include <pc.h>

Chap8_嵌入式实时操作系统uCOS-Ⅱ分析PPT共109页

Chap8_嵌入式实时操作系统uCOS-Ⅱ分析PPT共109页
12
学习嵌入式操作系统
学习一种实时操作系统RTOS,如 C/OS-Ⅱ,掌握实时系统的概念和设 计方法
嵌入式系统以应用为中心,要选择 “适用”的操作系统
嵌入式Linux 自己尝试“写”RTOS
13
RTOS在嵌入式系统中的位置
应用
FS C/C++ 设备驱动
RTOS
KERNEL 调试工具
其它组件 TCP/IP 设备I/O
16
C/OS的性能特点(一)
公开源代码 可移植性(Portable)
绝大部分 C/OS-II的源码是用移植性很强的ANSI C写的。和微 处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部 分已经压到最低限度,使得 C/OS-II便于移植到其他微处理器 上。 C/OS-II可以在绝大多数8位、16位、32位以至64位微处理 器、微控制器 、数字信号处理器(DSP)上运行。 可固化(ROMable) C/OS-II是为嵌入式应用而设计的,这就意味着,只要用户有 固化手段(C编译、连接、下载和固化), C/OS-II可以嵌入 到用户的产品中成为产品的一部分。 可裁剪(Scalable) 可以只使用 C/OS-II中应用程序需要的那些系统服务。也就是 说某产品可以只使用很少几个 C/OS-II调用,而另一个产品则 使用了几乎所有 C/OS-II的功能,这样可以减少产品中的 C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠 条件编译实现的。
BSቤተ መጻሕፍቲ ባይዱ 嵌入式硬件平台
14
主要内容
嵌入式操作系统 C/OS-Ⅱ简介 C/OS-Ⅱ内核结构 C/OS-Ⅱ任务管理 C/OS-Ⅱ时间管理 C/OS-Ⅱ任务通信与同步
15
C/OS简介

嵌入式实时操作系统_uCOSII

嵌入式实时操作系统_uCOSII

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()为止。

嵌入式实时操作系统uCOS-II(就绪算法)

嵌入式实时操作系统uCOS-II(就绪算法)

OSTCBTbl[1]
OSTCBStkPtr
OSTCBTbl[0]
OSTCBStkPtr
OSTCBNext
OSTCBTbl[2]
OSTCBStkPtr OSTCBNext
OSTCBTbl[n]
OSTCBStkPtr OSTCBNext NULL
OSTCBNext
NULL
20
任务控制块数组与指针
OSTCBFreeList
OSTCBPrioTbl[ ]
[0] [4] [5]
NULL
… &OSTCBTBL[1] &OSTCBTBL[2]

[OS_LOEEST_PRIO] &OSTCBTBL[0]
OS_TaskIdle
15
任务控制块数组与指针
OSTCBPrioTbl[
]
任务的优先级资源由操作系统提供,uc/OS-II 有64各优先级,优先级的高低按照编号从0(最高) 到63(最低)排序。由于用户实际使用的优先级的 个数通常少于64个,所以为节约系统资源,可以通 过定义系统常量OS_LOWEST_PRIO的值来限制优 先级编号的范围。
OSTCBTbl[2]
OSTCBStkPtr OSTCBNext
OSTCBTbl[n]
OSTCBStkPtr OSTCBNext NULL
NULL
13
任务控制块数组与指针
OSTCBPrioTbl[
]
任务控制块优先级表,专门用来存放指向各任 务控制块的指针,并按任务的优先级别将这些指针存 放在数组的各个元素里,这样系统在访问一个任务的 任务控制块时,就不必遍历任务控制块链表了。只要 知道任务的优先级,就可以迅速地从该数组中找到它 的任务控制块。

嵌入式实时操作系统uCOS-II(高清)

嵌入式实时操作系统uCOS-II(高清)

第一章:范例在这一章里将提供三个范例来说明如何使用 µ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目录下添加所有的目录和文件。

6.ucos2嵌入式实时操作系统

6.ucos2嵌入式实时操作系统



A Free sample background from
Slide 19
1.7
系统内核

系统内核与调度
功能 多任务系统中,内核负责管理各个任务 ,或者说为每个任务分配CPU时间,并且负 责任务之间的通讯。内核提供的基本服务 是任务切换。 优点 使用实时内核可以大大简化应用系统设 计 ,因为实时内核允许将应用分成若干个 任务,由实时内核来管理它们。
Slide 1
嵌入式系统原理与接口技术
第六讲 嵌入式实时操作系统C/OS-Ⅱ
A Free sample background from
Slide 2
本节提要
1
嵌入式实时操作系统概念
2 C/OS-Ⅱ简介 3 C/OS-Ⅱ内核结构 4 C/OS-Ⅱ任务管理 5

调度原则 总是进入优先级最高、就绪态的任务运行。
A Free sample background from
Slide 22
1.8

不可剥夺与可剥夺型
基于优先级的内核有两种类型:不可剥夺内核 和可剥夺型内核。
不可剥夺型内核

要求每个任务主动放弃cpu的使用权。 不可剥夺型调度法也称作合作型多任务,各 个任务彼此合作共享一个CPU。异步事件还 是由中断服务来处理。中断服务可以使一个 高优先级的任务由挂起状态变为就绪状态。 但中断服务以后控制权还是回到原来被中断 了的那个任务,直到该任务主动放弃CPU的 使用权时,那个高优先级的任务才能获得 CPU的使用权。

A Free sample background from
Slide 15

运行态 运行态的任务是指该任务掌握了CPU的控制权, 正在运行中。

μ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)引起了软件工程领域的高度关注,并且在工程应用领域获得了极大的成功。

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

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

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

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

27
使任务脱离就绪态

将 任 务 就绪表 OSRdyTbl[prio>>3]相应元素 的相应位清零, 而且当 OSRdyTbl[prio>>3]中的所有位都为零时,即全组任务中没有一个进 入就绪态时,OSRdyGrp的相应位才为零。 If((OSRdyTbl[prio>>3]&= OSMapTbl[prio & 0x07])==0) OSRdyGrp&= OSMapTbl[prio>>3];
15
任务控制块(TCB)

任务控制块 OS_TCB是一个数据结构,保存该任务的相关参 数,包括任务堆栈指针,状态,优先级,任务表位置,任 务链表指针等。

所有的任务控制块分为两条链表,空闲链表和使用链表。
16
µC/OS-II任务控制块.
typedef struct os_tcb { OS_STK void OS_STK INT32U INT16U INT16U #endif struct os_tcb *OSTCBNext; struct os_tcb *OSTCBPrev; #if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_EN OS_EVENT #endif

系统服务
C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的 内存的申请与释放、时间相关函数等。

中断管理
中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒, 则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。

稳定性与可靠性
6
µC/OS-II图书

而优先级为21的任务就绪21=10 101b,则OSRdyTbl[2]的第5位置1 ,且OSRdyGrp的第2位置1,相应的数学表达式为: OSRdyGrp OSRdyTbl[2] |=0x04; |=0x20;
25
根据优先级确定就绪表(2)

从上面的计算我们可以得到:若OSRdyGrp及OSRdyBbl[]的第n位置1 ,则应该把OSRdyGrp及OSRdyBbl[]的值与2n 相或。uC/OS中,把2n 的n=0-7的8个值先计算好存在数组OSMapTbl[7]中,也就是: OSMapTbl[0] =20=0x01(0000 0001) OSMapTbl[1] =21=0x02(0000 0010) …… OSMapTbl[7] =27=0x80(1000 0000)
22
根据就绪表确定最高优先级
两个关键:

优先级数分解为高三位和低三位分别确定; 高优先级有着小的优先级号 ;
23
根据优先级找到任务在就绪任务表中的位置
每个就绪的任务都放入就绪表中(ready list)中,就绪表有两个变 量:OSRdyGrp、OSRdyTbl[]
OSRdyGrp 7 6 5 4 3 2 1 0 [0] [1] [2] [3] [4] [5] [6] [7]
嵌入式系统设计与实例开发
——C/OS-Ⅱ
实时操作系统C/OS-Ⅱ分析
1
本节提要
1 C/OS-Ⅱ简介 2 C/OS-Ⅱ内核结构 3 4 5 6 C/OS-Ⅱ任务管理 C/OS-Ⅱ时间管理
C/OS-Ⅱ任务通信与同步
C/OS-Ⅱ移植
2
RTOS是32位的嵌入式CPU的软件基础

RTOS内核 提供CPU的管理
20
任务控制块初始化函数
INT8U OS_TCBInit ( INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt ) { …… }
21
任务级的任务调度--OSSched

硬件初时化,MMU,定时器,中断

RTOS 内核提供任务,内存管理 RTOS提供设备管理,文件和网络的支持 RTOS提供C/C++,JAVA,图形模块等编程接口
3
C/OS简介
1、C/OS——Micro Controller O S,微控制器操作系统 2、 C/OS简介

美国人Jean Labrosse 1992年完成 应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动 机控制、高速公路电话系统、自动提款机等 1998年C/OS-II,目前的版本C/OS -II V2.61 2000年,得到美国航空管理局(FAA)的认证,可以用于飞行器 中 网站()

描述了µC/OS-II内部的工作原理 随书的CD中包含了源代码

工业界最清晰的源代码

除英文版外,有中文和韩文版
English
ISBN 1-57820-103-9 美国CMP BOOK
Chinese
ISBN 7-81077-290-2 北京航空航天大学出版社
Korean
ISBN 89-951540-5-5
8
µC/OS-II提供的系统服务
信号量 带互斥机制的信号量


减少优先级倒置的问题
事件标志 消息信箱 消息队列 内存管理 时钟管理 任务管理
9
µC/GUI and µC/FS

µC/GUI

嵌入式的用户界面 用ANSI C书写 支持任何8, 16, 32-bits CPU 彩色,灰、度,等级或黑白显示 代码尺寸小
17
*OSTCBStkPtr; *OSTCBExtPtr; *OSTCBStkBottom; OSTCBStkSize; OSTCBOpt; OSTCBId;
#if OS_TASK_CREATE_EXT_EN>0
*OSTCBEventPtr;
#if (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN void #endif INT16U INT8U INT8U INT8U INT8U INT8U INT8U #if OS_TASK_DEL_EN BOOLEAN #endif } OS_TCB;
26
使任务进入就绪态

如果prio是任务是优先级,也是任务的识别号,则将任务放入就绪表 ,即使任务进入就绪态的方法是: OSRdyGrp OSRdyTbl[prio>>3] |=OSMapTbl[prio>>3]; |=OSMapTbl[prio & 0x07];

假设优先级为12——1100b OSRdyGrp OSRdyTbl[1] |=0x02; |=0x10;
C/OS-Ⅱ任务通信与同步
C/OS-Ⅱ移植
11
C/OS-II的文件结构
12
C/OS-II的内核结构

内核结构 任务管理 时间管理 任务之间通信与同步 C/OS的移植
13
任务task
典型的任务一个无限循环。 void mytask(void *pdata) { for (;;) { do something; waiting; do something; } }

µC/FS

嵌入式的文件系统Written in ANSI C 用ANSI C书写 支持任何8, 16, 32-bits CPU 支持SMC, MMC, SD, CF, IDE, Flash, RAM其他介质
10
本节提要
1 C/OS-Ⅱ简介 2 C/OS-Ⅱ内核结构 3 4 5 6 C/OS-Ⅱ任务管理 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。
14
任务状态
18
*OSTCBMsg; OSTCBDly; OSTCBStat; OSTCBPrio; OSTCBX; OSTCBY; OSTCBBitX; OSTCBBitY; OSTCBDelReq;
任务控制块OS_TCB中几个成员的算法
OSTCBY = priority >> 3;
OSTCBBitY
= OSMapTbl[priority >> 3];
OSTCBX
= priority & 0x07;
OSTCBBitX
= OSMapTbl[priority & 0x07];
19
空任务列表
所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl[] 中,系统初始化时,所有任务控制块被链接成空任务控制块的单向 链表,任务建立后,空任务控制块指针OSTCBFreeList指向的任务 控制块就赋给了该任务,然后OSTCBFreeList的值调整为指向链表 中的下一个空任务控制块。

C/OS的性能特点(二)

占先式(Preemptive) 多任务
C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序 最多可以有56个任务

可确定性
全部 C/OS-II的函数调用与服务的执行时间具有可确定性。

任务栈
每个任务有自己单独的栈, C/OS-II允许每个任务有不同的栈空间,以便压 低应用程序对RAM的需求。

可固化(ROMable)
C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固 化手段(C编译、连接、下载和固化), C/OS-II可以嵌入到读者的 产品中成为产品的一部分。
相关文档
最新文档