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

    嵌入式操作系统μCOS-II.ppt

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

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

    嵌入式操作系统μCOS-II.ppt

    嵌入式技术与应用,智能电器与智能系统省重点实验室,嵌入式操作系统C/OS-II,6,C H A P T E R,主要内容,嵌入式操作系统C/OS-简介C/OS-内核结构C/OS-任务管理C/OS-时间管理C/OS-任务通信与同步C/OS-的移植规划C/OS-的移植移植代码应用到LPC2000,为什么需要操作系统,硬件抽象层的引入,嵌入式实时系统自底向上包含三个部分 硬件环境嵌入式实时操作系统RTOS嵌入式实时应用程序嵌入式系统应用的硬件环境差异大 中间层位于操作系统和硬件之间,包含系统中与硬件相关的大部分功能,嵌入式系统的体系结构,嵌入式操作系统的发展,RTOS在嵌入式系统中的位置,嵌入式硬件平台,BSP,KERNEL,FS,TCP/IP,设备驱动,设备I/O,调试工具,其它组件,应用,RTOS,C/C+,主要内容,嵌入式操作系统C/OS-简介C/OS-内核结构C/OS-任务管理C/OS-时间管理C/OS-任务通信与同步C/OS-的移植规划C/OS-的移植移植代码应用到LPC2000,C/OS-II简介,概述,C/OS-II是源码公开的著名实时内核,可用于各类8位、16位和32位单片机或DSP。C/OS-II是一个完整的、可移植、可固化、可剪裁的占先式实时多任务内核。C/OS-II使用ANSI C语言编写,包含一小部分汇编代码,使之可以供不同架构的微处理器使用,C/OS-II特点,提供源代码:源代码全部开放。可移植性(portable):源代码绝大部分使用ANSI C编写,将与微处理器硬件相关的汇编语言使用量压缩到最低的限度,方便移植。可固化(ROMmable):具备合适的软硬件工具,就可以将C/OS-II嵌入到产品中成为产品的一部分。可剪裁(scalable):使用条件编译实现可剪裁,减少C/OS-II对代码空间和数据空间的占用。可剥夺(preemptive):完全可剥夺型的实时内核,C/OS-II总是运行就绪条件下优先级最高的任务。,C/OS-II的各种商业应用,全世界有数百种产品在应用:AvionicsMedicalCell phonesRouters and switchesHigh-end audio equipmentWashing machines and dryersUPS(Uninterruptible Power Supplies)Industrial controllersGPS Navigation SystemsMicrowave RadiosInstrumentationPoint-of-sale terminals更多,主要内容,嵌入式操作系统C/OS-简介C/OS-内核结构C/OS-任务管理C/OS-时间管理C/OS-任务通信与同步C/OS-的移植规划C/OS-的移植移植代码应用到LPC2000,C/OS-II的文件结构,当处理临界段代码时,须关中断,处理完毕后,再开中断关中断时间是实时内核最重要的指标之一。它影响用户系统对实时事件的相应特性。在实际应用中,关中断的时间很大程度上取决于微处理器的结构和编译器生成的代码质量微处理器通常具有关中断/开中断操作。C源代码中插入汇编语言语句,实现关中断/开中断操作关中断/开中断操作作为语言的扩展部分,直接从C语言中可以关中断/开中断,C/OS-II开关中断的方法,C/OS-II开关中断的方法,C/OS-II定义了两个宏调用来开关中断:OS_ENTER_CRITICAL()(禁止中断的宏)OS_EXIT_CRITICAL()(启用中断的宏).OS_ENTER_CRITICAL();/*C/OS-II临界段代码*/OS_EXIT_CRITICAL();.宏定义取决于使用的微处理器。在文件OS_CPU.H有相应的宏定义C/OS-II中,每种微处理器都有自己的OS_CPU.H文件,任务(task),典型的任务:一个无限循环void mytask(void*pdata)for(;)do something;waiting;do something;,Task Structure,任务完成后的自我删除,C/OS II中的任务,C/OS II 2.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个,任务状态,在任一给定的时刻,任务的状态一定是以下五种状态之一:睡眠态(task dormant)就绪态(task ready)运行态(task running)等待状态(task waiting)中断服务态(ISR running),睡眠态(task dormant),指任务驻留在程序空间(ROM或RAM),还没有交给系统来管理的状态任务交给系统通过调用以下函数之一来实现:OSTaskCreate()OSTaskCreateExt()告知系统:任务的起始地址任务建立时,用户给任务赋予的优先级任务要使用的栈空间大小等,就绪态(task ready),任务一旦创建就进入就绪态,准备运行任务的创建可以是在多任务开始之前,也可以动态地由一个运行着的任务创建若刚创建任务的优先级高于创建它的任务的优先级,它将立即获得cpu的使用权任务可通过OSTaskDel()返回睡眠态;或调用该函数让另一个任务进入睡眠态,运行态(task running),就绪的任务只有当所有优先级高于它的任务都转为等待状态,或被删除后,才能进入运行态任何时刻只有一个任务处于运行态调用OSStart()可以启动多任务。该函数只能在启动时调用一次OSStart()运行用户初始化代码中已经建立的、进入就绪态的优先级最高的任务,等待状态(task waiting),正在运行的任务可以通过下面的调用进入等待状态。延迟时间到,立即强制执行任务切换,让下一个优先级最高、并进入就绪态的任务执行。OSTimeDly()OSTimeDlyHMSM()等待时间过去后,系统服务(内部)函数OSTimeTick()使延迟了的任务进入就绪态用户无需在应用程序代码中调用这个函数,等待状态(续),正在运行的任务可能需要通过调用函数等待某一事件发生。如果该事件并未发生,任务就进入等待状态OSFlagPend();OSMutexPend()OSSemPend();OSMboxPend()当事件发生或等待超时,被挂起的任务就进入就绪态,中断服务态(ISR running),正在执行的任务是可以被中断的,除非该任务将中断关闭,或系统将中断关闭。被中断的任务便进入了中断服务态响应中断后,正在运行的任务被挂起,中断服务子程序控制了CPU的使用权,中断服务态(ISR running),中断服务子程序可能会报告一个或多个事件的发生,而使一个或多个任务进入就绪态上述情况下,从中断服务子程序返回之前,C/OS II 要判定:被中断的任务是否还是就绪态任务中优先级最高的如果中断服务子程序使另一个优先级更高的任务进入了就绪态,则新进入就绪态的这个优先级更高的任务将得以运行;否则,原来被中断了的任务将继续运行。,任务状态,当所有的任务都在等待时间发生或等待延迟时间结束时,C/OS II 执行空闲任务(Idle Task)的内部函数,即:OSTaskIdle(),任务状态,任务的CPU使用权被剥夺,中断,恢复任务,任务控制块(TCB),任务控制块 OS_TCB是一个数据结构,保存该任务的相关参数,包括任务堆栈指针、状态、优先级、任务表位置、任务链表指针等所有的任务控制块分为两条链表:空闲链表使用链表当任务的CPU使用权被剥夺时,系统用它来保存该任务的状态全部驻留在RAM中,空任务列表,所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl 中系统初始化时,所有任务控制块被链接成空任务控制块的单向链表任务建立后,空任务控制块指针OSTCBFreeList指向的任务控制块就赋给了该任务,然后OSTCBFreeList的值调整为指向链表中的下一个空任务控制块任务一旦被删除,任务控制块就还给空任务链表,任务级的任务调度-OSSched,C/OS是占先式实时多任务内核,优先级最高的任务一旦准备就绪,则拥有CPU的所有权即开始投入运行。C/OS中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的。因此,任务调度就是:查找准备就绪的最高优先级的任务并进行上下文切换。C/OS任务调度所花的时间为常数,与应用程序中建立的任务数无关。,就绪表,根据就绪表确定最高优先级两个关键:优先级数分解为高三位和低三位分别确定高优先级有着小的优先级号,根据优先级找到任务在就绪任务表中的位置,每个就绪的任务都放入就绪表中(ready list)中,就绪表用两个变量表示:OSRdyGrp、OSRdyTbl,采用查表法确定高优先级任务,查表法具有确定的时间,增加了系统的可预测性,C/OS II中所有的系统调用时间都是确定的High3=OSUnMapTblOSRdyGrp;Low3=OSUnMapTblOSRdyTblHigh3;Prio=(High33)+Low3;,任务切换,将被挂起的任务寄存器入栈将较高优先级任务的寄存器出栈,任务级的任务切换OS_TASK_SW(),OS_TASK_SW()是宏调用,含有微处理器的软中断指令。因为,系统假定任务切换是靠中断级代码完成的。OS_TASK_SW()将处理器相关的软件中断机制封装起来,便于操作系统移植,调用OS_TASK_SW()前的数据结构,低优先级任务 OS_TCB,OSTCBCur(1),存贮器低地址,存贮器高地址,堆栈方向,SP,R1,R2,R3,R4,PC,PSW,存贮器低地址,存贮器高地址,高优先级任务(切换后运行的任务)OS_TCB,OSTCBHighRdy(3),(2),CPU,(4),(5),即将被挂起任务的栈顶,(即将被挂起任务),指向即将运行的任务的栈顶,保存当前CPU寄存器的值,低优先级任务 OS_TCB,OSTCBCur,存贮器低地址,存贮器高地址,堆栈方向,SP,R1,R2,R3,R4,PC,PSW,存贮器低地址,存贮器高地址,高优先级任务 OS_TCB,OSTCBHighRdy,(2),CPU,(1),(3),(3),重新装入要运行的任务,低优先级任务 OS_TCB,OSTCBCur,存贮器低地址,存贮器高地址,堆栈方向,SP,R1,R2,R3,R4,PC,PSW,存贮器低地址,存贮器高地址,高优先级任务 OS_TCB,OSTCBHighRdyOSTCBCur(1),(2),CPU,(4),(4),(1),(3),(3),(4),复制,任务切换OS_TASK_SW()的代码,Void OSCtxSw(void)将R1,R2,R3及R4推入当前堆栈;OSTCBCurOSTCBStkPtr=SP;OSTCBCur=OSTCBHighRdy;SP=OSTCBHighRdy OSTCBSTKPtr;将R4,R3,R2及R1从新堆栈中弹出;执行中断返回指令;,C/OS-II中的中断,中断:由于某种事件的发生,而导致程序流程的改变。产生中断的事件称为中断源。CPU响应中断的条件:至少有一个中断源向CPU发出中断信号;系统允许中断,且对此中断信号未予屏蔽中断类型:硬件中断 外部中断陷井中断现场控制量的中断,C/OS-II中的中断服务子程序,用户中断服务子程序:保存全部CPU寄存器;调用OSIntEnter()或OSIntNesting直接加1;if(OSIntNesting=1)OSTCBCur-OSTCBStkPtr=SP;清中断源;重新开中断;执行用户代码做中断服务;调用OSIntExit();恢复所有CPU寄存器;执行中断返回指令;,中断服务,中断与时钟节拍,时钟节拍(时钟滴答)Tick,是一种定时器中断,可通过编程方式实现时钟节拍是一种特殊的中断,操作系统的心脏。首先32位的整数OSTime加一。对任务列表进行扫描,判断是否有延时任务应该处于准备就绪状态,最后进行上下文切换。,时钟节拍中断服务子程序,Void OSTickISR(void)保存处理器寄存器的值;调用OSIntEnter(),或是将OSIntNesting加1 if(OSIntNesting=1)OSTCBCur-OSTCBStkPtr=SP;调用OSTimeTick();发出中断设备的中断;重新允许中断(可选用)调用OSIntExit();恢复处理器寄存器的值;执行中断返回指令;,空闲任务OSTaskIdle(),C/OS-II初始化,首先调用系统初始化函数OSIint()。OSIint()初始化C/OS-所有的变量和数据结构(见OS_CORE.C)。OSInit()建立空闲任务idle task,这个任务总是处于就绪态的。空闲任务OSTaskIdle()的优先级总是设成最低,即OS_LOWEST_PRIO。如果统计任务允许OS_TASK_STAT_EN和任务建立扩展允许都设为1,则OSInit()还得建立统计任务OSTaskStat()并且让其进入就绪态。OSTaskStat的优先级总是设为OS_LOWEST_PRIO-1 空闲和统计任务的任务控制块(OS_TCBs)是用双向链表链接在一起。OSTCBList指向这个链表的起始处。当建立一个任务时,这个任务总是被放在这个链表的起始处。,调用OSInit()之后的数据结构,C/OS-的启动,调用OSStart()之后的数据结构,主要内容,嵌入式操作系统C/OS-简介C/OS-内核结构C/OS-任务管理C/OS-时间管理C/OS-任务通信与同步,建立任务,Use one of two servicesOS TaskCreate()OSTaskCreateExt(),堆栈检验,OSTaskStkChk()删除任务,OSTaskDel()请求删除任务,OSTaskDelReq()改变任务的优先级,OSTaskChangePrio()挂起任务,OSTaskSuspend()恢复任务,OSTaskResume(),其它相关函数,主要内容,嵌入式操作系统C/OS-简介C/OS-内核结构C/OS-任务管理C/OS-时间管理C/OS-任务通信与同步,任务间通信手段,C/OS中,采用多种方法保护任务之间的共享数据和提供任务之间的通信。提供OS_ENTER_CRITICAL和OS_EXIT_CRITICAL来对临界资源进行保护OSSchedLock()禁止调度保护任务级的共享资源。提供了经典操作系统任务间通信方法:信号量、邮箱、消息队列,事件标志。,事件控制块ECB,ECB的结构如下-typedef struct void*OSEventPtr;/*指向消息或消息队列的指针*/INT8U OSEventTblOS_EVENT_TBL_SIZE;/*等待任务列表*/INT16U OSEventCnt;/*计数器(当事件是信号量时)*/INT8U OSEventType;/*事件类型:信号量、邮箱等*/INT8U OSEventGrp;/*等待任务组*/OS_EVENT;与TCB类似的结构,使用两个链表,空闲链表与使用链表,所有的通信信号都被看成是事件(event),一个称为事件控制块(ECB,Event Control Block)的数据结构来表征每一个具体事件,ECB的结构如下,事件的等待任务列表,空闲事件控制块链表,事件控制块TCB的操作,对事件控制块进行的操作包括:初始化一个事件控制块OS_EventWaitListInit();使一个任务进入就绪态OS_EventTaskRdy();使一个任务进入等待某事件的状态OS_EventTaskWait();因为等待超时而使一个任务进入就绪态OS_EventTO()。,信号量semaphore,信号量在多任务系统中用于:控制共享资源的使用权、标志事件的发生、使两个任务的行为同步。uC/OS中信号量由两部分组成:信号量的计数值和等待该信号任务的等待任务表。信号量的计数值可以为二进制,也可以是其他整数。系统通过OSSemPend()和OSSemPost()来支持信号量的两种原子操作P()和V()。P()操作减少信号量的值,如果新的信号量的值不大于0,则操作阻塞;V()操作增加信号量的值。,任务、中断服务子程序和信号量之间的关系,OSSemDel(),信号量操作,C/OS-II提供6个对信号量进行操作的函数:OSSemCreate():建立一个信号量OSSemDel():删除一个信号量OSSemPend():等待一个信号量OSSemPost():发出一个信号量OSSemAccept():无等待地请求一个信号量当一个任务请求一个信号量时,如果该信号量暂时无效,可以让该任务简单返回,而不是进入睡眠等待状态OSSemQuery()函数:查询一个信号量的当前状态,邮 箱,邮箱是C/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。该指针指向一个包含了特定“消息”的数据结构。为了在C/OS-II中使用邮箱,必须将OS_CFG.H中的OS_MBOX_EN常数置为1。使用邮箱之前,必须先建立该邮箱。该操作可以通过调用OSMboxCreate()函数来完成,并且要指定指针的初始值。,邮 箱,C/OS-II提供了7种对邮箱的操作:OSMboxCreate():建立一个邮箱OSMboxDel():删除一个邮箱OSMboxPend():等待邮箱中的消息OSMboxPost():向邮箱发送一则消息OSMboxPostOpt():向邮箱发送一则消息OSMboxAccept():无等待地从邮箱中得到一则消息OSMboxQuery():查询一个邮箱的状态,任务、中断服务子程序和邮箱之间的关系,消息队列,消息队列是C/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送以指针方式定义的变量因具体的应用有所不同,每个指针指向的数据结构变量也有所不同为了使用C/OS-II的消息队列功能,需要在OS_CFG.H 文件中,将OS_Q_EN常数设置为1,并且通过常数OS_MAX_QS来决定C/OS-II支持的最多消息队列数在使用一个消息队列之前,必须先建立该消息队列。这可以通过调用OSQCreate()函数,并定义消息队列中的单元数(消息数)来完成,C/OS-II提供了8个对消息队列进行操作的函数:OSQCreate():建立一个消息队列OSQDel():删除一个消息队列OSQPend():等待消息队列中的消息 OSQPost():向消息队列发送一则消息(FIFO)OSQPostFront():向消息队列发送一则消息(LIFO)只是在插入新的消息到消息队列中时,使用.OSQOut,而不是.OSQIn作为指向下一个插入消息的单元指针 OSQAccept():无等待地从消息队列中获得消息 OSQFlush():清空消息队列OSQQuery():获取消息队列的状态,任务、中断服务子程序和消息队列之间的关系,消息与任务,操作系统的启动和运行过程,小 结,C/OS-是一个实时内核,非常适合用于有实时性要求的控制系统中C/OS-要在其它领域中应用,有时还需要扩展GUI、FS、TCP/IP等嵌入式中间件和协议栈,

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开