RTOS介绍.ppt_第1页
RTOS介绍.ppt_第2页
RTOS介绍.ppt_第3页
RTOS介绍.ppt_第4页
RTOS介绍.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

RTOS介绍,嵌入式软件开发入门知识,概要,一、什么是RTOS二、RTOS的功能、特性三、为什么要使用RTOS四、RTOS在UPS中的应用1.系统中的位置2.各系统层次介绍五、RTOS举例根据应用裁减的uCOS-II六、使用RTOS后的应用层七、总结,一、什么是RTOS,RTOS是实时多任务操作系统Real-TimeOperationSystem的缩写RTOS是一个程序内核典型的单片机程序在程序指针复位后,首先进行堆栈、中断、中断向量、定时器、串行口等接口设置、初始化数据存储区和显示内容,然后就来到了一个监测、等待或空循环,在这个循环中,CPU可以监视外设、响应中断或用户输入。这段主程序可以看作是一个内核,内核负责系统的初始化和开放、调度其它任务,相当于C语言中的主函数。RTOS就是这样的一个标准内核,包括了各种片上外设初始化和数据结构的格式化,不必、也不推荐用户再对硬件设备和资源进行直接操作,所有的硬件设置和资源访问都要通过RTOS核心。硬件这样屏蔽起来以后,用户不必清楚硬件系统的每一个细节就可以进行开发,这样就减少了开发前的学习量。一般来说,对硬件的直接访问越少,系统的可靠性越高。RTOS是一个经过测试的内核,与一般用户自行编写的主程序内核相比,更规范,效率和可靠性更高。另外,高效率地进行多任务支持是RTOS设计从始至终的一条主线,采用RTOS管理系统可以统一协调各个任务,优化CPU时间和系统资源的分配,使之不空闲、不拥塞。针对某种具体应用,精细推敲的应用程序不采用RTOS可能比采用RTOS能达到更高的效率;但是对于大多数一般用户和新手而言,采用RTOS是可以提高资源利用率的,尤其是在片上资源不断增长、产品可靠性和进入市场时间更重要的今天。,二、RTOS的功能、特性,(1)更加面向硬件系统,而不是操作者(2)实时性(3)多任务(4)不同的典型外设驱动支持(5)高可靠性,三、为什么要使用RTOS,随着High-endCPU处理事情的日益增加,CPU的利用率的提高已十分必要,引入RTOS能显著提高CPU的利用效率;C语言已经在程序开发中得到广泛的应用,RTOS的引入,可使模块化程度更高,移植性更好,程序更易于维护;随着CPU速度的提高,MemorySize的扩容,CPUHardwareFunction的增加,为RTOS应用提供了条件。Kernel设计达到以下要求:1、提高CPU的利用效率2、增强程序的模块化程度3、增强程序的可移植性,减短应用程序的开发周期4、增强程序的可维护性以及可扩充性,四、RTOS在UPS中的应用,1.RTOSkernel在程序系统中的位置,四、RTOS在UPS中的应用,2、各层介绍2.1硬件层(黄色部分)最底层是硬件层,由对CPU本身提供的寄存器进行操作来实现对各个功能模块的操作。包括DSP/MCU的各个功能模块:EVENTMANAGESCI,SPI,CANI/OPORTSADC2.2硬件抽象层(褐色部分)这一层通过对CPU提供的寄存器进行操作,并将底层获得的数据抽象出来给给更高层次使用,并且通过宏的方式,使更高层的程序与底层代码无关,增强移植性。希望能够得到一组通用的,与CPU无关的,对硬件操作的宏(MACRO)。举例:以TMS320LF2407A为例1、io资源#definehoInvRelayPBDATDIR.BIT.IOPB62、ADC#definemStartAD()ADCTRL2.BIT.SOC_SEQ1=1#definemResetAD()ADCTRL2.BIT.RST_SEQ1=1,四、RTOS在UPS中的应用,2.3DeviceDriver层这一层主要是在各个中断中实现,通过调用硬件抽象层的宏(MACRO),来获得与低层硬件无关的数据,提供给任务级使用。由于资源的限制,不需要使用统一的接口来控制所有的I/0及外设,对每一种设备采用其各自的宏处理。例如,从rs232接收寄存器中提取数据并存入接收buffer中;通过宏的形式来使inveter中的代码与硬件不相关。2.4面向控制层(蓝色部分)由于在ups系统中,控制部分占着最重要的作用,所以将这一部分单独拿出来,它的位置应该和kernel的位置是对等的,它不受kernel的约束,这一部分是dsp中运算量最密集的部分,最少的代码,占用了最多的时间,需要用汇编编写。这部分的主要内容是inverter控制部分和pfc控制部分。它们相对和其他部分独立,通过几个简单的接口和其余部分交互。控制层占用了大部分的CPU资源,程序执行时间要尽可能短,必要时可用汇编(Assembly)编写。,四、RTOS在UPS中的应用,2.5Kernel层(粉红色部分)Kernel层通过提供特定的系统服务,来实现对任务的调度以及切换,实现任务之间的同步与通信。主要有以下三部分组成:任务的建立和调度任务之间的通信和同步Timer结构以及时间管理2.6任务级(红色部分)主要通过devicedriver层的数据以及其他任务的信号来控制UPS的时序、各个模拟量的检测。这一层是面对UPS,面对客户的应用层。,五、RTOS举例根据应用裁减的uCOS-II,一、文件视图,第一部分、与处理器及用户设定有关的部分在目录kernelports下由四个文件构成,一、OS_CPU.h:主要定义了与处理器有关的基本变量类型,以及与处理器有关的宏二、OS_Config.h:主要定义了用户的一些设置,以及一些开关量三、OS_CPU.C:与处理器系统有关的C函数,包括以下函数OS_STK*OSTaskStkInit(void(*task)(void),OS_STK*ptos)主要对任务堆栈进行初始化,模仿编译器在现场切换时的动作,初始化任务堆栈。四、OS_CPU_A.ASM:需要用汇编语言编写的函数。有以下三个:1、OSStartHighRdy():启动当前最高优先级的旧序任务。2、OSCtxSw():任务级的任务切换3、OSIntCtxSw():中断级的任务切换,五、RTOS举例根据应用裁减的uCOS-II,第二部分、与CPU无关的部分在目录kernelsource下,由5个文件组成:一、OS_HEAD.h:常量、函数的声明以及变量的定义二、OS_CORE.C:定义了系统内部函数,不可以被用户调用,有以下几个函数:1、INTOSOSFindHighPrio(void)找出当前最高就绪的任务的优先级,并返回。2、voidOSSched(void)任务级调度函数,找出最高优先级的就绪任务并切换。3、voidOSInitRdyList(void)初始化任务调度的相关变量,将就绪任务列表清空。4、voidOSInitSys(void)初始化一些系统的变量5、voidOSInitTCBList(void)初始化TCB列表6、voidOSInitTaskIdle(void)创建OSTaskIdle7、voidOSTaskIdle(void)TaskIdle任务三、OS_SHELL.C:定义以下四个函数:1、voidOSInit(void)系统初始化函数2、voidOSTaskCreate(void(*task)(void),INTOSstksize,INTOSprio)创建一个任务3、voidOSStart(void)启动多任务调度,创建任务后,找出最高优先级任务,并且换到该任务执行。4、voidOSIntExit(void)中断退出函数四、OS_EVENT.C:事件管理的函数:1、TASK_EVENTOSEventPend(void)有挂起的等待一个事件2、TASK_EVENTOSEventGet(void)无挂起的等待一个事件3、voidOSEventSend(INTOSprio,INTOSEventId)发送一个事件给优先级prio的任务,并将改任务置就绪,该函数只能在任务级调用。4、voidOSISREventSend(INTOSprio,INTOSEventId)发送一个事件给优先级prio的任务,并将改任务置就绪,该函数只能在中断中调用。五、OS_TIMER.C:时间管理的函数voidOSTimerTick(void)时钟节拍服务函数,五、RTOS举例根据应用裁减的uCOS-II,二、功能组织视图,第三部分、可调用的宏列表kernelportsOS_CPU.h:1、#defineOS_ENTER_CRITICAL()asm(SETCINTM)2、#defineOS_EXIT_CRITICAL()asm(CLRCINTM)kernelsourceOS_HEAD.h:1、#ifOS_TASK_IDLE_EN0#defineOSGetCPUTimeFree()CPUFREE#endif2、#defineOSTimerStart(prio,cnt,period)OSTCBTblprio.TimerCnt=cnt;OSTCBTblprio.TimerPeriod=period3、#defineOSTimerStop(prio)OSTCBTblprio.TimerPeriod=0详细的说明请参见:说明书7宏说明第四部分、可调用的函数列表OS_SHELL.C:1、voidOSInit(void)2、voidOSTaskCreate(void(*task)(void),INTOSstksize,INTOSprio)3、voidOSStart(void)4、voidOSIntExit(void)OS_EVENT.C:1、TASK_EVENTOSEventPend(void)2、TASK_EVENTOSEventGet(void)3、voidOSEventSend(INTOSprio,INTOSEventId)4、voidOSISREventSend(INTOSprio,INTOSEventId)OS_TIMER.C:voidOSTimerTick(void),2019/12/13,13,可编辑,五、RTOS举例根据应用裁减的uCOS-II,数据类型介绍为增强移植型,定义以下的数据类型(OS_CPU.h)typedefunsignedcharBOOLEAN;typedefunsignedcharINT8U;typedefcharINT8S;typedefunsignedintINTOS;typedefunsignedintINT16U;typedefintINT16S;typedefunsignedlongINT32U;typedeflongINT32S;#defineOS_STKINTOSU表示无符号数,S表示有符号数INTOS数据类型是系统最小能够处理的数据类型,五、RTOS举例根据应用裁减的uCOS-II,数据结构介绍,typedefstructOS_STK*OSTCBStkPtr;/栈顶指针;INT16UTimerPeriod;/timer周期;INT16UTimerCnt;/timer计数器;TASK_EVENTOSEvent;/任务事件Event.OS_TCB;,1、OS_TCBOSTCBTblOS_LOWEST_PRIO+1;TCB列表2、INTOSOSPrioHighRdy;当前就绪的最高优先级3、INTOSOSPrioCur;当前任务优先级4、OS_TCB*OSTCBHighRdy;指向最高优先级就绪任务TCB的指针5、OS_TCB*OSTCBCur指向当前任务TCB的指针6、INTOSOSRdyMap就绪表,低位对应高优先级7、OS_STKOSSystemStkOS_MAX_STK_SIZE;系统任务栈区,其大小为OS_MAX_STK_SIZE,必须不小于所有任务任务栈大小之总和8、OS_STK*OSStkPtr;系统空闲堆栈区的头指针。9、#defineOS_STK_GROWTH_UP堆栈生长方向,为1表明堆栈为向上生长型,为0表示向下生长,五、RTOS举例根据应用裁减的uCOS-II,任务划分按照功能耦合的原则,大致可把应用程序划分成以下任务:Supervisor:控制整个ups的时序,状态转换Inverterjob:逆变电压、电流等的计算、侦测,锁相LineJob:市电电压、频率的计算和侦测,波形、零火线侦测LoadJob:负载计算和侦测BatterJob:负责Battery管理TempJob:温度侦测和计算BusJob:负责bus电压的计算和侦测。SciJob:Rs232通讯PannelJob:负责Switch,Display工作ParaJob:并联的控制,包括CAN通讯.SPIJob:负责两个DSP之间的通讯。,五、RTOS举例根据应用裁减的uCOS-II,任务管理和调度每个任务只有三种状态:挂起态、就绪态、执行态,任务堆栈每个任务有各自的独立任务堆栈,这样在采用C语言编写程序的时候才不会有任何的限制任务堆栈的大小由处理器、编译器架构以及任务级的函数嵌套n、中断嵌套m、传递的参数x、临时变量y共同决定任务栈大小=任务控制块每个任务通过一个任务控制块来管理自己的信息,任务控制块的结构如下:typedefos_tcbOS_STK*OSTCBStkPtr;INTOSOSTCBPrio;OS_MSGOSTCBMsg;INTOSOSTCBStat;OS_TCB;,五、RTOS举例根据应用裁减的uCOS-II,任务管理和调度,调度算法按照纯粹的优先级调度算法,在有事件发生的时候,调度优先级最高的就绪任务kernel最多支持16个任务,其中包含一个系统任务OSTaskIdle,切换流程,五、RTOS举例根据应用裁减的uCOS-II,时间划分和管理,大多数任务需要一个定时的机制来实现定时的调度,需要一个定时的中断来管理定时。每一个任务需要一个变量来记录timer的周期(OSTimerPeriod),还需要一个变量来记录计数值(OSTimerCnt)当timer的周期值为0时,表示这个timer是被禁止的。当计数器的值大于或等于周期值时,将计数器清零,并唤醒任务。唤醒的方式通过发送一个EventId=0的事件给任务的TCB。#defineEVENTID_TIMER0#defineOSTimerStart(prio,cnt,period)/设置周期和计数器OSTCBTblprio.TimerCnt=cnt;OSTCBTblprio.TimerPeriod=period#defineOSTimerDisable(prio)/禁止timerOSTCBTblprio.TimerPeriod=0,五、RTOS举例根据应用裁减的uCOS-II,系统开销,以共11个任务,11个消息队列,11个TIMER计算,不计算任务堆栈的大小。Flash:2kRAM:220个中断级任务切换

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论