




已阅读5页,还剩102页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,嵌入式系统嵌入式实时操作系统C/OS-分析,2006年5月,2,主要内容,嵌入式操作系统C/OS-简介C/OS-内核结构C/OS-任务管理C/OS-时间管理C/OS-任务通信与同步,3,为什么需要操作系统,4,硬件抽象层的引入,嵌入式实时系统自底向上包含三个部分硬件环境嵌入式实时操作系统RTOS嵌入式实时应用程序由于嵌入式系统应用的硬件环境差异较大新增加的中间层位于操作系统和硬件之间,包含了系统中与硬件相关的大部分功能,隐蔽了底层硬件的多样性,5,嵌入式系统的体系结构,6,HAL简介,硬件抽象层(HAL)是体系结构相关的底层程序处理系统启动、硬件初始化以及中断与异常硬件抽象层对内核其它部分提供统一的调用接口HAL可以提供BSP规范,提供跨平台可移植性,7,硬件抽象层接口定义和代码设计特点,硬件抽象层具有与硬件密切相关性硬件抽象层具有与操作系统无关性接口定义的功能应包含硬件或系统所需硬件支持的所有功能接口定义简单明了,太多接口函数会增加软件模拟的复杂性具有可测性的接口设计有利于系统的软硬件测试和集成,8,HAL设计目标,支持多种的国际主流嵌入式芯片支持数字电视机顶盒、智能手机、数字化音视频、数字仪表等数字化产品中常见外设的驱动基于甚高端通讯设备的硬件抽象层,能够支持多CPU体系结构(SMP),以及基于网络元素NE的甚高端通讯设备基于智能手机的硬件抽象层,能够支持以IntelPCA体系结构为内核的智能手机、以IntelEIA体系结构为内核的智能手机,以及以Motorola的88000系列为内核的PDA基于IC卡的汇编级硬件抽象层,能够支持数字电视条件接收CA的8/16/32位CPUIC设计和机器码级汇编抽象层,9,通用操作系统和嵌入式(实时)操作系统,通用操作系统:Windows/NT/XP、Linux、UNIX等,用于PC机、服务器,嵌入式(实时)操作系统:用于嵌入式设备的操作系统,具有通用操作系统的基本特点,又具有系统实时性、硬件的相关依赖性、软件固态化以及应用的专用性等特点;嵌入式(实时)操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器Browser等;嵌入式(实时)操作系统的重要指标:实时性(中断响应时间、任务切换时间等)、尺寸(可裁剪性)、可扩展性(内核、中间件),10,嵌入式操作系统的发展,11,常见的嵌入式操作系统,实时嵌入式操作系统的种类繁多,大体上可分为两种,商用型和免费型。商用型的实操作系统功能稳定、可靠,有完善的技术支持和售后服务,但往往价格昂贵,如Vxworks、QNX、WinCE、PalmOS等。免费型的实时操作系统在价格方面具有优势,目前主要有Linux,C/OS是一种源码开放的商业RTOS,12,学习嵌入式操作系统,学习一种实时操作系统RTOS,如C/OS-,掌握实时系统的概念和设计方法嵌入式系统以应用为中心,要选择“适用”的操作系统嵌入式Linux自己尝试“写”RTOS,13,RTOS在嵌入式系统中的位置,嵌入式硬件平台,BSP,KERNEL,FS,TCP/IP,设备驱动,设备I/O,调试工具,其它组件,应用,RTOS,C/C+,14,主要内容,嵌入式操作系统C/OS-简介C/OS-内核结构C/OS-任务管理C/OS-时间管理C/OS-任务通信与同步,15,C/OS简介,1、C/OSMicroControllerOS,微控制器操作系统2、C/OS简介美国人JeanLabrosse1992年完成应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等1998年C/OS-II,目前的版本C/OS-IIV2.61,2.722000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中网站www.ucos-II.com(),16,公开源代码可移植性(Portable)绝大部分C/OS-II的源码是用移植性很强的ANSIC写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得C/OS-II便于移植到其他微处理器上。C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器、数字信号处理器(DSP)上运行。可固化(ROMable)C/OS-II是为嵌入式应用而设计的,这就意味着,只要用户有固化手段(C编译、连接、下载和固化),C/OS-II可以嵌入到用户的产品中成为产品的一部分。可裁剪(Scalable)可以只使用C/OS-II中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个C/OS-II调用,而另一个产品则使用了几乎所有C/OS-II的功能,这样可以减少产品中的C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。,C/OS的性能特点(一),17,占先式(Preemptive)多任务C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有56个任务可确定性全部C/OS-II的函数调用与服务的执行时间具有可确定性。任务栈每个任务有自己单独的栈,C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。系统服务C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断管理中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。稳定性与可靠性,C/OS的性能特点(二),18,C/OS-II图籍,描述了C/OS-II内部的工作原理随书的CD中包含了源代码工业界最清晰的源代码除英文版外,有中文和韩文版,Chinese,Korean,English,ISBN1-57820-103-9美国CMPBOOK,ISBN7-81077-290-2北京航空航天大学出版社,ISBN89-951540-5-5,19,C/OS-II的各种商业应用,全世界有数百种产品在应用:Avionics(航空电子设备)MedicalCellphonesRoutersandswitchesHigh-endaudioequipmentWashingmachinesanddryersUPS(UninterruptiblePowerSupplies)IndustrialcontrollersGPSNavigationSystemsMicrowaveRadiosInstrumentationPoint-of-saleterminals更多,20,C/OS-II提供的系统服务,信号量带互斥机制的信号量减少优先级倒置的问题事件标志消息信箱消息队列内存管理时钟管理任务管理,21,C/GUIandC/FS,C/GUI嵌入式的用户界面用ANSIC书写支持任何8,16,32-bitsCPU彩色,灰度等级或黑白显示代码尺寸小C/FS嵌入式的文件系统用ANSIC书写支持任何8,16,32-bitsCPU支持SMC,MMC,SD,CF,IDE,Flash,RAM其他介质,22,主要内容,嵌入式操作系统C/OS-简介C/OS-内核结构C/OS-任务管理C/OS-时间管理C/OS-任务通信与同步,23,C/OS-II的文件结构,24,内核结构任务管理时间管理任务之间通信与同步C/OS的移植,C/OS-II分析,25,当处理临界段代码时,须关中断,处理完毕后,再开中断关中断时间是实时内核最重要的指标之一。它影响用户系统对实时事件的相应特性。在实际应用中,关中断的时间很大程度上取决于微处理器的结构和编译器生成的代码质量微处理器通常具有关中断/开中断操作。C编译器须具有某种机制,能够在c中直接实现关中断/开中断操作C源代码中插入汇编语言的语句,易实现关中断/开中断操作关中断/开中断操作作为语言的扩展部分,直接从C语言中可以关中断/开中断,C/OS-II开关中断的方法,26,C/OS-II开关中断的方法(续1),C/OS-II定义了两个宏调用来开关中断:OS_ENTER_CRITICAL()(禁止中断的宏)OS_EXIT_CRITICAL()(启用中断的宏)通常成对出现上述宏定义取决于使用的微处理器。在文件OS_CPU.H有相应的宏定义在C/OS-II中,每种微处理器都有自己的OS_CPU.H文件,27,C/OS-II开关中断的方法(续2),.OS_ENTER_CRITICAL();/*C/OS-II临界段代码*/OS_EXIT_CRITICAL();.如果在所有挂起类(PEND)调用之前,如:调用OSTimeDel()(挂起时间)功能函数之前关中断,会出现什么现象?通常,调用C/OS-II功能函数时,中断总应当是开放的。,28,C/OS-II开关中断的方法(续3),OS_ENTER_CRITICAL()及OS_EXIT_CRITICAL()可以用3种不同的方法实现具体方法取决于用户打算移植到的处理器的性能及所用的C编译器用定义(#define)常数OS_CRITICAL_METHOD可以选择具体使用哪种方法该常数在与CPU类型有关的移植文件OS_CPU.H中定义,29,OS_CRITICAL_METHOD=1用最简单的方式来实现2个宏调用用处理器指令关中断,完成OS_ENTER_CRITICAL()用开中断指令完成OS_EXIT_CRITICAL()问题:如果调用C/OS-II功能函数时,中断是关掉的,则从C/OS-II函数返回时,中断就打开了若调用C/OS-II功能函数之前已将中断关掉,那么用户往往希望从C/OS-II函数返回时,中断仍然是关着的。这时,这种方法就不妥当。对特定的处理器,这种办法是唯一的选择,C/OS-II中采用了3种开关中断的方法,30,C/OS-II中采用了3种开关中断的方法(续1),OS_CRITICAL_METHOD=2在堆栈中保存中断的开/关状态,然后再关中断实现OS_ENTER_CRITICAL()时,先在堆栈中保存中断的开/关状态,然后再关中断实现OS_EXIT_CRITICAL()时,从堆栈中弹出原来中断的开/关状态利用这种机制,不论用户在调用C/OS-II功能函数之前中断是开或关,函数的进入和返回状态都得到了保护。即:调用前中断的开/关状态,在调用之后保持不变,31,C/OS-II中采用了3种开关中断的方法(续2),OS_CRITICAL_METHOD=3把当前处理器的状态字(PSW)保存在C函数的局部变量中(如OS_CPU_SR)关中断时保存,开中断时恢复,32,C/OS-II中采用了3种开关中断的方法(续3),VoidSome_uCOS_II_Service(arguments)OS_CPU_SRcpu_sr;cpu_sr=get_processor_psw();disable_interrupts();/*临界段代码*/set_processor_psw(cpu_sr);,33,任务(task),典型的任务:一个无限循环voidmytask(void*pdata)for(;)dosomething;waiting;dosomething;,34,TaskStructure,35,任务完成后的自我删除,36,C/OSII中的任务,C/OSII2.5版本支持64个任务,每个任务一个特定的优先级。数字越小,优先级越高系统总是运行进入就绪态优先级最高的任务任务优先级号就是任务编号(ID).优先级号也被一些内核功能函数调用。如OsTaskChangePrio()及OsTaskDel().系统占用了8个任务,保留优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO-0即:建议不使用上述最高4个和最低4个优先级,用户任务仍可达56个,37,任务状态,在任一给定的时刻,任务的状态一定是以下五种状态之一:睡眠态(taskdormant)就绪态(taskready)运行态(taskrunning)等待状态(taskwaiting)中断服务态(ISRrunning),38,睡眠态(taskdormant),指任务驻留在程序空间(ROM或RAM),还没有交给系统来管理的状态任务交给系统通过调用以下函数之一来实现:OSTaskCreate()OSTaskCreateExt()告知系统:任务的起始地址任务建立时,用户给任务赋予的优先级任务要使用的栈空间大小等,39,就绪态(taskready),任务一旦创建就进入就绪态,准备运行任务的创建可以是在多任务开始之前,也可以动态地由一个运行着的任务创建若刚创建任务的优先级高于创建它的任务的优先级,它将立即获得cpu的使用权任务可通过OSTaskDel()返回睡眠态;或调用该函数让另一个任务进入睡眠态,40,运行态(taskrunning),就绪的任务只有当所有优先级高于它的任务都转为等待状态,或被删除后,才能进入运行态任何时刻只有一个任务处于运行态调用OSStart()可以启动多任务。该函数只能在启动时调用一次OSStart()运行用户初始化代码中已经建立的、进入就绪态的优先级最高的任务,41,等待状态(taskwaiting),正在运行的任务可以通过下面的调用进入等待状态。延迟时间到,立即强制执行任务切换,让下一个优先级最高、并进入就绪态的任务执行。OSTimeDly()OSTimeDlyHMSM()等待时间过去后,系统服务(内部)函数OSTimeTick()使延迟了的任务进入就绪态用户无需在应用程序代码中调用这个函数,42,等待状态(续),正在运行的任务可能需要通过调用函数等待某一事件发生。如果该事件并未发生,任务就进入等待状态OSFlagPend();OSMutexPend()OSSemPend();OSMboxPend()当事件发生或等待超时,被挂起的任务就进入就绪态,43,中断服务态(ISRrunning),正在执行的任务是可以被中断的,除非该任务将中断关闭,或系统将中断关闭。被中断的任务便进入了中断服务态响应中断后,正在运行的任务被挂起,中断服务子程序控制了CPU的使用权,44,中断服务态(ISRrunning),中断服务子程序可能会报告一个或多个事件的发生,而使一个或多个任务进入就绪态上述情况下,从中断服务子程序返回之前,C/OSII要判定:被中断的任务是否还是就绪态任务中优先级最高的如果中断服务子程序使另一个优先级更高的任务进入了就绪态,则新进入就绪态的这个优先级更高的任务将得以运行;否则,原来被中断了的任务将继续运行。,45,任务状态,当所有的任务都在等待时间发生或等待延迟时间结束时,C/OSII执行被称为空闲任务(IdleTask)的内部函数,即:OSTaskIdle(),46,任务状态,任务的CPU使用权被剥夺,中断,恢复任务,47,任务控制块(TCB),任务控制块OS_TCB是一个数据结构,保存该任务的相关参数,包括任务堆栈指针、状态、优先级、任务表位置、任务链表指针等所有的任务控制块分为两条链表:空闲链表使用链表当任务的CPU使用权被剥夺时,系统用它来保存该任务的状态全部驻留在RAM中,48,49,50,空任务列表,所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl中系统初始化时,所有任务控制块被链接成空任务控制块的单向链表任务建立后,空任务控制块指针OSTCBFreeList指向的任务控制块就赋给了该任务,然后OSTCBFreeList的值调整为指向链表中的下一个空任务控制块任务一旦被删除,任务控制块就还给空任务链表,51,任务级的任务调度-OSSched,C/OS是占先式实时多任务内核,优先级最高的任务一旦准备就绪,则拥有CPU的所有权即开始投入运行。C/OS中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的。因此,任务调度就是:查找准备就绪的最高优先级的任务并进行上下文切换。C/OS任务调度所花的时间为常数,与应用程序中建立的任务数无关。,52,就绪表,根据就绪表确定最高优先级两个关键:优先级数分解为高三位和低三位分别确定高优先级有着小的优先级号,53,根据优先级找到任务在就绪任务表中的位置,每个就绪的任务都放入就绪表中(readylist)中,就绪表用两个变量表示:OSRdyGrp、OSRdyTbl,54,采用查表法确定高优先级任务,查表法具有确定的时间,增加了系统的可预测性,C/OSII中所有的系统调用时间都是确定的High3=OSUnMapTblOSRdyGrp;Low3=OSUnMapTblOSRdyTblHigh3;Prio=(High3OSTCBStkPtr=SP;调用OSTimeTick();发出中断设备的中断;重新允许中断(可选用)调用OSIntExit();恢复处理器寄存器的值;执行中断返回指令;,72,时钟节拍函数OSTimeTick(),73,空闲任务OSTaskIdle(),74,C/OS-II初始化,首先调用系统初始化函数OSIint()。OSIint()初始化C/OS-所有的变量和数据结构(见OS_CORE.C)。OSInit()建立空闲任务idletask,这个任务总是处于就绪态的。空闲任务OSTaskIdle()的优先级总是设成最低,即OS_LOWEST_PRIO。如果统计任务允许OS_TASK_STAT_EN和任务建立扩展允许都设为1,则OSInit()还得建立统计任务OSTaskStat()并且让其进入就绪态。OSTaskStat的优先级总是设为OS_LOWEST_PRIO-1空闲和统计任务的任务控制块(OS_TCBs)是用双向链表链接在一起的。OSTCBList指向这个链表的起始处。当建立一个任务时,这个任务总是被放在这个链表的起始处。,75,调用OSInit()之后的数据结构,76,空闲缓冲区,77,C/OS-的启动,78,启动多任务,79,关于OSStartHighRdy,voidOSStartHighRdy(void)调用用户定义的OSTaskSwHook();OSRunning=TRUE;得到将要恢复运行任务的堆栈指针:Stackpointer=OSTCBHighRdyOSTCBStkPtr从新任务堆栈中恢复处理器的所有寄存器;执行中断返回指令;,80,调用OSStart()之后的数据结构,81,主要内容,嵌入式操作系统C/OS-简介C/OS-内核结构C/OS-任务管理C/OS-时间管理C/OS-任务通信与同步,82,建立任务,UseoneoftwoservicesOSTaskCreate()OSTaskCreateExt(),83,建立任务,OSTaskCreate(),84,85,堆栈检验,OSTaskStkChk()删除任务,OSTaskDel()请求删除任务,OSTaskDelReq()改变任务的优先级,OSTaskChangePrio()挂起任务,OSTaskSuspend()恢复任务,OSTaskResume(),其它相关函数,86,主要内容,嵌入式操作系统C/OS-简介C/OS-内核结构C/OS-任务管理C/OS-时间管理C/OS-任务通信与同步,87,时间管理,Fiveservices:OSTimeDLY()OSTimeDLYHMSM()OSTimeDlyResmue()OStimeGet()OSTimeSet(),88,OSTimeDly(),89,OSTimeDlyHMSM(),90,主要内容,嵌入式操作系统C/OS-简介C/OS-内核结构C/OS-任务管理C/OS-时间管理C/OS-任务通信与同步,91,任务间通信手段,C/OS中,采用多种方法保护任务之间的共享数据和提供任务之间的通信。提供OS_ENTER_CRITICAL和OS_EXIT_CRITICAL来对临界资源进行保护OSSchedLock()禁止调度保护任务级的共享资源。提供了经典操作系统任务间通信方法:信号量、邮箱、消息队列,事件标志。,92,事件控制块ECB,程序4.5ECB的结构如下-typedefstructvoid*OSEventPtr;/*指向消息或消息队列的指针*/INT8UOSEventTblOS_EVENT_TBL_SIZE;/*等待任务列表*/INT16UOSEventCnt;/*计数器(当事件是信号量时)*/INT8UOSEventType;/*事件类型:信号量、邮箱等*/INT8UOSEventGrp;/*等待任务组*/OS_EVENT;与TCB类似的结构,使用两个链表,空闲链表与使用链表,所有的通信信号都被看成是事件(event),一个称为事件控制块(ECB,EventControlBlock)的数据结构来表征每一个具体事件,ECB的结构如下,93,事件的等待任务列表,94,空闲事件控制块链表,95,事件控制块TCB的操作,对事件控制块进行的操作包括:初始化一个事件控制块OS_EventWaitListInit();使一个任务进入就绪态OS_EventTaskRdy();使一个任务进入等待某事件的状态OS_EventTaskWait();因为等待超时而使一个任务进入就绪态OS_EventTO()。,96,信号量semaphore,信号量在多任务系统中用于:控制共享资源的使用权、标志事件的发生、使两个任务的行为同步。uC/OS中信号量由两部分组成:信号量的计数值和等待该信号任务的等待任务表。信号量的计数值可以为二进制,也可以是其他整数。系统通过OSSemPend()和OSSemPost()来支持信号量的两种原子操作P()和V()。P()操作减少信号量的值,如果新的信号量的值不大于0,则操作阻塞;V()操作增加信号量的值。,97,任务、中断服务子程序和信号量之间的关系,OSSemDel(),98,信号量操作,C/OS-II提供了6个对信号量进行操作的函数。它们是:OSSemCreate():建立一个信号量OSSemDel():删除一个信号量OSSemPend():等待一个信号量OSSemPost():发出一个信号量OSSemAccept():无等待地请求一个信号量当一个任务请求一个信号量时,如果该信号量暂时无效,也可以让该任务简单地返回,而不是进入睡眠等待状态OSSemQuery()函数:查询一个信号量的当前状态,99,邮箱
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年化学知识试题及答案
- 广东省韶关市2025年-2026年小学六年级数学期末考试(下学期)试卷及答案
- 新疆昌吉回族自治州2025年-2026年小学六年级数学课后作业(上,下学期)试卷及答案
- 2025年木片、木粒加工产品项目提案报告
- 水生植被养护方案范本
- 2025年云计算领域动态与高级面试题解答
- 2025年乡镇文化市场协管员招聘考试必-备知识点与模拟题
- 2025年中国海油南美公司招聘面试攻略与模拟题实战演练
- 2025年AI编程师认证考试必-备模拟题及答案解析
- 2025年中央政府绩效考核体系解析与应用实践指南
- 变压器维修简单合同书范本
- 北京版小学一至六年级英语词汇
- 2024年新青岛版(六三制)五年级上册科学全册知识点(新修改)
- 《中国近现代史纲要》课件-第一章
- 小学三年级数学口算天天练A4纸直接打印
- TSG+23-2021气瓶安全技术规程
- 酒店代运营合同范本
- 家庭医生签约服务培训
- 农商行年度工作总结
- 环保药剂招商加盟合作协议
- 五年级下册脱式计算练习100道及答案
评论
0/150
提交评论