您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > uCOS嵌入式实时操作系统
1实时操作系统C/OS-Ⅱ分析2实时操作系统C/OS-II1324C/OS-II概述任务管理中断和时间管理任务之间的通信与同步5存储管理3C/OS简介1、C/OS——MicroControllerOS,微控制器操作系统2、C/OS简介美国人JeanLabrosse1992年完成应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等1998年C/OS-II,目前的版本C/OS-IIV2.61,2.722000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中网站()4公开源代码可移植性(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的性能特点(一)5占先式(Preemptive)多任务C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有256个任务可确定性全部C/OS-II的函数调用与服务的执行时间具有可确定性。任务栈每个任务有自己单独的栈,C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。系统服务C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断管理中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。稳定性与可靠性C/OS的性能特点(二)6µC/OS-II图书描述了µC/OS-II内部的工作原理随书的CD中包含了源代码工业界最清晰的源代码除英文版外,有中文和韩文版ChineseKoreanEnglishISBN1-57820-103-9美国CMPBOOKISBN7-81077-290-2北京航空航天大学出版社ISBN89-951540-5-57µC/OS-II的各种商业应用全世界有数百种产品在应用:AvionicsMedicalCellphonesRoutersandswitchesHigh-endaudioequipmentWashingmachinesanddryersUPS(UninterruptiblePowerSupplies)IndustrialcontrollersGPSNavigationSystemsMicrowaveRadiosInstrumentationPoint-of-saleterminals更多8µC/OS-II提供的系统服务信号量带互斥机制的信号量减少优先级倒置的问题事件标志消息信箱消息队列内存管理时钟管理任务管理9µC/GUIandµC/FSµC/GUI嵌入式的用户界面用ANSIC书写支持任何8,16,32-bitsCPU彩色,灰、度,等级或黑白显示代码尺寸小µC/FS嵌入式的文件系统WritteninANSIC用ANSIC书写支持任何8,16,32-bitsCPU支持SMC,MMC,SD,CF,IDE,Flash,RAM其他介质10可移植的数据类型typedefunsignedcharBOOLEAN;typedefunsignedcharINT8U;typedefsignedcharINT8S;typedefunsignedintINT16U;typedefsignedintINT16S;typedefunsignedlongINT32U;typedefsignedlongINT32S;typedeffloatFP32;typedefdoubleFP64;11C/OS-II的文件结构121324C/OS-II概述任务管理中断和时间管理任务之间的通信与同步5存储管理13任务的实现创建任务的系统服务OSTaskCreate()INT8UOSTaskCreate(void(*task)(void*pd),//任务代码指针void*pdata,//任务参数指针OS_STK*ptos,//任务栈的栈顶指针INT8Uprio//任务的优先级);OSTaskCreateExt()提问:C/OS-II中的任务是进程还是线程?14任务主函数一个任务通常是一个无限循环(返回值类型void)voidMyTask(void*pdata){while(1){dosomething;waiting;dosomething;}}Why?15任务也可以自我删除(并非真的删除,只是内核不再知道该任务)voidMyTask(void*pdata){....../*用户代码*/OSTaskDel(OS_PRIO_SELF);}16μC/OS-Ⅱ可以管理多达64个任务;每个任务被赋以不同的优先级,取值从0到OS_LOWEST_PRIO-2,数值越小,优先级越高;系统保留了优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2,OS_LOWEST_PRI0-1以及OS_LOWEST_PRI0这8个任务以被将来使用,用户可以有56个应用任务;任务的优先级同样也是它的标识号ID。OS_CFG.H中定义=6317空闲任务和统计任务内核总是创建一个空闲任务OSTaskIdle();总是设置为最低优先级,OS_LOWEST_PRIOR;当所有其他任务都未在执行时,空闲任务开始执行;应用程序不能删除该任务;空闲任务的工作就是把32位计数器OSIdleCtr加1,该计数器被统计任务所使用;统计任务OSTaskStat(),提供运行时间统计。每秒钟运行一次,计算当前的CPU利用率。其优先级是OS_LOWEST_PRIOR-1,可选。18任务控制块TCB任务控制块OS_TCB是描述一个任务的核心数据结构,存放了它的各种管理信息,包括任务堆栈指针,任务的状态、优先级,任务链表指针等;一旦任务建立了,任务控制块OS_TCB将被赋值。19任务控制块TCBtypedefstructos_tcb{栈指针;INT16UOSTCBId;/*任务的ID*/链表指针;OS_EVENT*OSTCBEventPtr;/*事件指针*/void*OSTCBMsg;/*消息指针*/INT8UOSTCBStat;/*任务的状态*/INT8UOSTCBPrio;/*任务的优先级*/其他……}OS_TCB;20栈指针OSTCBStkPtr:指向当前任务栈顶的指针,每个任务可以有自己的栈,栈的容量可以是任意的;OSTCBStkBottom:指向任务栈底的指针;OSTCBStkSize:栈的容量,用可容纳的指针数目而不是字节数(Byte)来表示。2122链表指针所有的任务控制块分属于两条不同的链表,单向的空闲链表(头指针为OSTCBFreeList)和双向的使用链表(头指针为OSTCBList);OSTCBNext、OSTCBPrev:用于将任务控制块插入到空闲链表或使用链表中。每个任务的任务控制块在任务创建的时候被链接到使用链表中,在任务删除的时候从链表中被删除。双向连接的链表使得任一成员都能快速插入或删除。23空闲TCB链表所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl[]中,系统初始化时,所有TCB被链接成空闲的单向链表,头指针为OSTCBFreeList。当创建一个任务后,就把OSTCBFreeList所指向的TCB赋给了该任务,并将它加入到使用链表中,然后把OSTCBFreeList指向空闲链表中的下一个结点。24系统初始化后…指针数组,指向相应TCB25任务的状态-休眠休眠状态(Dormant):任务存在于内存空间中,但内核不可见;可以通过以下函数通知内核,使之变为就绪状态:–OSTaskCreate()或OSTaskCreateExt()可以通过以下函数返回到休眠状态:–OSTaskDel()26任务的状态-就绪就绪状态(Ready):万事具备,只欠CPU;在所有的就绪任务当中,具有最高优先级的任务被选中去运行;如果任务在运行的时候被抢占了CPU,则又回到就绪状态。27任务的状态-运行运行状态(Running):任务在CPU上运行;当一个任务在运行时,如果没有关闭中断,则有可能被中断所打断;当一个任务在运行时,可能因为各种原因进入阻塞状态。–OSMBoxPend(),OSQPend(),OSSemPend()OSTaskSuspend(),OSTimeDly()28任务的状态-ISR中断服务状态(ISR):该任务原来在CPU上运行,后来被中断所打断,由中断服务程序ISR接管了CPU;当中断服务程序运行完毕后,内核要判断是否有新的、更高优先级的任务就绪,如果有,则原有的任务被抢占;如果没有,则原有的任务重新运行。29任务的状态-阻塞阻塞/等待状态(Waiting):任务由于正在等待某个事件(信号量、邮箱或队列)而被挂起;当任务等待的事件发生时,回到就绪状态。–OSMBoxpost(),OSQPost(),OSSemPost(),OSTaskResume(),OSTimeDlyResume()或OSTimeTick()30状态的转换删除任务31任务就绪表每个任务的就绪态标志放入在就绪表中,就绪表中有两个变量OSRdyGrp和OSRdyTbl[]。在OSRdyGrp中,任务按优先级分组,8个任务为一组。OSRdyGrp中的每一位表示8组任务中每一组中是否有进入就绪态的任务。任务进入就绪态时,就绪表OSRdyTbl[]中的相应元素的相应位也置位。32任务就绪表OSRdyGrp1207654300XXXYYY任务优先级2017654310891514131211181617232221201926242531302928273432333938373635424041474645444350484955545352515856576362616059[0][1][2][3][4][5][6][7]OSRdyTbl[8]XY优先级最低任务(空闲任务)优先级最高任务任务优先级号对于整数OSRdyTbl[i](0i7),若它的某一位为1,则OSRdyGrp的第i位为1。任务的优先级由X和Y确定33根据优先级确定就绪表(1)假设优先级为12的任务进入就绪状态,12=1100b,则OSRdyTbl[1]的第4位置1,且OSRdyGrp的第1位置1,相应的数学表达式为:OSRdyGrp|=0x02;OSRdyTbl[1]|=0x10;而优先级为21的任务就绪21=10101b,则OSRdyTbl[2]的第5位置1,且OSRdyGrp的第2位置1,相应的数学表达式为:OSRdyGrp|=0x04;OSRdyTbl[2]|=0x20;34根据优先级确定就绪表(2)从上面的计算可知:若OSRdyGrp及OSRdyBbl[]的第n位置1,则应该把OSRdyGrp及OSRdyBbl[]的值与2n相或。uC/OS中,把2n的n=0-7的8个值先计算好存在数组OSMapTbl[7]中
本文标题:uCOS嵌入式实时操作系统
链接地址:https://www.777doc.com/doc-4511545 .html