1嵌入式系统设计与实例开发——ARM与µC/OS-Ⅱ北京航空航天大学北京航空航天大学智能嵌入式技术工作室智能嵌入式技术工作室2第四讲、嵌入式实时操作系统分析一、操作系统概述二、嵌入式实时操作系统µC/OS三、嵌入式Linux简介四、WinCE3一、操作系统的发展串行处理简单批处理系统——IBMSYS多通道程序批处理系统分时操作系统实时操作系统4批处理操作系统工作方式:z用户将作业交给系统操作员z系统操作员将许多用户的作业组成一批作业z之后输入到计算机中,在系统中形成一个自动转接的连续的作业流z启动操作系统z系统自动、依次执行每个作业z最后由操作员将作业结果交给用户5分时操作系统z工作方式:z一台主机连接了若干个终端z每个终端有一个用户在使用z交互式的向系统提出命令请求z系统接受每个用户的命令z采用时间片轮转方式处理服务请求z并通过交互方式在终端上向用户显示结果z用户根据上步结果发出下道命令6主机终端7分时操作系统时间片:z操作系统将CPU的时间划分成若干个片段,称为时间片z操作系统以时间片为单位,轮流为每个终端用户服务z每次服务一个时间片z(其特点是利用人的错觉,使人感觉不到)8通用操作系统分时系统与批处理系统结合原则:分时优先,批处理在后“前台”:需频繁交互的作业“后台”:时间性要求不强的作业9实时操作系统主要追求目标:z对外部请求在严格时间范围内作出反应z高可靠性z安全性z完整性实时系统必须和先进的技术装备相结合10网络操作系统z它是基于计算机网络的,z是在各种计算机操作系统上,z按网络体系结构协议标准开发的软件,z包括网络管理,通信,安全,资源共享z和各种网络应用。z目标:是相互通信及资源共享11分布式操作系统特征:1.是一个统一的操作系统2.资源进一步共享3.透明性:资源共享,分布。用户并不知道,对用户来讲是透明的4.自治性:处于分布式系统的多个主机处于平等地位,无主从关系5.处理能力增强、速度更快、可靠性增强12嵌入式操作系统z什么是嵌入式系统?z在各种设备、装置或系统中,完成特定功能的软硬件系统z它们是一个大设备、装置或系统中的一部分,这个大设备、装置或系统可以不是“计算机”z通常工作在反应式或对处理时间有较严格要求环境中z由于它们被嵌入在各种设备、装置或系统中,因此称为嵌入式系统1314典型嵌入式操作系统的特性•完成某一项或有限项功能;不是通用型的•在性能和实时性方面有严格的限制•能源、成本和可靠性通常是影响设计的重要因素•占有资源少、易于连接•系统功能可针对需求进行裁剪、调整和生成以便满足最终产品的设计要求15二、嵌入式实时操作系统µC/OSµC/OS简介内核结构任务间通信µC/OS的移植16RTOS是32位的嵌入式CPU的软件基础zRTOS内核提供CPU的管理z硬件初时化,MMU,定时器,中断zRTOS内核提供任务,内存管理zRTOS提供设备管理,文件和网络的支持zRTOS提供C/C++,JAVA,图形模块等编程接口17µC/OS简介1、µC/OS——microOS,微控制器操作系统2、µC/OS简介z美国人JeanLabrosse1992年完成z应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等z1998年µC/OS-II,目前的版本µC/OS-IIV2.61z2000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中z网站()18µC/OS的性能特点(一)公开源代码可移植性(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)。这种可剪裁性是靠条件编译实现的。19占先式(Preemptive)多任务µC/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有56个任务可确定性全部µC/OS-II的函数调用与服务的执行时间具有可确定性。任务栈每个任务有自己单独的栈,µC/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。系统服务µC/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断管理中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。稳定性与可靠性µC/OS的性能特点(二)20µC/OS-II图书z描述了µC/OS-II内部的工作原理z随书的CD中包含了源代码工业界最清晰的源代码z除英文版外,有中文和韩文版EnglishISBN1-57820-103-9美国CMPBOOKChineseKoreanISBN7-81077-290-2北京航空航天大学出版社ISBN89-951540-5-521µC/OS-II的各种商业应用z全世界有数百种产品在应用:zAvionicszMedicalzCellphoneszRoutersandswitcheszHigh-endaudioequipmentzWashingmachinesanddryerszUPS(UninterruptiblePowerSupplies)zIndustrialcontrollerszGPSNavigationSystemszMicrowaveRadioszInstrumentationzPoint-of-saleterminalsz更多22µC/OS-II提供的系统服务z信号量z带互斥机制的信号量减少优先级倒置的问题z事件标志z消息信箱z消息队列z内存管理z时钟管理z任务管理23µC/GUIandµC/FSzµC/GUIz嵌入式的用户界面z用ANSIC书写z支持任何8,16,32-bitsCPUz彩色,灰、度,等级或黑白显示z代码尺寸小zµC/FSz嵌入式的文件系统WritteninANSICz用ANSIC书写z支持任何8,16,32-bitsCPUz支持SMC,MMC,SD,CF,IDE,Flash,RAM其他介质24µC/OS-II的文件结构25µC/OS-II的内核结构z内核结构z任务管理z时间管理z任务之间通信与同步zµC/OS的移植26任务task典型的任务一个无限循环。voidmytask(void*pdata){for(;;){dosomething;waiting;dosomething;}}zµC/OS–II2.5版本支持64个任务,每个任务一个特定的优先级。优先级越高,数字越小。z系统占用了8个任务,保留优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO-0。27TaskStructureTaskcodeTaskcodeOneormorecallsfromthislistArgumentispointertovoid–allowsapplicationtopassalmostanykindofdata28AlternateStructure29任务状态就绪休眠等待或挂起运行中断服务删除任务删除任务删除任务中断中断结束创建任务任务调度任务被占先等待消息挂起收到消息挂起时间到30建立任务UseoneoftwoserviceszOSTaskCreate()zOSTaskCreateExt()31check任务代码指针任务参数指针分配任务堆栈的栈顶指针分配给任务的优先级SetuptaskstackSetpointeriflevelisfreeInitializeTCBOptiontoextendfunctionalityIfcalledfromatask32Asbefore33任务控制块(TCB)z任务控制块OS_TCB是一个数据结构,保存该任务的相关参数,包括任务堆栈指针,状态,优先级,任务表位置,任务链表指针等。z所有的任务控制块分为两条链表,空闲链表和使用链表。34任务控制块结构Structos_tcb{OS_STK*OSTCBStkPtr;structos_tcb*OSTCBNext;structos_tcb*OSTCBprev;OS_EVENT*OSTCBEventPtr;void*OSTCBMsg;INT16UOSTCBDly;INT8UOSTCBStat;INT8UOSTCBPrio;INT8UOSTCBX,OSTCBY,OSTCBBitX,OSTCBBitY;}OS_TCB加速任务进入就绪态的过程事件控制块的指针任务的状态字35空任务列表所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl[]中,系统初始化时,所有任务控制块被链接成空任务控制块的单向链表,任务建立后,空任务控制块指针OSTCBFreeList指向的任务控制块就赋给了该任务,然后OSTCBFreeList的值调整为指向链表中的下一个空任务控制块。36任务控制块初始化函数INT8UOS_TCBInit(INT8Uprio,OS_STK*ptos,OS_STK*pbos,INT16Uid,INT32Ustk_size,void*pext,INT16Uopt){……}37任务级的任务调度--OSSchedzµC/OS是占先式实时多任务内核,优先级最高的任务一旦准备就绪,则拥有CPU的所有权开始投入运行。zµC/OS中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务并进行上下文切换。zµC/OS任务调度所花的时间为常数,与应用程序中建立的任务数无关。38根据优先级找到任务在就绪任务表中的位置每个就绪的任务都放入就绪表中(readylist)中,就绪表有两个变量:OSRdyGrp、OSRdyTbl[]OSRdyGrp1207654300XXXYYY任务优先级2017654310891514131211181617232221201926242531302928273432333938373635424041474645444350484955545352515856576362616059[0][1][2][3][4][5][6][7]OSRdyTbl[7]XY优先级最低任务(空闲任务)优先级最高任务任务优先级号39根据优先级确定就绪表(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;40根据优先级确定就绪表(2)z从上面的计算我们可以得到:若OSRdyGrp及OSRdyBbl[]的第n位置1,则应该把OSRdyGrp及OSRdyBbl[]的值与2n相或。uC/OS中,把2n的n=0-7的8个值先计算好存在数组OSMapTbl[7]中,也就是:OSMapTbl[0]=20=0x0