嵌入式实时操作系统μCOS原理与实践2
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参数 : prio 被创建的任务的优先级 ptos 任务堆栈栈顶的地址 pbos 任务堆栈栈底的地址,如果是用OSTaskCreate()来创建 任务堆栈栈底的地址,如果是用 来创建 的任务,那么是没有扩展功能的,不能进行堆栈检查, 的任务,那么是没有扩展功能的,不能进行堆栈检查,就不主要适用这 个参数,这个参数可以传递为NULL 个参数,这个参数可以传递为 id 任务的ID, 位 取值范围是0到 任务的 ,16位,取值范围是 到65535 stk_size 堆栈的大小 pext 任务控制块的扩展块的地址 opt 其他的选项 返回值 : OS_ERR_NONE 成功调用 OS_ERR_TASK_NO_MORE_TCB 如果没有空闲的任务控制块 图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》
嵌入式实时操作系统 μC/OS原理与实践 μC/OS原理与实践
嵌入式实时操作系统µC/OS原理与实践 教材 :嵌入式实时操作系统 原理与实践 电子工业出版社 作者:卢有亮 作者 卢有亮 luyl@ 电子科技大学能源科学与工程学院
任务堆栈的定义: 任务堆栈的定义: #define TASK_STK_SIZE 512 typedef unsigned int OS_STK; OS_STK TaskStk[OS_MAX_TASKS][TASK_STK_SIZE];
TASK_STK_SIZE是每个任务堆栈的大小,这里设置为512,根据具体的情况做移 植时,可修改这个值。OS_MAX_TASKS是用户任务的数量。
OS_TCB *OSTCBPrioTbl[OS_LOWEST_PRIO + 1]
OS_LOWEST_PRIO为最低优先级的任务的优先级,因为低优先级的任务数值最 为最低优先级的任务的优先级, 为最低优先级的任务的优先级 而任务优先级是从0开始的 所以其实OS_LOWEST_PRIO + 1就是任务的数 开始的, 大,而任务优先级是从 开始的,所以其实 就是任务的数 量。 数组OSTCBPrioTbl就具有最多任务数个元素,它的类型是指向任务控制块的指针 就具有最多任务数个元素, 数组 就具有最多任务数个元素
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》 2.1.5任务就绪表和就绪组 任务就绪表和就绪组
内核在进行任务调度的时候,必须知道哪个任务在运行,哪个任务是就绪的最高优先级的任 务。实时任务调度的关键在于速度,要求无论系统的运行情况如何,调度的时间是确定的, 不能把时间都用在调度上。因此就需要设计高效的多任务调度方法。查找高优先级的任务, 与正在运行任务的优先级进行比较以确定是否进行任务切换是内核在每个时钟中断都需要做 的事情。为满足这样的需要,µC/OS-II的开发者采用了就绪表和就绪组这样的数据结构,围 绕他们又定义了两张查找表。
OS_TCB
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践任务控制块 任务控制块 的声明如下: 任务控制块实体的声明如下: OS_TCB OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS] 为最多的用户任务数, 该代码在usos_ii.H中,OS_MAX_TASKS为最多的用户任务数, 为最多的用户任务数 OS_N_SYS_TASKS为系统任务数,一般情况下为 。 为系统任务数, 为系统任务数 一般情况下为2。
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》 2.1.5 任务就绪表和就绪组-设置任务就绪 任务就绪表和就绪组 设置任务就绪
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》 2.1.5 任务就绪表和就绪组-获取就绪任务中的最高优先级 任务就绪表和就绪组 获取就绪任务中的最高优先级
空间换时 间!
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》 2.1.4 任务堆栈 任务堆栈演示
如果堆栈是向下增长,也就是从高地址向低地 址增长,那么在任务刚开始创建后,堆栈是空 的。如图中例子,栈顶在为TaskStk[0][511], 栈底为在TaskStk[0][0]。相反,如果堆栈是向 如图2.6,压栈后,若堆栈向下增长,在原来栈顶位置插入数据0x0012ff78,然后栈 下增长的,栈顶在为TaskStk[0][0],栈底为在 顶位置向低地址方向移4个字节,指向TaskStk[0][510]。若堆栈向上增长,在原来 栈顶位置压如0x0012ff78,栈顶变为TaskStk[0][1]。 TaskStk[0][511]。 TaskStk[0][511] 那么,如果我们向堆栈中压入数据,例如推入 0x0012ff78后,堆栈变化为图2.6。
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》 2.1.4 任务堆栈 所谓堆栈,就是在存储器中按数据“后进先出LIFO(Last In First Out)”的原则组织 的连续存储空间。因此,堆栈这种数据结构最大的特点就是最后进去的最先出来。
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》 2.1.3任务优先级指针表 任务优先级指针表 任务优先级指针表也就是任务优先级指针数组,在µC/OS-II任务管理中频繁使用, 代码中随处可见。它是用来获取某优先级的任务的任务控制块地址。它的定义为:
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》
2.1任务管理数据结构 2.1任务管理数据结构
任务管理的数据结构包括任务控制块,任务空闲链表和任务就绪链表, 任务管理的数据结构包括任务控制块,任务空闲链表和任务就绪链表,任 务优先级指针表,任务堆栈等, 内核的核心部分之一。 务优先级指针表,任务堆栈等,是µC/OS-II内核的核心部分之一。 内核的核心部分之一 2.1.1任务控制块 任务控制块 任务控制块是任务管理的核心数据结构,操作系统在启动的时候, 任务控制块是任务管理的核心数据结构,操作系统在启动的时候,首先要 在内存中创建一定是数量的任务控制块。 在内存中创建一定是数量的任务控制块。任务控制块的最大数量等于操作 系统能同时管理的最多任务数 。 µC/OS将任务控制块划分为两个链表,就绪链表和空闲链表。 将任务控制块划分为两个链表,就绪链表和空闲链表。 将任务控制块划分为两个链表 定义结构OS_TCB 表2.1,任务控制块的源代码 ,定义结构 ,
2012.03.03 卢有亮
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》
第二章 任务管理
2.1 任务管理数据结构 2.2 任务控制块初始化 2.3 操作系统初始化 2.4 任务的创建 2.5 任务的删除 2.6 任务挂起和恢复 2.7 任务的调度和多任务的启动 2.8 特殊任务
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》
2.3 操作系统初始化
操作系统初始化函数OS_INIT是操作系统在开始运行的最初,对 是操作系统在开始运行的最初, 操作系统初始化函数 是操作系统在开始运行的最初 全局变量、任务控制块、就绪表、 全局变量、任务控制块、就绪表、事件及消息队列等重要数据结 构进行的初始化操作,并创建空闲任务、统计任务等系统任务。 构进行的初始化操作,并创建空闲任务、统计任务等系统任务。 该函数必须在创建用户对象及调用OSStart()启动实时任务调度 该函数必须在创建用户对象及调用 启动实时任务调度 之前运行。 之前运行。 操作系统初始化函数见表2.15 操作系统初始化函数见表 OS_InitMisc实现对操作系统一些混杂的全局变量的初始化 OS_InitRdyList对就绪表进行初始化的工作 OS_InitTCBList 控制块链表初始化 OS_InitTaskIdle创建操作系统空闲任务
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》 2.1.3任务表 任务表 µC/OS-II将任务控制块分成两个链表来管理,这就是空闲任务链表和就绪 任务链表。其中,空闲任务链表包含了所有空闲的任务控制块。所谓空闲 任务控制块,是指未分配给某个任务的任务控制块。创建一个新任务,前 提条件就是系统里还有这样的空闲任务块。就绪链表则是将所有的就绪任 务拴在一起,如果有新的任务就绪,就要将其任务控制块从空闲链表中取 出,加入到就绪链表中。
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》 2.1.2空闲链表和就绪链表 空闲链表和就绪链表 µC/OS-II将任务控制块分成两个链表来管理,这就是空闲任务链表和就绪 任务链表。其中,空闲任务链表包含了所有空闲的任务控制块。所谓空闲 任务控制块,是指未分配给某个任务的任务控制块。创建一个新任务,前 提条件就是系统里还有这样的空闲任务块。就绪链表则是将所有的就绪任 务拴在一起,如果有新的任务就绪,就要将其任务控制块从空闲链表中取 出,加入到就绪链表中。
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》
图书PPT和全部代码下载 和全部代码下载/15441 作者卢有亮 图书 和全部代码下载
《嵌入式实时操作系统设计与实践》 嵌入式实时操作系统设计与实践》
2.2 任务控制块初始化
任务控制块的初始化是在创建任务的时候必须要执行的操作, 任务控制块的初始化是在创建任务的时候必须要执行的操作,对 任务控制块和一些相关的数据结果进行了处理。 任务控制块和一些相关的数据结果进行了处理。