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

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

26
使任务进入就绪态

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

假设优先级为12——1100b OSRdyGrp OSRdyTbl[1] |=0x02; |=0x10;
嵌入式系统设计与实例开发
——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的管理

µ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];
5
C/OS的性能特点(二)

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

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

任务栈
每个任务有自己单独的栈, C/OS-II允许每个任务有不同的栈空间,以便压 低应用程序对RAM的需求。
8
µC/OS-II提供的系统服务
信号量 带互斥机制的信号量


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

µC/GUI

嵌入式的用户界面 用ANSI C书写 支持任何8, 16, 32-bits CPU 彩色,灰、度,等级或黑白显示 代码尺寸小

C/OS是占先式实时多任务内核,优先级最高的任务一旦准备就绪 ,则拥有CPU的所有权开始投入运行。

C/OS中不支持时间片轮转法,每个任务的优先级要求不一样且是 唯一的,所以任务调度的工作就是:查找准备就绪的最高优先级 的任务并进行上下文切换。

C/OS任务调度所花的时间为常数,与应用程序中建立的任务数无 关。


4
C/OS的性能特点(一)

公开源代码 可移植性(Portable)
绝大部分 C/OS-II的源码是用移植性很强的ANSI C写的。和微处 理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压 到最低限度,使得 C/OS-II便于移植到其他微处理器上。 C/OS-II 可以在绝大多数8位、16位、32位以至64位微处理器、微控制器 、数 字信号处理器(DSP)上运行。
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
任务优先级
OSRdyTbl[7] X 7 15 23 31 39 47 55 63 6 14 22 30 38 46 54 62 5 13 21 29 37 45 53 61 4 12 20 28 36 44 52 60 3 11 19 27 35 43 51 59 2 10 18 26 34 42 50 58 1 9 17 25 33 41 49 57
22
根据就绪表确定最高优先级
两个关键:

优先级数分解为高三位和低三位分别确定; 高优先级有着小的优先级号 ;
23
根据优先级找到任务在就绪任务表中的位置
每个就绪的任务都放入就绪表中(ready list)中,就绪表有两个变 量:OSRdyGrp、OSRdyTbl[]
OSRdyGrp 7 6 5 4 3 2 1 0 [0] [1] [2] [3] [4] [5] [6] [7]
27
使任务脱离就绪态

将 任 务 就绪表 OSRdyTbl[prio>>3]相应元素 的相应位清零, 而且当 OSRdyTbl[prio>>3]中的所有位都为零时,即全组任务中没有一个进 入就绪态时,OSRdyGrp的相应位才为零。 If((OSRdyTbl[prio>>3]&= OSMapTbl[prio & 0x07])==0) OSRdyGrp&= OSMapTbl[prio>>3];
7
µC/OS-II的各种商业应用

全世界有数百种产品在应用:

Avionics Medical Cell phones Routers and switches High-end audio equipment Washing machines and dryers UPS (Uninterruptible Power Supplies) Industrial controllers GPS Navigation Systems Microwave Radios Instrumentation Point-of-sale terminals 更多

硬件初时化,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)的认证,可以用于飞行器 中 网站www.ucos-II.com(www.micrium.com)

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

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

稳定性与可靠性
6
µC/OS-II图书
20
任务控制块初始化函数
INT8U OS_TCBInit ( INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt ) { …… }
21
任务级的任务调度--OSSched
优先级最高任务
0 8 16 24 32 40 48 56
Y
0 0 Y Y Y X X X
优先级最低任务 (空闲任务)
任务优先级号
24
根据优先级确定就绪表(1)

假设优先级为12的任务进入就绪状态,12=1100b,则OSRdyTbl[1] 的第4位置1,且OSRdyGrp的第1位置1,相应的数学表达式为: 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; } }

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

可裁剪(Scalable)
可以只使用 C/OS-II中应用程序需要的那些系统服务。也就是说 某产品可以只使用很少几个 C/OS-II调用,而另一个产品则使用了几 乎所有 C/OS-II的功能,这样可以减少产品中的 C/OS-II所需的存 储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。
OSTCBX
= priority & 0x07;
OSTCBBitX
= OSMapTbl[priority & 0x07];
19
空任务列表
所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl[] 中,系统初始化时,所有任务控制块被链接成空任务控制块的单向 链表,任务建立后,空任务控制块指针OSTCBFreeList指向的任务 控制块就赋给了该任务,然后OSTCBFreeList的值调整为指向链表 中的下一个空任务控制块。
17
*OSTCBStkPtr; *OSTCBExtPtr; *OSTCBStkBottom; OSTCBStkSize; OSTCBOpt; OSTCBId;
Leabharlann Baidu
#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;

而优先级为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)

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

工业界最清晰的源代码

除英文版外,有中文和韩文版
English
ISBN 1-57820-103-9 美国CMP BOOK
Chinese
ISBN 7-81077-290-2 北京航空航天大学出版社
Korean
ISBN 89-951540-5-5
相关文档
最新文档