欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    ucos-ii的特点.ppt

    • 资源ID:5451408       资源大小:1.30MB        全文页数:59页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    ucos-ii的特点.ppt

    1,提纲,1,3,2,4,5,uCOSII操作系统的特点,uCOS II操作系统时间管理,uCOS II操作系统任务管理,uCOS II操作系统内核结构,6,7,第十章嵌入式操作系统UCOS II的使用,uCOS II操作系统移植,uCOS II操作系统内存管理,uCOS II操作系统任务间的通讯,2,C/OS-II的特点,UC/OS是一个非常小巧的实时操作系统;整个代码分为内核层以及移植层,这样使得它的植性很方便。采用抢占式调度策略,保证任务的实时性。能够管理多达64个任务。提供了邮箱、消息队列、信号量、内存管理、时间管理等系统服务。,C/OS-II的特点,3,C/OS-II的各种商业应用,全世界有数百种产品在应用:医疗器械移动电话路由器工业控制GPS 导航系统智能仪器更多,C/OS-II的特点,4,为了实现资源共享,一个操作系统必须提供临界段擦作的功能。C/OS-为了处理临界段代码需要关中断,处理完毕后再开中断。这使得C/OS-能够避免同时有其它任务或中断服务进入临界段代码。C/OS-定义两个宏(macros)来开关中断。分别是:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。这两个宏的定义取决于所用的微处理器,每种微处理器都有自己的OS_CPU.H文件。,临界段(Critical Sections),C/OS-II的内核结构,5,任务(task),一个任务通常是一个无限的循环:void mytask(void*pdata)do init while(1)do something;waiting;do something;,C/OS-II的内核结构,6,任务(task),C/OS-可以管理多达64个任务。保留了优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2,OS_LOWEST_PRI0-1以及OS_LOWEST_PRI0这8个任务以被将来使用。用户可以有多达56个应用任务。必须给每个任务赋以不同的优先级。优先级号越低,任务的优先级越高。,C/OS-II的内核结构,7,C/OS中的中断处理,C/OS中,中断服务子程序要用汇编语言来写。然而,如果用户使用的C语言编译器支持在线汇编语言的话,用户可以直接将中断服务子程序代码放在C语言的程序文件中。用户中断服务子程序框架:保存全部CPU寄存器;调用OSIntEnter或OSIntNesting直接加1;执行用户代码做中断服务;调用OSIntExit();恢复所有CPU寄存器;执行中断返回指令;,C/OS-II的内核结构,8,OSIntEnter(),void OSIntEnter(void)OS_ENTER_CRITICAL();OSIntNesting+;OS_EXIT_CRITICAL();,C/OS-II的内核结构,9,OSIntExit,OS_ENTER_CRITICAL();if(-OSIntNesting|OSLockNesting)=0)OSIntExitY=OSUnMapTblOSRdyGrp;OSPrioHighRdy=(INT8U)(OSIntExitY 3)+OSUnMapTblOSRdyTblOSIntExitY);if(OSPrioHighRdy!=OSPrioCur)OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy;OSCtxSwCtr+;OSIntCtxSw();OS_EXIT_CRITICAL();,C/OS-II的内核结构,10,中断与时钟节拍,当发生中断时,首先应保护现场,将CPU寄存器入栈,再处理中断函数,然后恢复现场,将CPU寄存器出栈,最后执行中断返回。uC/OS中提供了OSIntEnter()和OSIntExit()告诉内核进入了中断状态。时钟节拍是一种特殊的中断,操作系统的心脏。对任务列表进行扫描,判断是否有延时任务应该处于准备就绪状态,最后进行上下文切换。,C/OS-II的内核结构,11,时钟节拍,C/OS需要用户提供周期性信号源,用于实现时间延时和确认超时。节拍率应在说10到100Hz。时钟节拍率越高,系统的额外负荷就越重。时钟节拍的实际频率取决于用户应用程序的精度。时钟节拍源可以是专门的硬件定时器,也可以是来自50/60Hz交流电源的信号。用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()之后。,C/OS-II的内核结构,12,OSTickISR,void OSTickISR(void)保存处理器寄存器的值;调用OSIntEnter()或是将OSIntNesting加1;调用OSTimeTick();调用OSIntExit();恢复处理器寄存器的值;执行中断返回指令;,C/OS-II的内核结构,13,C/OS-初始化,在调用C/OS-的任何其它服务之前,C/OS-要求用户首先调用系统初始化函数OSInit()。OSInit()建立空闲任务idle task,这个任务总是处于就绪态的。空闲任务OSTaskIdle()的优先级总是设成最低,即OS_LOWEST_PRIO。C/OS-还初始化了4个空数据结构缓冲区。,C/OS-II的内核结构,14,C/OS-初始化后的一些数据结构内容,C/OS-II的内核结构,15,C/OS-初始化后的缓冲区,C/OS-II的内核结构,16,C/OS-的启动,多任务的启动是用户通过调用OSStart()实现的。然而,启动C/OS-之前,用户至少要建立一个应用任务。OSInit();/*初始化uC/OS-II*/调用OSTaskCreate()或OSTaskCreateExt();OSStart();/*开始多任务调度!永不返回*/,C/OS-II的内核结构,17,OSStart,if(OSRunning=FALSE)y=OSUnMapTblOSRdyGrp;x=OSUnMapTblOSRdyTbly;OSPrioHighRdy=(INT8U)(y 3)+x);OSPrioCur=OSPrioHighRdy;OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy;OSTCBCur=OSTCBHighRdy;OSStartHighRdy();,C/OS-II的内核结构,18,任务状态,C/OS-II的任务管理,19,任务控制块(TCB),任务控制块 OS_TCB是一个数据结构,保存该任务的相关参数,包括任务堆栈指针,状态,优先级,任务表位置,任务链表指针等。一旦任务建立了,任务控制块OS_TCBs将被赋值。所有的任务控制块分为两条链表,空闲链表和使用链表。,C/OS-II的任务管理,20,任务控制块结构的主要成员,OS_STK*OSTCBStkPtr;/*当前任务栈顶的指针*/struct os_tcb*OSTCBNext;/*任务控制块的双重链接指针*/struct os_tcb*OSTCBPrev;/*任务控制块的双重链接指针*/OS_EVENT*OSTCBEventPtr;/*事件控制块的指针*/void*OSTCBMsg;/*消息的指针*/INT16U OSTCBDly;/*任务延时*/INT8U OSTCBStat;/*任务的状态字*/INT8U OSTCBPrio;/*任务优先级*/INT8U OSTCBX;/*用于加速进入就绪态的过程*/INT8U OSTCBY;/*用于加速进入就绪态的过程*/INT8U OSTCBBitX;/*用于加速进入就绪态的过程*/INT8U OSTCBBitY;/*用于加速进入就绪态的过程*/,C/OS-II的任务管理,21,任务就绪表(Ready List),每个任务的就绪态标志都放入就绪表中的,就绪表中有两个变量OSRdyGrp和OSRdyTbl。在OSRdyGrp中,任务按优先级分组,8个任务为一组。OSRdyGrp中的每一位表示8组任务中每一组中是否有进入就绪态的任务。任务进入就绪态时,就绪表OSRdyTbl中的相应元素的相应位也置位。,C/OS-II的任务管理,22,任务就绪表,C/OS-II的任务管理,23,任务创建,想让C/OS-管理用户的任务,用户必须要先建立任务。用户可以通过传递任务地址和其它参数到以下两个函数之一来建立任务:OSTaskCreate()OSTaskCreateExt()。任务不能由中断服务程序(ISR)来建立。,C/OS-II的任务管理,24,任务调度(Task Scheduling),C/OS是抢占式实时多任务内核,优先级最高的任务一旦准备就绪,则拥有CPU的所有权开始投入运行。C/OS中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务并进行上下文切换。C/OS任务调度所花的时间为常数,与应用程序中建立的任务数无关。,C/OS-II的任务管理,25,任务调度(Task Scheduling),C/OS-总是运行进入就绪态任务中优先级最高的那一个。确定哪个任务优先级最高,下面该哪个任务运行了的工作是由调度器(Scheduler)完成的。任务级的调度是由函数OSSched()完成的。中断级的调度是由另一个函数OSIntExt()完成的,这个函数将在以后描述。,C/OS-II的任务管理,26,根据就绪表确定最高优先级,通过OSRdyGrp值确定高3位,假设OSRdyGrp0 x08,对应OSRdyTbl3,高优先级为2;通过OSRdyTbl3的值来确定低3位,假设OSRdyTbl30 x3a,最高优先级的任务为25,C/OS-II的任务管理,27,使任务进入就绪态,如果prio是任务是优先级,也是任务的识别号,则将任务放入就绪表,即使任务进入就绪态的方法是:OSRdyGrp|=OSMapTblprio3;OSRdyTblprio3|=OSMapTblprio,C/OS-II的任务管理,28,使任务脱离就绪态,将任务就绪表OSRdyTblprio3相应元素的相应位清零,而且当OSRdyTblprio3中的所有位都为零时,即全组任务中没有一个进入就绪态时,OSRdyGrp的相应位才为零。if(OSRdyTblprio3,C/OS-II的任务管理,29,任务调度器,void OSSched(void)INT8U y;OS_ENTER_CRITICAL();if(OSLockNesting|OSIntNesting)=0)y=OSUnMapTblOSRdyGrp;OSPrioHighRdy=(INT8U)(y 3)+OSUnMapTblOSRdyTbly);if(OSPrioHighRdy!=OSPrioCur)OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy;OSCtxSwCtr+;OS_TASK_SW();OS_EXIT_CRITICAL();,C/OS-II的任务管理,30,任务切换,将被挂起的任务寄存器入栈将较高优先级任务的寄存器出栈,C/OS-II的任务管理,31,任务级的任务切换OS_TASK_SW(),通过系统调用指令完成保护当前任务的现场恢复新任务的现场执行中断返回指令开始执行新的任务,C/OS-II的任务管理,32,调用OS_TASK_SW()前的数据结构,低优先级任务 OS_TCB,OSTCBCur(1),存贮器低地址,存贮器高地址,堆栈方向,SP,R1,R2,R3,R4,PC,PSW,存贮器低地址,存贮器高地址,高优先级任务 OS_TCB,OSTCBHighRdy(3),(2),CPU,(4),(5),C/OS-II的任务管理,33,保存当前CPU寄存器的值,低优先级任务 OS_TCB,OSTCBCur,存贮器低地址,存贮器高地址,堆栈方向,SP,R1,R2,R3,R4,PC,PSW,存贮器低地址,存贮器高地址,高优先级任务 OS_TCB,OSTCBHighRdy(3),(2),CPU,(4),(5),(1),(3),C/OS-II的任务管理,34,重新装入要运行的任务,低优先级任务 OS_TCB,OSTCBCur,存贮器低地址,存贮器高地址,堆栈方向,SP,R1,R2,R3,R4,PC,PSW,存贮器低地址,存贮器高地址,高优先级任务 OS_TCB,OSTCBHighRdyOSTCBCur(1),(2),CPU,(4),(4),(1),(3),(3),(4),C/OS-II的任务管理,35,任务切换OS_TASK_SW()的代码,Void OSCtxSw(void)将R1,R2,R3及R4推入当前堆栈;OSTCBCurOSTCBStkPtr=SP;OSTCBCur=OSTCBHighRdy;SP=OSTCBHighRdy OSTCBSTKPtr;将R4,R3,R2及R1从新堆栈中弹出;执行中断返回指令;,C/OS-II的任务管理,36,内存管理,在ANSI C中可以用malloc()和free()两个函数动态地分配内存和释放内存。在嵌入式实时操作系统中,容易产生内存碎片。C/OS-II中,操作系统把连续的大块内存按分区来管理。每个分区中包含有整数个大小相同的内存块。在一个系统中可以有多个内存分区。这样,用户的应用程序就可以从不同的内存分区中得到不同大小的内存块。但是,特定的内存块在释放时必须重新放回它以前所属于的内存分区。,C/OS-II的内存管理,37,内存分区示意图,C/OS-II的内存管理,38,内存控制块,为了便于内存的管理,在C/OS-II中使用内存控制块(memory control blocks)的数据结构来跟踪每一个内存分区,系统中的每个内存分区都有它自己的内存控制块。typedef struct void*OSMemAddr;/*分区起始地址*/void*OSMemFreeList;/*下一个空闲内存块*/INT32U OSMemBlkSize;/*内存块的大小*/INT32U OSMemNBlks;/*内存块数量*/INT32U OSMemNFree;/*空闲内存块数量*/OS_MEM;,C/OS-II的内存管理,39,内存管理初始化,如果要在C/OS-II中使用内存管理,需要在OS_CFG.H文件中将开关量OS_MEM_EN设置为1。这样C/OS-II 在启动时就会对内存管理器进行初始化(OSMemInit())。,C/OS-II的内存管理,40,建立一个内存分区,OSMemCreate(),在使用一个内存分区之前,必须使用OSMemCreate()先建立该内存分区。该函数共有4个参数:内存分区的起始地址、分区内的内存块总块数、每个内存块的字节数和一个指向错误信息代码的指针。每个内存分区必须含有至少两个内存块,每个内存块至少为一个指针的大小。OS_MEM*CommTxBuf;INT8U CommTxPart10032;CommTxBuf=OSMemCreate(CommTxPart,100,32,C/OS-II的内存管理,41,分配一个内存块,OSMemGet(),调用OSMemGet()函数从已经建立的内存分区中申请一个内存块。该函数的唯一参数是指向特定内存分区的指针,该指针在建立内存分区时,由OSMemCreate()函数返回。注意的是,用户可以在中断服务子程序中调用OSMemGet(),因为在暂时没有内存块可用的情况下,OSMemGet()不会等待,而是马上返回NULL指针。,C/OS-II的内存管理,42,释放一个内存块,OSMemPut(),应用程序不再使用一个内存块时,必须及时地把它释放并放回到相应的内存分区中。这个操作由OSMemPut()函数完成。必须注意的是,OSMemPut()并不知道一个内存块是属于哪个内存分区的。释放内存块时必须将它释放到正确的分区。,C/OS-II的内存管理,43,时间管理,C/OS-(其它内核也一样)要求用户提供定时中断来实现延时与超时控制等功能。这个定时中断叫做时钟节拍,它应该每秒发生10至100次。时钟节拍的频率越高,系统的负荷就越重。与时钟管理相关的系统服务有:OSTimeDLY()OSTimeDLYHMSM()OSTimeDlyResmue()OStimeGet()OSTimeSet(),C/OS-II的时间管理,44,任务间通信手段,C/OS中,采用多种方法保护任务之间的共享数据和提供任务之间的通信。提供OS_ENTER_CRITICAL和OS_EXIT_CRITICAL来对临界资源进行保护OSSchedLock()禁止调度保护任务级的共享资源。提供了经典操作系统任务间通信方法:信号量、邮箱、消息队列,事件标志。,C/OS-II的任务间通讯,45,事件控制块ECB,所有的通信信号都被看成是事件(event),一个称为事件控制块(ECB,Event Control Block)的数据结构来表征每一个具体事件,ECB的结构如下:typedef struct void*OSEventPtr;/*指向消息或消息队列的指针*/INT8U OSEventTblOS_EVENT_TBL_SIZE;/*等待任务列表*/INT16U OSEventCnt;/*计数器(事件是信号量时)*/INT8U OSEventType;/*事件类型:信号量、邮箱等*/INT8U OSEventGrp;/*等待任务组*/OS_EVENT;与TCB类似的结构,使用两个链表,空闲链表与使用链表,C/OS-II的任务间通讯,46,信号量semaphore,信号量在多任务系统中用于:控制共享资源的使用权、标志事件的发生、使两个任务的行为同步。uC/OS中信号量由两部分组成:信号量的计数值和等待该信号任务的等待任务表。信号量的计数值可以为二进制,也可以是其他整数。系统通过OSSemPend()和OSSemPost()来支持信号量的两种原子操作P()和V()。P()操作减少信号量的值,如果新的信号量的值不大于0,则操作阻塞;V()操作增加信号量的值。,C/OS-II的任务间通讯,47,总结,不存在一个内核任务/实体,内核的管理是通过调用系统函数来实现的。每个任务有自己的堆栈空间。内核对任务的占先式调度不会干扰每个任务的总的运行结果。,C/OS-II的任务间通讯,48,COS-II在ARM7上的移植,所谓移植,是指使一个实时操作系统能够在某个微处理器平台上运行。COS-II的主要代码都是由标准的C语言写成的,移植方便。,C/OS-II的移植,49,移植COS-II满足的条件,处理器的C编译器能产生可重入代码 在程序中可以打开或者关闭中断 处理器支持中断,并且能产生定时中断(通常在101000Hz之间)处理器支承能够容纳一定量数据的硬件堆栈 处理器有将堆栈指针和其他CPU寄存器存储和读出到堆栈(或者内存)的指令,C/OS-II的移植,50,打开/关闭中断,在COS-II中,可以通过:OS_ENTER_CRITICAL()OS_EXIT_CRITICAL()宏来控制系统关闭或者打开中断。这需要处理器的支持。在ARM7TDMI的处理器上,可以设置相应的寄存器来关闭或者打开系统的所有中断。,C/OS-II的移植,51,处理器支持中断并且能产生定时中断,COS-II是通过处理器产生的定时器的中断来实现多任务之间的调度的。ARM7TDMI的处理器上可以产生定时器中断。本系统工作在60MHz的主频下,定时器的中断的频率为100Hz。也就是系统的响应时间为10ms。,C/OS-II的移植,52,处理器支持硬件堆栈,COS-II进行任务调度的时候,会把当前任务的CPU寄存器存放到此任务的堆栈中,然后,再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。所以,寄存器的入栈和出栈是COS-II多任务调度的基础。ARM7处理器中有专门的指令处理堆栈,可以灵活的使用堆栈。,C/OS-II的移植,53,例:C/OS-II在S3C44B0X上的移植,设置OS_CPU.H中与处理器和编译器相关的代码 用C语言编写六个操作系统相关的函数(OS_CPU_C.C)用汇编语言编写四个与处理器相关的函数(OS_CPU.ASM),C/OS-II的移植,54,设置与处理器和编译器相关的代码,OS_CPU.H中定义了与编译器相关的数据类型。比如:INT8U、INT8S等。与 ARM处理器相关的代码,使用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()宏开启关闭中断设施堆栈的增长方向:堆栈由高地址向低地址增长,C/OS-II的移植,55,用C语言编写六个操作系统相关的函数,void*OSTaskStkInit(void(*task)(void*pd),void*pdata,void*ptos,INT16U opt)void OSTaskCreateHook(OS_TCB*ptcb)void OSTaskDelHook(OS_TCB*ptcb)void OSTaskSwHook(void)void OSTaskStatHook(void)void OSTimeTickHook(void)后5个函数为钩子函数,可以不加代码,C/OS-II的移植,56,用汇编语言编写四个与处理器相关的函数,OSStartHighRdy()OSCtxSw()OSIntCtxSw()OSTickISR(),C/OS-II的移植,57,关于移植,相对于其他的嵌入式操作系统,uCOS-II的移植虽然是一个很简单的过程,但是,对于不熟悉uCOS-II的开发者,移植还是有一定难度的。,C/OS-II的移植,58,移植要点,定义函数OS_ENTER_CRITICAL和OS_ENTER_CRITICAL。定义函数OS_TASK_SW执行任务切换。定义函数OSCtxSw实现用户级上下文切换,用纯汇编实现。定义函数OSIntCtxSw实现中断级任务切换,用纯汇编实现。定义函数OSTickISR。定义OSTaskStkInit来初始化任务的堆栈。,C/OS-II的移植,59,uC/OS的改进,固定的基于优先级的调度,不支持时间片,使用起来不方便。一个任务的基础上增加一个基于时间片的微型调度核在对临界资源的访问上使用关闭中断实现,没有使用CPU提供的硬件指令,例如测试并置位。系统时钟中断,没有提供用户使用定时器,可以借鉴linux的定时器加以修改可以加上文件系统和TCP/IP协议栈,C/OS-II的移植,

    注意事项

    本文(ucos-ii的特点.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开