嵌入式实时操作系统μCOS原理与实践2教案.ppt
《嵌入式实时操作系统μCOS原理与实践2教案.ppt》由会员分享,可在线阅读,更多相关《嵌入式实时操作系统μCOS原理与实践2教案.ppt(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践嵌入式实时操作系统COS原理与实践2 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践第二章第二章 任务管理任务管理2.1 任务管理数据结构2.2 任务控制块初始化2.3 操作系统初始化2.4 任务的创
2、建2.5 任务的删除2.6 任务挂起和恢复2.7 任务的调度和多任务的启动2.8 特殊任务作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.12.1任务管理数据结构任务管理数据结构任务管理的数据结构包括任务控制块,任务空闲链表和任务就绪链表,任任务管理的数据结构包括任务控制块,任务空闲链表和任务就绪链表,任务优先级指针表,任务堆栈等,是务优先级指针表,任务堆栈等,是C/OS-II内核的核心部分之一。内核的核心部分之一。2.1.1任务控制块任务控制块 任务控制块是任务管理的核心数据结构,操作系统在启动的时候,
3、首先要任务控制块是任务管理的核心数据结构,操作系统在启动的时候,首先要在内存中创建一定是数量的任务控制块。任务控制块的最大数量等于操作在内存中创建一定是数量的任务控制块。任务控制块的最大数量等于操作系统能同时管理的最多任务数系统能同时管理的最多任务数。C/OS将任务控制块划分为两个链表,就绪链表和空闲链表。将任务控制块划分为两个链表,就绪链表和空闲链表。表表2.1,任务控制块的源代码,任务控制块的源代码,定义结构,定义结构OS_TCBOS_TCB作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.12.1任务
4、管理数据结构任务管理数据结构2.1.1任务控制块任务控制块 任务控制块任务控制块实体实体的声明如下:的声明如下:OS_TCB OSTCBTblOS_MAX_TASKS+OS_N_SYS_TASKS该代码在该代码在usos_ii.H中中,OS_MAX_TASKS为最多的用户任务数为最多的用户任务数,OS_N_SYS_TASKS为系统任务数为系统任务数,一般情况下为,一般情况下为2。作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.1.2空闲链表和就绪链表空闲链表和就绪链表 C/OS-II将任务控制块分成两个链
5、表来管理,这就是空闲任务链表和就绪任务链表。其中,空闲任务链表包含了所有空闲的任务控制块。所谓空闲任务控制块,是指未分配给某个任务的任务控制块。创建一个新任务,前提条件就是系统里还有这样的空闲任务块。就绪链表则是将所有的就绪任务拴在一起,如果有新的任务就绪,就要将其任务控制块从空闲链表中取出,加入到就绪链表中。作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.1.3任务表任务表 C/OS-II将任务控制块分成两个链表来管理,这就是空闲任务链表和就绪任务链表。其中,空闲任务链表包含了所有空闲的任务控制块。所谓
6、空闲任务控制块,是指未分配给某个任务的任务控制块。创建一个新任务,前提条件就是系统里还有这样的空闲任务块。就绪链表则是将所有的就绪任务拴在一起,如果有新的任务就绪,就要将其任务控制块从空闲链表中取出,加入到就绪链表中。作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.1.3任务优先级指针表任务优先级指针表任务优先级指针表也就是任务优先级指针数组,在C/OS-II任务管理中频繁使用,代码中随处可见。它是用来获取某优先级的任务的任务控制块地址。它的定义为:OS_TCB *OSTCBPrioTblOS_LOWES
7、T_PRIO+1OS_LOWEST_PRIO为最低优先级的任务的优先级,因为低优先级的任务数值最为最低优先级的任务的优先级,因为低优先级的任务数值最大,而任务优先级是从大,而任务优先级是从0开始的,所以其实开始的,所以其实OS_LOWEST_PRIO+1就是任务的数就是任务的数量。量。数组数组OSTCBPrioTbl就具有最多任务数个元素,它的类型是指向任务控制块的指针就具有最多任务数个元素,它的类型是指向任务控制块的指针 作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.1.4 任务堆栈任务堆栈所谓堆栈,
8、就是在存储器中按数据“后进先出LIFO(Last In First Out)”的原则组织的连续存储空间。因此,堆栈这种数据结构最大的特点就是最后进去的最先出来。任务堆栈的定义:任务堆栈的定义:#define TASK_STK_SIZE 512 typedef unsigned int OS_STK;OS_STK TaskStkOS_MAX_TASKSTASK_STK_SIZE;TASK_STK_SIZE是每个任务堆栈的大小,这里设置为512,根据具体的情况做移植时,可修改这个值。OS_MAX_TASKS是用户任务的数量。作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:
9、/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.1.4 任务堆栈任务堆栈任务堆栈演示任务堆栈演示如果堆栈是向下增长,也就是从高地址向低地址增长,那么在任务刚开始创建后,堆栈是空的。如图中例子,栈顶在为TaskStk0511,栈底为在TaskStk00。相反,如果堆栈是向下增长的,栈顶在为TaskStk00,栈底为在TaskStk0511。那么,如果我们向堆栈中压入数据,例如推入0 x0012ff78后,堆栈变化为图2.6。如图2.6,压栈后,若堆栈向下增长,在原来栈顶位置插入数据0 x0012ff78,然后栈顶位置向低地址方向移4个字节,指向TaskStk0510。若堆栈向上增
10、长,在原来栈顶位置压如0 x0012ff78,栈顶变为TaskStk01。作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.1.5任务就绪表和就绪组任务就绪表和就绪组内核在进行任务调度的时候,必须知道哪个任务在运行,哪个任务是就绪的最高优先级的任务。实时任务调度的关键在于速度,要求无论系统的运行情况如何,调度的时间是确定的,不能把时间都用在调度上。因此就需要设计高效的多任务调度方法。查找高优先级的任务,与正在运行任务的优先级进行比较以确定是否进行任务切换是内核在每个时钟中断都需要做的事情。为满足这样的需要,
11、C/OS-II的开发者采用了就绪表和就绪组这样的数据结构,围绕他们又定义了两张查找表。作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.1.5 任务就绪表和就绪组任务就绪表和就绪组-设置任务就绪设置任务就绪作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.1.5 任务就绪表和就绪组任务就绪表和就绪组-获取就绪任务中的最高优先级获取就绪任务中的最高优先级 空间换时间!作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部
12、代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.2 任务控制块初始化任务控制块初始化 任务控制块的初始化是在创建任务的时候必须要执行的操作,对任务控制块的初始化是在创建任务的时候必须要执行的操作,对任务控制块和一些相关的数据结果进行了处理。任务控制块和一些相关的数据结果进行了处理。参数参数 :prio 被创建的任务的优先级被创建的任务的优先级 ptos 任务堆栈栈顶的地址任务堆栈栈顶的地址 pbos 任务堆栈栈底的地址,如果是用
13、任务堆栈栈底的地址,如果是用OSTaskCreate()来创建来创建的任务,那么是没有扩展功能的,不能进行堆栈检查,就不主要适用这的任务,那么是没有扩展功能的,不能进行堆栈检查,就不主要适用这个参数,这个参数可以传递为个参数,这个参数可以传递为NULL id 任务的任务的ID,16位,取值范围是位,取值范围是0到到65535stk_size 堆栈的大小堆栈的大小pext 任务控制块的扩展块的地址任务控制块的扩展块的地址 opt 其他的选项其他的选项返回值返回值:OS_ERR_NONE 成功调用成功调用OS_ERR_TASK_NO_MORE_TCB 如果没有空闲的任务控制块如果没有空闲的任务控制
14、块作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践2.3 操作系统初始化操作系统初始化 操作系统初始化函数操作系统初始化函数OS_INIT是操作系统在开始运行的最初,对是操作系统在开始运行的最初,对全局变量、任务控制块、就绪表、事件及消息队列等重要数据结全局变量、任务控制块、就绪表、事件及消息队列等重要数据结构进行的初始化操作,并创建空闲任务、统计任务等系统任务。构进行的初始化
15、操作,并创建空闲任务、统计任务等系统任务。该函数必须在创建用户对象及调用该函数必须在创建用户对象及调用OSStart()启动实时任务调度启动实时任务调度之前运行。之前运行。操作系统初始化函数见表操作系统初始化函数见表2.15OS_InitMisc实现对操作系统一些混杂的全局变量的初始化 OS_InitRdyList对就绪表进行初始化的工作 OS_InitTCBList 控制块链表初始化OS_InitTaskIdle创建操作系统空闲任务作者卢有亮作者卢有亮 图书图书PPT和全部代码下载和全部代码下载http:/ 嵌入式实时操作系统设计与实践嵌入式实时操作系统设计与实践创建一个任务,任务从无到有。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 实时 操作系统 COS 原理 实践 教案
限制150内