欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    RTOSuCOS-II原理及应用.ppt

    • 资源ID:5446992       资源大小:1.46MB        全文页数:113页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    RTOSuCOS-II原理及应用.ppt

    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、中断服务程序的设计,山东科技大学 信息学院,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进行任务管理用的一个数据结构。任务代码-描述任务算法的程序编码。任务堆栈-任务的工作现场环境。,山东科技大学 信息学院,7,2023/7/8,2.1 任务的基本概念,山东科技大学 信息学院,8,2023/7/8,2.1 任务的基本概念,“宏观”上的多任务并发,实际上是用单 CPU 进行多任务处理,“微观”任何时刻,只能运行一个任务,存在CPU资源竞争-任务调度、任务现场。,各个任务在多任务系统中也随着环境条件的情况而具有不同的状态。任务状态划分也是多任务操作系统的管理手段。,山东科技大学 信息学院,9,2023/7/8,任务的状态及其转换,正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给别的任务而使任务进入等待状态。,任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫做任务的睡眠状态,系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,这时任务的状态叫做就绪状态。,处于就绪状态的任务如果经调度器判断获得了CPU的使用权,则任务就进入运行状态,一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态,山东科技大学 信息学院,10,2023/7/8,用户任务代码的一般结构,void MyTask(void*pdata)/任务的初始化 for(;)/超循环构成任务体 可被中断的用户代码片断;OS_ENTER_CRITICAL();/进入临界区(关中断)不可被中断的用户代码片断;OS_EXIT_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/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),/指向任务的指针 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 任务的基本概念,系统任务,空闲任务(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中使能该任务后,系统自动创建该任务,但在用户使用统计数据前必须调用系统函数 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 的值,约定本用户系统的最大优先级数。,山东科技大学 信息学院,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 任务堆栈,任务堆栈的创建,-在创建任务的同时,任务堆栈即被创建。,举例:#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 任务堆栈,任务堆栈的使用注意事项 _ 存在两种堆栈形式,递增堆栈-进栈操作向大地址方向发展。,递减堆栈-进栈操作向小地址方向发展。,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的初始化和任务的启动,山东科技大学 信息学院,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)的结构,任务控制块结构的主要成员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)任务控制块链表(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()来为任务控制块进行初始化。这个函数首先为被创建任务从空任务控制块链表获取一个任务控制块,然后用任务的属性对任务控制块各个成员进行赋值,最后再把这个任务控制块链入到任务控制块链表的头部。,当进行系统初始化时,初始化函数会按用户提供的任务数为系统创建具有相应数量的任务控制块并把它们链接为一个链表。由于这些任务控制块还没有对应的任务,故这个链表叫做空任务块链表。即相当于是一些空白的身份证。,山东科技大学 信息学院,25,2023/7/8,任务控制块链表,空任务控制块链表,山东科技大学 信息学院,26,2023/7/8,uC/OS-II 中提供了系统函数 OSTaskDel(),用于删除一个任务-实质就是将该任务的TCB从“任务控制块列表”移到了“空任务控制块列表”。,2.3 任务控制块及任务控制块链表,任务控制块就相当于是一个任务的身份证,没有任务控制块的任务是不能被系统承认和管理。,任务控制块链表,山东科技大学 信息学院,27,2023/7/8,2.3 任务控制块及任务控制块链表,任务控制块链表其他相关系统管理变量,OSTCBPrioTbl:OS_TCB*数据类型的数组,以 Prio 为下标存放已使能的 TCB 指针。用于加速 TCB 的访问。OSTCBCur:全局系统变量,指向当前正在运行的任务的 TCB。,OSTCBFreeList、OSTCBListOSTCBTbl-OSInit()建立的任务控制块数组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,什么是多任务系统,简单地说,就是能用一个处理器并发(注意,不是同时!)地运行多个程序的计算机管理系统。,并发:由同一个处理器轮换地运行多个程序。或者说是由多个程序轮班地占用处理器这个资源。且在占用这个资源期间,并不一定能够把程序运行完毕。,并发过程示意图,处理器如何进行程序的切换?,山东科技大学 信息学院,31,2023/7/8,程序的切换(两句话),处理器是个傻瓜,PC让它干啥,它就干啥。,PC是个指路器,它指向哪儿,处理器就去哪儿。,从此可以知道,哪个程序占有了PC,哪个程序就占有了处理器。哪个人占有了一个姑娘的芳心,哪个人就,深刻地理解PC是理解系统进行程序切换动作的关键。,山东科技大学 信息学院,32,2023/7/8,如何操作PC,指令:不同的计算机类型的指令是不同的。,数据传送指令子程序返回指令(由堆栈弹出)中断、中断返回指令(由堆栈弹出),山东科技大学 信息学院,33,2023/7/8,小结,系统是通过把待运行程序的地址赋予程序计数器PC来实现程序的切换的。,山东科技大学 信息学院,34,2023/7/8,任务代码,任务堆栈,内存,处理器,任务运行时与 处理器之间的关系,处理器通过两个指针寄存器(PC和SP)来与任务代码和任务堆栈建立联系并运行它,寄存器组,运行环境包括了两部分:处理器中的运行环境和内存中的运行环境,山东科技大学 信息学院,35,2023/7/8,处理器,多任务时的问题,?,当有多个任务时,处理器中的运行环境应该怎么办?,寄存器组,程序运行环境,山东科技大学 信息学院,36,2023/7/8,多任务时任务与处理器之间关系的处理,程序,在内存中为每个任务创建一个虚拟的处理器(处理器部分的运行环境,由操作系统的调度器按某种规则来进行这两个复制工作,寄存器组,寄存器组,也就是说,任务的切换是任务运行环境的切换,山东科技大学 信息学院,37,2023/7/8,虚拟处理器,虚拟处理器应该存储的主要信息:1。程序的断点地址(PC)2。任务堆栈指针(SP)3。程序状态字寄存器(PSW)4。通用寄存器内容5。函数调用信息(已存在于堆栈),这些内容通常保存在任务堆栈中,这些内容也常叫做任务的上下文。,其实,程序切换的关键是把程序的私有堆栈指针赋予处理器的堆栈指针SP,实质上系统是通过SP的切换来实现程序的切换的。,要建立一个概念:具有控制块的程序才是一个可以被系统所运行的任务。程序代码、私有堆栈、任务控制块 是任务的三要件。任务控制块提供了运行环境的存储位置。,山东科技大学 信息学院,38,2023/7/8,2.4 任务就绪表及任务调度,多任务操作系统的核心工作就是任务调度。所谓调度,就是通过一个算法在多个任务中确定该运行的任务,做这项工作的函数就叫做调度器。C/OS_II进行任务调度的思想是“近似地每时每刻总是让优先级最高的就绪任务处于运行状态”。为了保证这一点,它在系统或用户任务调用系统函数及执行中断服务程序结束时总是调用调度器,来确定应该运行的任务并运行它。,C/OS_II进行任务调度的依据就是任务就绪表,山东科技大学 信息学院,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,为加快访问任务就绪表的速度,系统定义了一个变量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/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-对应 OSRdyTbl 的下标(任务组号 x),也对应 OSRdyGrp 的位号。prio.D2:0-对应 OSRdyTbl 元素的位号(任务组号 y)备注:这就是 prio 的值和任务就绪表的映射关系。,山东科技大学 信息学院,44,2023/7/8,举例:prio=29 的任务在任务就续表中的表示。prio=29,其 8 进制表示为:35 O,山东科技大学 信息学院,45,2023/7/8,2.4 任务就绪表及任务调度,依照 prio“置/清”任务就绪表的操作,OSMapTbl0=0000,0001BOSMapTbl1=0000,0010BOSMapTbl2=0000,0100BOSMapTbl3=0000,1000BOSMapTbl4=0001,0000BOSMapTbl5=0010,0000BOSMapTbl6=0100,0000BOSMapTbl7=1000,0000B,在 uC/OS-II 中预定义了一个 OSMapTbl 数组:,山东科技大学 信息学院,46,2023/7/8,在程序中,可以用下面的代码把优先级别为 prio 的任务置为就绪状态:OSRdyGrp|=OSMapTblprio3;OSRdyTblprio3|=OSMapTblprio,山东科技大学 信息学院,47,2023/7/8,2.4 任务就绪表及任务调度,任务就绪表的操作,从 prio 到就绪表(OSRdyGrp、OSRdyTbl)的操作(进入/脱离-就绪状态)。从就绪表(OSRdyGrp、OSRdyTbl)的当前状态(位图)到最高优先级别 prio 的(任务)映射操作。,山东科技大学 信息学院,48,2023/7/8,2.4 任务就绪表及任务调度,依照任务就绪表的状态计算 prio 的操作,INT8U const OSUnMapTbl=0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,;备注:该数组共计256个元素,详见Book page32(亦称之为优先级判定表),在 uC/OS-II 中预定义了一个 OSUnMapTbl 数组:,山东科技大学 信息学院,49,2023/7/8,说明:在“按图索骥”算法中,对于所有的任务其“索骥”时间都是一致的。S1、以系统变量 OSRdyGrp 为下标,查 OSUnMapTbl 表,可得 y。S2、以 OSRdyTbl 的第 y 元素为下标,查 OSUnMapTbl 表,可得 x。,山东科技大学 信息学院,50,2023/7/8,用下代码可从任务就绪表中获取优先级别最高的就绪任务(prio):y=OSUnMapTalOSRdyGrp;/D5、D4、D3位x=OSUnMapTalOSRdyTbly;/D2、D1、D0位prio=(y3)+x;/优先级别或y=OSUnMapTblOSRdyGrp;prio=(INT8U)(y 3)+OSUnMapTblOSRdyTbly);,uC/OS-II 系统就是通过查找任务就绪表来获取待运行任务的优先级,即最高优先级的任务句柄,并进行任务调度。,山东科技大学 信息学院,51,2023/7/8,2.3 任务控制块及任务控制块链表_回顾,任务控制块链表其他相关系统管理变量,OSTCBPrioTbl:OS_TCB*数据类型的数组,以 Prio 为下标存放的 TCB 指针。用于加速 TCB 的访问。OSTCBCur:全局系统变量,指向当前正在运行的任务的 TCB。,山东科技大学 信息学院,52,2023/7/8,山东科技大学 信息学院,53,2023/7/8,2.4 任务就绪表及任务调度,任务的调度,任务切换-CPU 从运行某一任务转换到运行另一任务的过程。任务调度-按照某规则进行任务切换的工作过程。uC/OS-II 中的任务切换有“任务调度器”来完成。任务调度器的两项主要工作:从任务就绪表中查找优先级最高的就绪任务,实现任务切换。uC/OS-II 中有两个“任务调度器”:任务级的调度器(OS_Sched(),中断级的调度器(OSIntCtxSw()。,山东科技大学 信息学院,54,2023/7/8,2.4 任务就绪表及任务调度,任务的调度-调度器进行任务切换的两个工作步骤:,获得待运行任务 TCB 的指针断点数据切换,山东科技大学 信息学院,55,2023/7/8,2.4 任务就绪表及任务调度,获得待运行任务 TCB 的指针,获得了最高优先权就绪任务的“优先级”后(存放在全局系统变量 OSPrioHighRdy),用下指令即可获取该任务的 TCB,很简单:OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy,备注:OSTCBPrioTbl 是以优先权为下标的“任务指针数组”。,山东科技大学 信息学院,56,2023/7/8,2.3 任务控制块及任务控制块链表,任务控制块(TCB)的结构,任务控制块结构的主要成员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;,山东科技大学 信息学院,57,2023/7/8,2.4 任务就绪表及任务调度,任务切换宏 OS_TASK_SW(),其主要工作:完成当前任务到待运行任务的切换。,几个概念:,断点-当前任务被终止运行的位置。断点数据-断点处 CPU 的 PC、SP、PSW 以及通用寄存器(R0R12)的当前数据。,备注:程序“无缝”接续运行要求断点和断点数据(现场)的完全保护和恢复。,山东科技大学 信息学院,58,2023/7/8,任务切换中的断点数据处理,山东科技大学 信息学院,59,2023/7/8,2.4 任务就绪表及任务调度,任务切换宏 OS_TASK_SW()依次完成的7项工作:,被中止Task的断点指针(PC)入栈保护被中止Task通用寄存器入栈保护被中止Task系统管理 SP 该TCB-OSTCBStkPtr获得待运行任务TCB获得待运行任务 TCB-OSTCBStkPtr恢复待运行任务CPU现场(不包含PC)切换CPU.PC,使CPU接续运行待运行Task断点。,备注:Step1-中断方式保护;Step7-IRET指令恢复PC;汇编语言编程OS_TASK_SW()-直接操作寄存器,山东科技大学 信息学院,60,2023/7/8,第2章 目录,1、任务的基本概念2、任务堆栈3、任务控制块及任务控制块链表4、任务就绪表及任务调度5、任务的创建6、任务的挂起和恢复7、其他任务管理函数8、uC/OS-II的初始化和任务的启动,山东科技大学 信息学院,61,2023/7/8,2.5 任务的创建,任务的创建-创建该任务的TCB;在TCB中将该任务的Code、Stack关联起来和TCB共同构成Task。uC/OS-II提供两个系统函数创建Task:,OSTaskCreate()OSTaskCreateExt(),备注:关于这两个函数的使用很简单,不再重复。创建Task时,要求注意核算Task.Stack的大小和核定Task.Prio必须保证不重复。,山东科技大学 信息学院,62,2023/7/8,2.5 任务的创建,创建任务的一般方法,Task 可在主函数 main()中操作系统调度启动(OSStart())前创建。也可在Task中创建其他的Task,应用中习惯使用此结构。uC/OS-II要求:在OSStart()前,必须至少创建一个用户Task。,山东科技大学 信息学院,63,2023/7/8,2.5 任务的创建,创建任务的示意代码,void main()/主要是系统硬件初始化OSInit();/uC/OS-II 初始化/创建消息机制OSTaskCreate(Task_A,);/创建任务AOSStart();/启动多任务调动void Task_A(void*pdata)/任务A/安装并启动 uC/OS-II 系统时钟OSStatInit();/初始化统计任务(如果需要的话)/在此处可以创建其他任务For(;)/Task_A 任务体,山东科技大学 信息学院,64,2023/7/8,两个延时函数的原型:void OSTimeDly(INT16U ticks)/*ticks 是节拍数*/INT8U OSTimeDlyHMSM(INT8U hours,INT8U minutes,INT8U seconds,INT16U milli)/*绝对时间延时,位于OS_TIME.C*/备注:1、参数值域 hours255,minutes59,seconds59,milli9992、这两个系统函数定义在OS_TIME.C文件中。3、关于节拍周期定义在OS_CFG.H文件中。,补充:任务延时系统函数。,山东科技大学 信息学院,65,2023/7/8,实验1:,创建两个任务;Task_A-控制一位LED秒闪。Task_B-控制蜂鸣器每3S鸣1.5S。,1、学习创建任务操作编程;2、体验延时函数的使用;3、体验多任务系统设计基本方式;,实验目的:,山东科技大学 信息学院,66,2023/7/8,第2章 目录,1、任务的基本概念2、任务堆栈3、任务控制块及任务控制块链表4、任务就绪表及任务调度5、任务的创建6、任务的挂起和恢复7、其他任务管理函数8、uC/OS-II的初始化和任务的启动,山东科技大学 信息学院,67,2023/7/8,2.6 任务的挂起和恢复,所谓的挂起一个任务,就是暂停这个任务的调度。挂起任务的 TCB 还存在系统中,只是该任务的状态是“挂起”,对挂起态的任务uC/OS-II不再调度运行。挂起的任务恢复后即可参与uC/OS-II的任务调度。uC/OS-II中,可挂起除“空闲任务”(OSTaskIdel())外的任何任务。挂起/恢复使用系统函数OSTaskSuspend()/OSTaskResume()实现。,山东科技大学 信息学院,68,2023/7/8,2.6 任务的挂起和恢复,挂起任务函数原型,INT8U OSTaskSuspend(INT8U prio);,本函数的参数、返回值及含义:用优先级指定目标,挂起自身时使用OS_PRIO_SELFOS_NO_ERR-完成指定任务的挂起。OS_TASK_SUSPEND_IDEL-不能挂起空闲任务。OS_PRIO_INVALID-无效的任务(优先级)指定。OS_TASK_SUSPEND_PRIO-指定的任务不存在。,山东科技大学 信息学院,69,2023/7/8,2.6 任务的挂起和恢复,恢复任务函数原型,INT8U OSTaskResume(INT8U prio);,本函数的参数、返回值及含义:用优先级指定目标。OS_NO_ERR-完成指定任务的恢复。OS_TASK_RESUME_PRIO-优先级指定的任务不存在。OS_PRIO_INVALID-无效的任务(优先级)指定。OS_TASK_NO_SUSPEND-指定的任务不是挂起态。,山东科技大学 信息学院,70,2023/7/8,第2章 目录,1、任务的基本概念2、任务堆栈3、任务控制块及任务控制块链表4、任务就绪表及任务调度5、任务的创建6、任务的挂起和恢复7、其他任务管理函数8、uC/OS-II的初始化和任务的启动,山东科技大学 信息学院,71,2023/7/8,2.7 其他任务管理函数,修改任务优先级别函数原型,INT8U OSTaskChangePrio(INT8U oldprio,INT8U newprio);,函数说明:在任务运行时,修改任务的优先级。功能正确完成,函数返回 OS_NO_ERR。OS_PRIO_INVALID-指定的 prio 越界。OS_PRIO_EXIST-newprio 已在用。OS_PRIO_ERR-oldprio 不存在。,山东科技大学 信息学院,72,2023/7/8,实验2:,设计一个试验并完成:测试 OSTaskChangePrio()“任务挂起”系统函数应用特性。如果修改挂起任务的优先级会是什么结果;可否修改任务自身的优先级。,有目的地主动设计实验,验证推测,得到结论;,实验目的:,山东科技大学 信息学院,73,2023/7/8,2.7 其他任务管理函数,任务的删除函数原型,INT8U OSTaskDel(INT8U prio);,函数说明:使用 OS_PRIO_SELF 参数删除任务时是删除自身。功能正确完成,函数返回 OS_NO_ERR。删除一个任务实质上是删除该任务的TCB并归还到“空任务控制块链表”,释放堆栈空间,并不删除任务代码。,山东科技大学 信息学院,74,2023/7/8,2.7 其他任务管理函数,关于任务的删除,“任务A”在删除“任务B”时,A不能知道B的详细情况,可能会造成A已申请的资源从系统中永久的丢失-这不合理!正确的方法-Task_A 欲删除 Task_B 时,A 提出删除申请,B根据自身的情况处理后,删除自身。uC/OS-II 中的 TCB 含有一个成员 OSTCBDelReq 用于标示有其他任务申请删除它。使用系统函数 OSTaskDelReq()提出任务删除申请。ISR 中不允许删除任务。,山东科技大学 信息学院,75,2023/7/8,2.7 其他任务管理函数,OSTaskDelReq()系统函数原型:,INT8U OSTaskDelReq(INT8U prio);,优先级指定其他任务时的函数返回值说明:OS_TASK_IDEL_PRIO-申请删除空闲任务出错。OS_PRIO_INVALID-优先级指定出错。OS_TASK_NOT_EXIST-优先级指定的任务已不存在。OS_NO_ERR-删除申请成功。,特别说明:此函数的参数可以是“优先级”指定的其他任务,也可以是OS_PRIO_SELF 指定自身,后者用于查阅是否有其他任务申请删除本任务。,山东科技大学 信息学院,76,2023/7/8,2.7 其他任务管理函数,OSTaskDelReq()系统函数原型:,INT8U OSTaskDelReq(INT8U prio);,参数为 OS_PRIO_SELF 时的函数返回值说明:OS_TASK_DEL_REQ-有其他任务申请删除这个任务。,举例:Task_A(prio=10)删除 Task_B(prio=9),直到删除成功,Task_A才继续。,Void Task_A(void*pdata)/Task_A prio=10 while(OSTaskDelReq(9)!=OS_TASK_NOT_EXIST)/申请删除Task_B OS_TimeDly(10);/直到删除成功 Void Task_B(void*pdata)/Task_B prio=9 if(OSTaskDelReq(OS_PRIO_SELF)=OS_TASK_DEL_REQ)/有删除申请/释放私有资源 OSTaskDel(OS_PRIO_SELF);/删除自身 else;/任务B的其他代码,山东科技大学 信息学院,78,2023/7/8,实验3:,创建两个任务;Task_A-控制一位LED秒闪。Task_B-控制蜂鸣器每 3S 鸣 1.5S。LED闪烁10次后,停止蜂鸣。,1、学习任务的删除操作;2、体验多任务系统设计基本原理;,实验目的:,山东科技大学 信息学院,79,2023/7/8,第2章 目录,1、任务的基本概念2、任务堆栈3、任务控制块及任务控制块链表4、任务就绪表及任务调度5、任务的创建6、任务的挂起和恢复7、其他任务管理函数8、uC/OS-II的初始化和任务的启动,山东科技大学 信息学院,80,2023/7/8,2.8 uC/OS-II的初始化和任务的启动,uC/OS-II的初始化,在使用uC/OS-II之前,必须对其运行环境初始化。,void OSInit(viod);,用法举例:void main(void).OSInit();/*Initialize uC/OS-II*/./*Craete Task*/OSStart();/*Start Multitasking*/,OSInit()的主要工作:对 uC/OS-II 的所有全局变量和数据结构初始化。创建空间任务(OSTaskIdel()根据系统设置(OS_TASK_STAT_EN=1/0)启动统计任务。,山东科技大学 信息学院,81,2023/7/8,2.8 uC/OS-II的初始化和任务的启动,uC/OS-II的启动,主函数 main()调用了OSStart()之后,uC/OS-II 才开始任务调度管理。,void OSStart(viod);,用法举例:void main(void).OSInit();/*Initialize uC/OS-II*/./*Craete Task*/OSStart();/*Start Multitasking*/,山东科技大学 信息学院,82,2023/7/8,本章小结,Task 由 TCB、Task_Stack、Task_Code 三部分组成。uC/OS-II使用 TCB 对任务进行控制。Task_Stack 用于任务切换时私有现场保护。uC/OS-II 按任务优先级对任务进行调度。uC/OS-II 每调用一次API函数和中断返回都会进行一次任务调度。任务调度的周期和任务调度器自身的运行事件无关。任务的优先级(prio)也是任务的句柄。uC/OS-II 的初始化和启动。,山东科技大学 信息学院,83,2023/7/8,实验4:,基于 Smart 2200 Demo Board 的资源情况,设计一个试验,验证“任务优先级”对任务调度的影响。,1、有目的地主动设计实验,验证推

    注意事项

    本文(RTOSuCOS-II原理及应用.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开