当前位置:文档之家› ucosii实时操作系统分析-任务管理及调度精讲

ucosii实时操作系统分析-任务管理及调度精讲

3
实时操作系统C/OS-II
1
C/OS-II概述
2
任务概念
3
任务调度核心问题分析
4
C/OS简介

美国人Jean Labrosse 1992年完成 应用面覆盖了诸多领域,如照相机、医疗器械、音 响设备、发动机控制、高速公路电话系统、自动提 款机等 1998年C/OS-II,目前的版本C/OS -II V2.61, 2.72


2000年,得到美国航空管理局(FAA)的认证,可 以用于飞行器中
网站()
5

数 据 类 型
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; typedef double FP64;
struct os_tcb *OSTCBPrev; //指向前一个任务控制块的指针 ……
INT16U
INT8U INT8U
OSTCBDly;
OSTCBStat; OSTCBPrio;
//任务等待的时限(节拍数)
//任务的当前状态标志 //任务的优先级别
……
} OS_TCB;
10
任务控制块链表
系统在调用函数OSInit()对uC/OS-II系统进行初始化时,先在RAM中 建立一个OS_TCB结构类型的数组OSTCBTbl[ ],每个数组元素就是一 个任务控制块,然后把这些控制块链接成一个如图所示的链表。由 于链表中的这些控制块还没有与具体任务相关联,因此这个链表叫 做空任务块链表。 每当应用程序调用系统函数OSTaskCreate()创建一个任务时,系统 就会将任务控制块链表头指针OSTCBFreeList指向的任务控制块分配 给该任务。在给任务控制块中的各成员赋值后,就按任务控制块链 表的头指针OSTCBList将其加入到任务控制块链表中。
12
空闲任务和统计任务

内核总是创建一个空闲任务OSTaskIdle(); 总是设置为最低优先级,OS_LOWEST_PRIOR; 当所有其他任务都未在执行时,空闲任务开始 执行; 应用程序不能删除该任务; 空闲任务的工作就是把32位计数器OSIdleCtr 加1,该计数器被统计任务所使用;
6
实时操作系统C/OS-II
1
C/OS-II概述
2
任务概念
3
任务调度核心问题分析
7
任务调度概念
任务控制块 任务代码结构 任务优先级 一个任务的实现
8
任务控制块TCB

PCB:标识符、父进程标识符、
程序计数器、栈指针、 进程状态、优先级
一旦任务建立,一个任务控制块OS_TCB就被赋值。 任务控制块是一个数据结构,保存该任务的相关参数,包括任务 堆栈指针,任务的当前状态,任务的优先级等。 任务CPU使用权被剥夺时,TCB保存该时刻任务状态;任务重新得 到CPU控制权时,TCB确保任务从当时被中断的那一点丝毫不差地 继续执行。
µC/OS-II操作系统中进程调 度模块分析
1

1、课程任务:

分析µC/OS-II操作系统中的进程调度模块的源代码
2、任务说明:结合课堂上讲授的进程的定义、进程控制块、进 程的创建以及处理机调度算法等知识点,分析µC/OS-II操作 系统中的进程调度模块的源码实现。进而理解进程控制块的 结构,理解进程运行的并发性,掌握进程调度的方法。


OS_TCB全部驻留在RAM中。
任务控制块就相当于一个任务的身份证,没 有任务控制块的任务是不能被系统承认和管 理的。

typedef
……
struct
os_tcb {
//指向任务堆栈栈顶的指针
OS_STK *OSTCBStkPtr;
struct os_tcb *OSTCBNext; //指向后一个任务控制块的指针
8、用户任务的实现(编写一个示例程序验证调度算法)--1 (43页例2-7)
9、任务状态切换(挂起和恢复任务)示例程序演示--0.9(可选) (48页例2-8)
10、用信号量实现任务间同步和互斥示例程序演示--0.9(可选)
(119页例4-4,122页例4-5) 11、用消息邮箱实现任务间通信示例程序演示--0.9(可选)(136页例4-8)
OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASK_-1] OSTCBFreeList OSTCBTbl[0]
OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASK_-2]
OSTCBTbl[1]
…… OSTCBNext OSTCBPrev OSTCBPrio OSTCBNext
3、任务要求: (1)熟悉相关的理论知识;
(2)分析µC/OS-II操作系统中的进程调度模块的代码实现,并 辅以图表的形式描述实现流程;
(3)对核心代码作注释说明。 (4)按照模板撰写分析报告,以小组为单位参加答辩。
2

2、任务就绪表的结构---0.9 (29页2.4.1)

1、uC/OS的任务控制块---0.8 ( 25页2.3 ) 3、对任务就绪表的操作(将就绪任务状态填入就绪表)--0.9 (31页2.4.2) 4、根据就绪表确定最高优先级(采用查表法确定高优先级任务)--1 ( 31页2.4.2) 5、任务调度器实现流程图表述--1 (43页2.4.3) 6、任务调度器实现及源代码分析--1 (43页2.4.3 ) 7、任务切换的过程描述--0.8(可选) (43页2.4.3 )
OSTCBNext
OSTCBPrev OSTCBPrio
OSTCBNext
OSTCBPrev OSTCBPrio
空任务块链表
OSTCBPrev
OSTCBPrio
11
uC/OS的任务
uC/OS-II的任务有两种:用户任务和系统任务。由应用程序设 计者编写的任务叫做用户任务,由系统提供的任务叫做系统任 务。用户任务是为解决应用问题而编写的,系统任务是为应用 程序来提供某种服务的。 •目前,uC/OS-II最多可以对64个任务(包括用户任务和系统任 务)进行管理。
相关主题