RTOS介绍

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

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在程序系统中的位置KERNEL:TASKSCHEDULEANDINTERTASKCOMMUNICATIONHARDWARE:CPUI/OADCPWMCANSCISPITask1Realtimecontrolmodule:InverterPFCDevicedriverISRs:SCICANSPIintterupt;linezero,invzerointterrupt;ClockandtimerTask2Task4Task3Inter-taskcom:semormessagequeue(Event)Inter-taskcom:semormessagequeue(Event)Inter-taskcom:semormessagequeueInter-taskcom:semormessagequeueEventandinter-faceEventandinter-faceEventandinterfaceEventandinterfaceRegistersRegistersRegistersRegistersmacromacroMACROSDC-DC四、RTOS在UPS中的应用2、各层介绍2.1硬件层(黄色部分)最底层是硬件层,由对CPU本身提供的寄存器进行操作来实现对各个功能模块的操作。包括DSP/MCU的各个功能模块:EVENTMANAGESCI,SPI,CANI/OPORTSADC2.2硬件抽象层(褐色部分)这一层通过对CPU提供的寄存器进行操作,并将底层获得的数据抽象出来给给更高层次使用,并且通过宏的方式,使更高层的程序与底层代码无关,增强移植性。希望能够得到一组通用的,与CPU无关的,对硬件操作的宏(MACRO)。举例:以TMS320LF2407A为例1、io资源#definehoInvRelayPBDATDIR.BIT.IOPB62、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一、文件视图第一部分、与处理器及用户设定有关的部分在目录kernel\ports下由四个文件构成,一、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无关的部分在目录kernel\source下,由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二、功能组织视图第三部分、可调用的宏列表kernel\ports\OS_CPU.h:1、#defineOS_ENTER_CRITICAL()asm(SETCINTM)2、#defineOS_EXIT_CRITICAL()asm(CLRCINTM)kernel\source\OS_HEAD.h:1、#ifOS_TASK_IDLE_EN0#defineOSGetCPUTimeFree()CPUFREE#endif2、#defineOSTimerStart(prio,cnt,period)OSTCBTbl[prio].TimerCnt=cnt;OSTCBTbl[prio].TimerPeriod=period3、#defineOSTimerStop(prio)OSTCBTbl[prio].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)五、RTOS举例-根据应用裁减的uCOS-II数据类型介绍为增强移植型,定义以下的数据类型(OS_CPU.h)typedefunsignedcharBOOLEAN;typedefunsignedcharINT8U;typedefcharINT8S;typedefunsignedintINTOS;typedefunsignedintINT16U;typedefintINT16S;typedefunsignedlongINT32U;typedeflongINT32S;#defineOS_STKINTOSU表示无符号数,S表示有符号数INTOS数据类型是系统最小能够处理的数据类型五、RTOS举例-根据应用裁减的uCOS-II数据结构介绍typedefstruct{OS

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功