ucosii任务管理及调度
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
μC/OS是商业操作 系统
4
学习嵌入式操作系统
学习一种实时操作系统RTOS,如uc/OS,掌握实时系 统的概念和设计方法;
嵌入式系统以应用为中心,应用时选择“适用”的 操作系统; 嵌入式Linux; 自己“写”RTOS——一种学习态度;
5
任务1
任务2
应用软件层 任务3 任务n µC/OS-II 的层次示意图
typedef double FP64;
15
C/OS-II的文件结构
16
1
C/OS-II概述
2
任务和任务管理
3 4
中断和时间管理
任务之间的通信与同步
存储管理
5
17
任务的实现
创建任务的系统服务
OSTaskCreate()
INT8U OSTaskCreate ( void (*task)(void *pd), //任务代码指针 void *pdata, //任务参数指针 OS_STK *ptos, //任务栈的栈顶指针 INT8U prio //任务的优先级 );
所有的任务控制块分属于两条不同的链表 ,单向的空闲链表(头指针为 OSTCBFreeList)和双向的使用链表(头 指针为OSTCBList);
OSTCBNext、OSTCBPrev:用于将任务控制 块插入到空闲链表或使用链表中。每个任 务的任务控制块在任务创建的时候被链接 到使用链表中,在任务删除的时候从链表 中被删除。双向连接的链表使得任一成员 都能快速插入或删除。
用ANSI C书写
支持任何8, 16, 32-bits CPU 支持SMC, MMC, SD, CF, IDE, Flash, RAM 其他介质
14
可移植的数据类型
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef signed char INT8S; typedef unsigned int INT16U; typedef signed int INT16S; typedef unsigned long INT32U; typedef signed long INT32S; typedef float FP32;
OSTaskCreateExt()
提问:C/OS-II中的任务是进程还是线程?
18
任务主函数
一个任务通常是一个无限循环(返回值类型void)
void MyTask(void *pdata)
{
while (Hale Waihona Puke Baidu) {
Why?
do something;
waiting; do something;
}
}
FS C/C++ 设备驱动
RTOS
KERNEL 调试工具
其它组件
TCP/IP
设备I/O
BSP 嵌入式硬件平台
7
C/OS简介
1、C/OS——Micro Controller O S,微控制器操作系统 2、 C/OS简介
美国人Jean Labrosse 1992年完成 应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动 机控制、高速公路电话系统、自动提款机等 1998年C/OS-II,目前的版本C/OS -II V2.61,2.72
系统保留了优先级为0、1、2、3、 OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2, OS_LOWEST_PRI0-1以及OS_LOWEST_PRI0这8个任 务以被将来使用,用户可以有56个应用任务; 任务的优先级同样也是它的标识号ID。
21
空闲任务和统计任务
内核总是创建一个空闲任务OSTaskIdle(); 总是设置为最低优先级,OS_LOWEST_PRIOR; 当所有其他任务都未在执行时,空闲任务开始 执行; 应用程序不能删除该任务; 空闲任务的工作就是把32位计数器OSIdleCtr 加1,该计数器被统计任务所使用;
一旦任务建立了,任务控制块OS_TCB将 被赋值。
23
任务控制块TCB
typedef struct os_tcb { 栈指针; INT16U 链表指针; OS_EVENT void INT8U INT8U 其他…… OSTCBId; *OSTCBEventPtr; *OSTCBMsg; OSTCBStat; OSTCBPrio; /*任务的ID*/ /*事件指针*/ /*消息指针*/ /*任务的状态*/ /*任务的优先级*/
30
任务的状态-就绪
就绪状态(Ready):万事具备,只欠 CPU;
在所有的就绪任务当中,具有最高优先级 的任务被选中去运行; 如果任务在运行的时候被抢占了CPU(任务 被中断时才可能被抢占),则又回到就绪状 态。
31
任务的状态-运行
11
µC/OS-II的各种商业应用
全世界有数百种产品在应用:
Avionics Medical Cell phones
Routers and switches
High-end audio equipment Washing machines and dryers UPS (Uninterruptible Power Supplies)
实时操作系统C/OS-II
1
C/OS-II概述
2
任务管理
3 4
中断和时间管理
任务之间的通信与同步
存储管理
5
1
通用操作系统和嵌入式(实时)操作系统
通用操作系统:Windows/NT/XP、Linux、UNIX等,用于PC机 、服务器, 嵌入式(实时)操作系统:用于嵌入式设备的操作系统,具有通 用操作系统的基本特点,又具有系统实时性、硬件的相关依赖性 、软件固态化以及应用的专用性等特点; 嵌入式(实时)操作系统通常包括与硬件相关的底层驱动软件、 系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器 Browser等; 嵌入式(实时)操作系统的重要指标:实时性(中断响应时间、 任务切换时间等)、尺寸(可裁剪性 )、可扩展性(内核、中间 件);
28
系统初始化后…
指针数组,指向相应TCB
29
任务的状态-休眠
休眠状态(Dormant):任务存在于内存 空间中,但内核不可见;
可以通过以下函数通知内核,使之变为就 绪状态:
–
OSTaskCreate()或OSTaskCreateExt()
可以通过以下函数返回到休眠状态:
–
OSTaskDel()
系统服务
C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存 的申请与释放、时间相关函数等。
中断管理
中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则 高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。
稳定性与可靠性
10
µC/OS-II图书
统计任务OSTaskStat(),提供运行时间统计。每 秒钟运行一次,计算当前的CPU利用率。其优先级 是OS_LOWEST_PRIOR-1,可选。
22
任务控制块TCB 任务控制块 OS_TCB是描述一个任务的核 心数据结构,存放了它的各种管理信息 ,包括任务堆栈指针,任务的状态、优 先级,任务链表指针等;
9
C/OS的性能特点(二)
占先式(Preemptive) 多任务
C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多 可以有256个任务
可确定性
全部 C/OS-II的函数调用与服务的执行时间具有可确定性。
任务栈
每个任务有自己单独的栈, C/OS-II允许每个任务有不同的栈空间,以便压低应 用程序对RAM的需求。
基于µC/OS-II的 嵌入式系统软件 层次示意图如右 图所示
应用程序接口API
启动代码 GUI TCP/IP 文件系统
任务间通信ITC 任务调度
任务管理 内存管理
uCOS-II内核
系统任务 时钟节拍
中断服务例程ISR
FLASH驱动
LCD驱动
驱动程序
时间处理
硬件
6
RTOS在嵌入式系统中的位置
应用
19
任务也可以自我删除(并非真的删除,只是内核不 再知道该任务)
void MyTask (void *pdata) {
...... /* 用户代码 */
OSTaskDel(OS_PRIO_SELF); }
20
μ C/OS-Ⅱ可以管理多达64个任务;
OS_CFG.H 中定义=63
每个任务被赋以不同的优先级,取值从0到 OS_LOWEST_PRIO-2,数值越小,优先级越高;
Industrial controllers
GPS Navigation Systems Microwave Radios Instrumentation
Point-of-sale terminals
更多
12
µC/OS-II提供的系统服务
信号量 带互斥机制的信号量
减少优先级倒臵的问题
2000年,得到美国航空管理局(FAA)的认证,可以用于飞行器 中
网站www.ucos-II.com(www.micrium.com)
8
C/OS的性能特点(一)
公开源代码 可移植性(Portable)
绝大部分 C/OS-II的源码是用移植性很强的ANSI C写的。和微处理器 硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最 低限度,使得 C/OS-II便于移植到其他微处理器上。 C/OS-II可以在 绝大多数8位、16位、32位以至64位微处理器、微控制器 、数字信号处 理器(DSP)上运行。
描述了µC/OS-II内部的工作原理
随书的CD中包含了源代码
工业界最清晰的源代码
除英文版外,有中文和韩文版
English
ISBN 1-57820-103-9 美国CMP BOOK
Chinese
ISBN 7-81077-290-2 北京航空航天大学出版社
Korean
ISBN 89-951540-5-5
可固化(ROMable)
C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手 段(C编译、连接、下载和固化), C/OS-II可以嵌入到读者的产品 中成为产品的一部分。
可裁剪(Scalable)
可以只使用 C/OS-II中应用程序需要的那些系统服务。也就是说某产 品可以只使用很少几个 C/OS-II调用,而另一个产品则使用了几乎所 有 C/OS-II的功能,这样可以减少产品中的 C/OS-II所需的存储器空 间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。
事件标志 消息信箱
消息队列
内存管理 时钟管理
任务管理
13
µC/GUI and µC/FS
µC/GUI
嵌入式的用户界面 用ANSI C书写
支持任何8, 16, 32-bits CPU
彩色,灰、度,等级或黑白显示 代码尺寸小
µC/FS
嵌入式的文件系统Written in ANSI C
27
空闲TCB链表
所有的任务控制块都被放臵在任务控制块列表数组 OSTCBTbl[]中,系统初始化时,所有TCB被链接成空闲的 单向链表,头指针为OSTCBFreeList。当创建一个任务后 ,就把OSTCBFreeList所指向的TCB赋给了该任务,并将它 加入到使用链表中,然后把OSTCBFreeList指向空闲链表 中的下一个结点。
} OS_TCB;
24
栈指针 OSTCBStkPtr:指向当前任务栈顶的指针 ,每个任务可以有自己的栈,栈的容量可 以是任意的; OSTCBStkBottom:指向任务栈底的指针; OSTCBStkSize:栈的容量,用可容纳的指 针数目而不是字节数(Byte)来表示。
25
26
链表指针
2
嵌入式操作系统的发展
应用程序
应用程序
通信协议
库函数
应用程序
文件系统
API GUI
文件系统
API GUI
操作系统内核
操作系统内核
操作系统内核
驱动程序和固件
驱动程序和固件
驱动程序和固件
80年代初期
80年代中期-90年代中 期
90年代末期-21世纪
3
常见的嵌入式操作系统
实时嵌入式操作系统的种类繁多,大体上可分为两 种,商用型和免费型。 商用型的实操作系统功能稳定、可靠,有完善的技 术支持和售后服务,但往往价格昂贵,如Vxworks、 QNX、WinCE、Palm OS等。 免费型的实时操作系统在价格方面具有优势,目前 主要有Linux,μC/OS是一种源码开放的商业RTOS;