RTOSuCOS-II原理及应用.ppt
《RTOSuCOS-II原理及应用.ppt》由会员分享,可在线阅读,更多相关《RTOSuCOS-II原理及应用.ppt(113页珍藏版)》请在三一办公上搜索。
1、1,2023/7/8,嵌入式实时操作系统 C/OS-II,2023/7/8,2,第2章 uC/OS-II中的任务,山东科技大学 信息学院,3,2023/7/8,第2章 目录,1、任务的基本概念2、任务堆栈3、任务控制块及任务控制块链表4、任务就绪表及任务调度5、任务的创建6、任务的挂起和恢复7、其他任务管理函数8、uC/OS-II的初始化和任务的启动,山东科技大学 信息学院,4,2023/7/8,第2章 补充.目录,1、任务的特性2、任务的划分目标3、任务的划分方法4、任务的可调度性分析5、任务的执行分类和优先级安排6、任务设计中的问题7、系统设计编码实现过程8、中断服务程序的设计,山东科技大
2、学 信息学院,5,2023/7/8,第2章 目录,1、任务的基本概念2、任务堆栈3、任务控制块及任务控制块链表4、任务就绪表及任务调度5、任务的创建6、任务的挂起和恢复7、其他任务管理函数8、uC/OS-II的初始化和任务的启动,山东科技大学 信息学院,6,2023/7/8,2.1 任务的基本概念,复杂问题“分而治之”的问题解题思路。针对目标系统拆分后的“小且易”的问题的具体处理方法编码和数据结构-任务。uC/OS-II的两种任务:系统任务、用户任务。任务的组成:,任务控制块-uC/OS-II进行任务管理用的一个数据结构。任务代码-描述任务算法的程序编码。任务堆栈-任务的工作现场环境。,山东科
3、技大学 信息学院,7,2023/7/8,2.1 任务的基本概念,山东科技大学 信息学院,8,2023/7/8,2.1 任务的基本概念,“宏观”上的多任务并发,实际上是用单 CPU 进行多任务处理,“微观”任何时刻,只能运行一个任务,存在CPU资源竞争-任务调度、任务现场。,各个任务在多任务系统中也随着环境条件的情况而具有不同的状态。任务状态划分也是多任务操作系统的管理手段。,山东科技大学 信息学院,9,2023/7/8,任务的状态及其转换,正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给别的任务而使任务进入等待状态。,任务在没有被配备任务控制块或被
4、剥夺了任务控制块时的状态叫做任务的睡眠状态,系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,这时任务的状态叫做就绪状态。,处于就绪状态的任务如果经调度器判断获得了CPU的使用权,则任务就进入运行状态,一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态,山东科技大学 信息学院,10,2023/7/8,用户任务代码的一般结构,void MyTask(void*pdata)/任务的初始化 for(;)/超循环构成任务体 可被中断的用户代码片断;OS_ENTER_CRITICAL();/进入临界区(关中断)不可被中断的用户代码片断;OS_EXI
5、T_CRITICAL();/退出临界区(开中断)可被中断的用户代码片断;,山东科技大学 信息学院,11,2023/7/8,用户应用程序的一般结构,“用户任务”代码形式上很像 C函数,但他不是函数!“任务”不能被主函数 main()或其他函数调用,只能被主函数或已激活任务创建。任务的运行由操作系统调度管理。,void MyTask1(void*pdata)void MyTask2(void*pdata)void main()OSInit();OSTaskCreate(MyTask1,);OSTaskCreate(MyTask2,);OSStart();,山东科技大学 信息学院,12,2023/7
6、/8,2.1 任务的基本概念,在此我们学习了uC/OS-II 的 3 个系统函数和 2个宏。,OSInit()-初始化 uC/OS-II 环境。OSTaskCreate()-创建任务系统函数。OSStart()-启动 uC/OS-II 任务调度器。OS_ENTER_CRITICAL()-进入临界区(宏)OS_EXIT_CRITICAL()-退出临界区(宏),OSInit()函数原型:void OSInit(void)OSStar()函数原型:void OSStart(void)OSTaskCreate()函数原型:INT8U OSTaskCreate(void(*task)(void*pd),
7、/指向任务的指针 void*pdata,/传递给任务的参数 OS_STK*ptos,/任务堆栈栈顶的指针 INT8U prio/任务的优先级别),山东科技大学 信息学院,13,2023/7/8,OSTaskCreate()函数使用举例:,定义任务 task_Avoid task_A(void*pdata);/任务初始化部分 while(1);/任务功能代码,在系统“创建”任务 task_Avoid main(void)OSInit();/系统初始化部分 OSTaskCreate(task_A,void*0,山东科技大学 信息学院,14,2023/7/8,2.1 任务的基本概念,系统任务,空闲任
8、务(OSTaskIdel())使用说明:1、uC/OS-II规定用户程序中必须使用OSTaskIdel。2、该任务不能用软件删除。3、该任务是uC/OS-II初始化时自动创建,其任务优先级固定为最低级,用户也可修改该任务的业务。4、目的-使 CPU 在没有用户任务可执行时也有事可做。,统计任务(OSTaskStat())使用说明:1、功能完成用户任务 CPU 使用率的统计,结果以百分比的形式存放在变量 OSCPUsage 中。2、该任务用户可选择使用。OS_CFG.H文件中的常数OS_TASK_STAT_EN 设置为 1,使能该函数。3、用户在OS_CFG.H中使能该任务后,系统自动创建该任务
9、,但在用户使用统计数据前必须调用系统函数 OSStatInit()先进行初始化。4、该任务固定拥有次末任务优先级。,山东科技大学 信息学院,15,2023/7/8,2.1 任务的基本概念,任务的优先权和优先级别,uC/OS-II 的每个任务都必须有唯一的优先级。uC/OS-II 最多可以管理64个优先级别分配给64个任务。uC/OS-II 中用一个8b的整型数来表示优先级别,数字越小,优先级越高,prio=0 的任务优先级最高。uC/OS-II 中使用任务的优先级(prio)作为任务句柄。用户通过修改 OS_CFG.H 中的宏定义常数 OS_LOWEST_PRIO 的值,约定本用户系统的最大优
10、先级数。,山东科技大学 信息学院,16,2023/7/8,第2章 目录,1、任务的基本概念2、任务堆栈3、任务控制块及任务控制块链表4、任务就绪表及任务调度5、任务的创建6、任务的挂起和恢复7、其他任务管理函数8、uC/OS-II的初始化和任务的启动,山东科技大学 信息学院,17,2023/7/8,2.2 任务堆栈,堆栈-LIFO访问原则组织的连续存储器。任务堆栈在 uC/OS-II 中的应用:,任务堆栈是任务的三大组成部分之一。保存 CPU 寄存器现场(R0R12、LR、SPSR 等)。本 Task 的私有数据。,山东科技大学 信息学院,18,2023/7/8,2.2 任务堆栈,任务堆栈的创
11、建,-在创建任务的同时,任务堆栈即被创建。,举例:#define MyTaskStkSize 64OS_STK MyTaskStk MyTaskStkSize/在 OS_CPU.H中定义 OS_STK/typedef INT32U OS_STKINT8U OSTaskCreate(void(*task)(void*pd),/指向任务的指针 void*pdata,/传递给任务的参数 MyTaskStk MyTaskStkSize 1/任务堆栈栈顶的指针 INT8U prio/任务的优先级别),山东科技大学 信息学院,19,2023/7/8,2.2 任务堆栈,任务堆栈的使用注意事项 _ 存在两种堆
12、栈形式,递增堆栈-进栈操作向大地址方向发展。,递减堆栈-进栈操作向小地址方向发展。,OSTaskCreate(&MyTaskStkStkSize-1,),OSTaskCreate(&MyTaskStk 0,),备注:利用条件编译技术和 OS_CPU.H 中的宏定义常数OS_STK_GROWTH 编写易移植用户系统;“1”-递减堆栈 for ARM CPU。,山东科技大学 信息学院,20,2023/7/8,第2章 目录,1、任务的基本概念2、任务堆栈3、任务控制块及任务控制块链表4、任务就绪表及任务调度5、任务的创建6、任务的挂起和恢复7、其他任务管理函数8、uC/OS-II的初始化和任务的启动
13、,山东科技大学 信息学院,21,2023/7/8,2.3 任务控制块及任务控制块链表,任务控制块(TCB)-任务在系统中的身份证,TCB-uC/OS-II 中用于记录任务信息(任务堆栈指针、任务当前状态、任务优先级别等)的数据结构。uC/OS-II 将系统中的所有 TCB 构成两个链表(OSTCBList、OSTCBFreeList)进行任务管理。,空任务控制块链表-未被分配的 TCB 链 OSTCBFreeList。任务控制块链表-已分配的 TCB 链 OSTCBList。,山东科技大学 信息学院,22,2023/7/8,2.3 任务控制块及任务控制块链表,任务控制块(TCB)的结构,任务控
14、制块结构的主要成员typedef struct os_tcb struct os_tcb*OSTCBNext;/指向下一个TCB的指针 struct os_tcb*OSTCBPrev;/指向前一个TCB的指针 OS_STK*OSTCBStkPtr;/指向任务堆栈栈顶的指针 INT16U OSTCBDly;/任务等待时间 INT8U OSTCBStat;/任务的当前状态标志 INT8U OSTCBPrio;/任务的优先级别 OS_TCB;,山东科技大学 信息学院,23,2023/7/8,2.3 任务控制块及任务控制块链表,任务控制块链表,空任务控制块链表(OSTCBFreeList)任务控制块链
15、表(OSTCBList),-uC/OS-II 用两个链表来管理 TCB,山东科技大学 信息学院,24,2023/7/8,2.3 任务控制块及任务控制块链表,任务控制块链表,空任务块链表是在 uC/OS-II 初始化(OSInit())时系统自建的,用户可依据目标系统的实际需求,设定其链表长度。OS_CFG.H 文件中的宏常数 OS_MAX_TASKS-用于定义最大用户任务数。UCOS_II.H 文件中的宏常数 OS_N_SYS_TASKS-用于约定系统任务数,其值固定为 2。,当应用程序调用函数OSTaskCreate()创建一个任务时,这个函数会调用系统函数OSTCBInit()来为任务控制
16、块进行初始化。这个函数首先为被创建任务从空任务控制块链表获取一个任务控制块,然后用任务的属性对任务控制块各个成员进行赋值,最后再把这个任务控制块链入到任务控制块链表的头部。,当进行系统初始化时,初始化函数会按用户提供的任务数为系统创建具有相应数量的任务控制块并把它们链接为一个链表。由于这些任务控制块还没有对应的任务,故这个链表叫做空任务块链表。即相当于是一些空白的身份证。,山东科技大学 信息学院,25,2023/7/8,任务控制块链表,空任务控制块链表,山东科技大学 信息学院,26,2023/7/8,uC/OS-II 中提供了系统函数 OSTaskDel(),用于删除一个任务-实质就是将该任务
17、的TCB从“任务控制块列表”移到了“空任务控制块列表”。,2.3 任务控制块及任务控制块链表,任务控制块就相当于是一个任务的身份证,没有任务控制块的任务是不能被系统承认和管理。,任务控制块链表,山东科技大学 信息学院,27,2023/7/8,2.3 任务控制块及任务控制块链表,任务控制块链表其他相关系统管理变量,OSTCBPrioTbl:OS_TCB*数据类型的数组,以 Prio 为下标存放已使能的 TCB 指针。用于加速 TCB 的访问。OSTCBCur:全局系统变量,指向当前正在运行的任务的 TCB。,OSTCBFreeList、OSTCBListOSTCBTbl-OSInit()建立的任
18、务控制块数组OSTCBPrioTbl-任务控制块优先级数组OSTCBCur,山东科技大学 信息学院,28,2023/7/8,第2章 目录,1、任务的基本概念2、任务堆栈3、任务控制块及任务控制块链表4、任务就绪表及任务调度5、任务的创建6、任务的挂起和恢复7、其他任务管理函数8、uC/OS-II的初始化和任务的启动,山东科技大学 信息学院,29,2023/7/8,补充:多任务 OS-的基本工作方式,山东科技大学 信息学院,30,2023/7/8,什么是多任务系统,简单地说,就是能用一个处理器并发(注意,不是同时!)地运行多个程序的计算机管理系统。,并发:由同一个处理器轮换地运行多个程序。或者说
19、是由多个程序轮班地占用处理器这个资源。且在占用这个资源期间,并不一定能够把程序运行完毕。,并发过程示意图,处理器如何进行程序的切换?,山东科技大学 信息学院,31,2023/7/8,程序的切换(两句话),处理器是个傻瓜,PC让它干啥,它就干啥。,PC是个指路器,它指向哪儿,处理器就去哪儿。,从此可以知道,哪个程序占有了PC,哪个程序就占有了处理器。哪个人占有了一个姑娘的芳心,哪个人就,深刻地理解PC是理解系统进行程序切换动作的关键。,山东科技大学 信息学院,32,2023/7/8,如何操作PC,指令:不同的计算机类型的指令是不同的。,数据传送指令子程序返回指令(由堆栈弹出)中断、中断返回指令(
20、由堆栈弹出),山东科技大学 信息学院,33,2023/7/8,小结,系统是通过把待运行程序的地址赋予程序计数器PC来实现程序的切换的。,山东科技大学 信息学院,34,2023/7/8,任务代码,任务堆栈,内存,处理器,任务运行时与 处理器之间的关系,处理器通过两个指针寄存器(PC和SP)来与任务代码和任务堆栈建立联系并运行它,寄存器组,运行环境包括了两部分:处理器中的运行环境和内存中的运行环境,山东科技大学 信息学院,35,2023/7/8,处理器,多任务时的问题,?,当有多个任务时,处理器中的运行环境应该怎么办?,寄存器组,程序运行环境,山东科技大学 信息学院,36,2023/7/8,多任务
21、时任务与处理器之间关系的处理,程序,在内存中为每个任务创建一个虚拟的处理器(处理器部分的运行环境,由操作系统的调度器按某种规则来进行这两个复制工作,寄存器组,寄存器组,也就是说,任务的切换是任务运行环境的切换,山东科技大学 信息学院,37,2023/7/8,虚拟处理器,虚拟处理器应该存储的主要信息:1。程序的断点地址(PC)2。任务堆栈指针(SP)3。程序状态字寄存器(PSW)4。通用寄存器内容5。函数调用信息(已存在于堆栈),这些内容通常保存在任务堆栈中,这些内容也常叫做任务的上下文。,其实,程序切换的关键是把程序的私有堆栈指针赋予处理器的堆栈指针SP,实质上系统是通过SP的切换来实现程序的
22、切换的。,要建立一个概念:具有控制块的程序才是一个可以被系统所运行的任务。程序代码、私有堆栈、任务控制块 是任务的三要件。任务控制块提供了运行环境的存储位置。,山东科技大学 信息学院,38,2023/7/8,2.4 任务就绪表及任务调度,多任务操作系统的核心工作就是任务调度。所谓调度,就是通过一个算法在多个任务中确定该运行的任务,做这项工作的函数就叫做调度器。C/OS_II进行任务调度的思想是“近似地每时每刻总是让优先级最高的就绪任务处于运行状态”。为了保证这一点,它在系统或用户任务调用系统函数及执行中断服务程序结束时总是调用调度器,来确定应该运行的任务并运行它。,C/OS_II进行任务调度的
23、依据就是任务就绪表,山东科技大学 信息学院,39,2023/7/8,2.4 任务就绪表及任务调度,任务就绪表的结构,为了能够使系统清楚地知道,系统中哪些任务已经就绪,哪些还没有就绪,C/OS_II 在 RAM中设立了一个记录表,系统中的每个任务都在这个表中占据一 Bit 的位置,并用这个位置的状态(1或者0)来表示任务是否处于就绪状态,这个表就叫做任务就绪状态表,简称叫任务就绪表-一个 INT8U 的数组 OSRdyTbl 充当,最多8个元素,可以标示64个任务。,山东科技大学 信息学院,40,2023/7/8,就是一个二维数组OSRdyTbl,山东科技大学 信息学院,41,2023/7/8,
24、为加快访问任务就绪表的速度,系统定义了一个变量OSRdyGrp来表明就绪表每行中是否存在就绪任务。,OSRdyTbl,1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0,1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0,1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0,1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0,1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0,1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0,1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0,1/0 1/0 1/0 1/0 1
25、/0 1/0 1/0 1/0,OSRdyGrp,D7 D6 D5 D4 D3 D2 D1 D0,1/0 1/0 1/0 1/0 1/0 1/0 1/0 1/0,任务就绪表的示意图,0,1,2,3,4,5,6,7,x,y,0,1,2,3,4,5,6,7,山东科技大学 信息学院,43,2023/7/8,2.4 任务就绪表及任务调度,任务优先级数据结构分析,uC/OS-II 最多管理64个任务,Prio值域:0 63,对应的二进制数 000,000 111,111(6bit),OSRdyGrp(任务组就绪变量)8 bit,任务就续数组元素 OSRdyTbl 也是8bit。prio.D5:3-对应 O
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RTOSuCOS II 原理 应用
链接地址:https://www.31ppt.com/p-5446992.html