您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 第5章 嵌入式操作系统
1第5章嵌入式操作系统13uC/OS-II的任务管理2uC/OS-II的初始化与启动uC/OS-II简介uC/OS-II的中断和时钟uC/OS-II的同步与通信452uC/OS-II简介C/OS——MicroControllerOS,微控制器操作系统美国人JeanLabrosse1992年完成应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等1998年出C/OS-II,目前的版本C/OS-IIV2.612000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中网站()3应用软件(用户代码)μC/OS-II(与处理器类型无关的代码)μC/OS-II配置文件(与应用程序有关)移植μC/OS-II(与处理器类型有关的代码)软件硬件CPU定时器OS_Q.COS_SEM.COS_TASK.COS_TIME.CuC/OS-II.CuC/OS-II.HOS_CORE.COS_FLAG.COS_MBOX.COS_MEM.COS_MUTEX.COS_CFG.HINCLUDES.HOS_CPU.H、OS_CPU_A.ASM、OS_CPU_C.CuC/OS-II简介--文件结构体系结构4uC/OS-II简介-性能特点源代码公开可移植(Portable)大部分代码用ANSIC写,与处理器无关,移植时不需修改少量与微处理器硬件相关的部分用C与汇编编写,移植时需修改:OS_CPU.H//与硬件相关,移植时需修改OS_CPU_A.ASM//集中了所有与处理器相关的汇编语言代码OS_CPU.C//集中了所有与处理器相关的汇编语言代码5uC/OS-II简介-性能特点可裁剪(Scalable)可以只使用C/OS-II中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个C/OS-II调用,而另一个产品则使用了几乎所有C/OS-II的功能,这样可以减少产品中的C/OS-II所需的存储器空间(RAM和ROM)。可剪裁性通过条件编译实现。6uC/OS-II简介-性能特点可剥夺性(Preemptive)与可确定性内核可剥夺、函数调用或系统服务的执行时间具有可确定性,是硬实时操作系统。支持多任务C/OS-II可以管理64个任务任务栈每个任务有自己单独的栈,C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。7uC/OS-II简介-性能特点系统服务C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断管理中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。8uC/OS-II简介-图书描述了µC/OS-II内部的工作原理随书的CD中包含了源代码工业界最清晰的源代码除英文版外,有中文和韩文版ChineseEnglishISBN1-57820-103-9美国CMPBOOKISBN7-81077-290-2北京航空航天大学出版社9第5章嵌入式操作系统13uC/OS-II的任务管理2uC/OS-II的初始化与启动uC/OS-II简介uC/OS-II的中断和时钟uC/OS-II的同步与通信4510uC/OS-II的任务管理uC/OS-II任务概述任务调度任务创建11uC/OS-II任务概述COS支持64个任务,每个任务有一个特定的优先级。任务的优先级别用数字表示,0表示的任务的优先级最高,数字越大表示的优先级越低。通过常数OS_LOWEST_PRIO(在OS_CFG.H中)定义系统的最低优先级别,同时限定系统能容纳的最多任务数量。OS_LOWEST_PRIO给空闲任务,OS_LOWEST_PRIO-1给统计任务。12uC/OS-II任务概述uCOS中的任务是一个线程,其代码通常是一个无限循环结构/超循环结构,看起来像其它C函数一样。voidmytask(void*pdata){for(;;){dosomething;waiting;dosomething;}}13任务堆栈voidmytask(){…..for(;;){…..}}任务代码任务控制块指向任务堆栈的指针…..指向前一个任务控制块的指针指向后一个任务控制块的指针……..任务的优先级别……任务任务的存储结构uC/OS-II任务概述指向任务代码14任务控制块任务代码任务堆栈任务1……任务控制块链表uC/OS-II任务概述任务控制块任务代码任务堆栈任务2任务控制块任务代码任务堆栈任务n15uC/OS-II任务概述uC/OS-II任务概述有5种状态睡眠态(DORMANT):任务驻留在程序空间,还没有交给uCOS管理,即还没有配备任务控制块,还没有被创建。就绪态(READY):任务一旦建立,就进入就绪态准备运行,“万事具备,只欠CPU”。运行态(RUNNING):正在使用CPU的状态称运行态。等待态(WAITING):等待某事件发生的状态.中断服务态(ISR):正在运行的任务被中断时就进入了中断服务态(ISR)。16uC/OS-II任务概述17uC/OS-II任务概述任务控制块(TaskControlBlocks,OS_TCBs)是μCOS用来存储任务堆栈指针、当前状态、优先级及任务链表指针等属性的一个数据结构。任务控制块是任务的身份证,每个任务都有一个属于自已的任务控制块,当任务的CPU使用权被剥夺时,任务的属性被保存在任务控制块中,而当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行。OS_TCBs全部驻留在RAM中。OS_TCBs在任务建立的时候被初始化.18uC/OS-II任务概述typedefstructos_tcb{OS_STK*OSTCBStkPtr;#ifOS_TASK_CREATE_EXT_EN0void*OSTCBExtPtr;OS_STK*OSTCBStkBottom;INT32UOSTCBStkSize;INT16UOSTCBOpt;INT16UOSTCBId;#endifstructos_tcb*OSTCBNext;structos_tcb*OSTCBPrev;#if(OS_Q_EN&&(OS_MAX_QS=2))||OS_MBOX_EN||OS_SEM_ENOS_EVENT*OSTCBEventPtr;#endif19#if(OS_Q_EN&&(OS_MAX_QS=2))||OS_MBOX_ENvoid*OSTCBMsg;#endifINT16UOSTCBDly;INT8UOSTCBStat;INT8UOSTCBPrio;INT8UOSTCBX;INT8UOSTCBY;INT8UOSTCBBitX;INT8UOSTCBBitY;#ifOS_TASK_DEL_ENBOOLEANOSTCBDelReq;#endif}OS_TCB;20uC/OS-II任务概述OSTCBStkPtr:指向当前任务堆栈栈顶的指针。OSTCBExtPtr:指向用户定义的任务控制块扩展的指针。用户可以扩展任务控制块而不必修改μCOS-Ⅱ的源代码,只在函数OstaskCreateExt()中使用,使用时将OS_TASK_CREAT_EN设为1.OSTCBStkBottom:指向任务堆栈栈底的指针。递减栈指针指向任务使用的栈空间的最低地址;递增型栈则指向栈空间的最高地址。。21uC/OS-II任务概述OSTCBStkSize:堆栈尺寸。OSTCBOpt:OSTaskCreateExt()中的选项,μCOS-Ⅱ目前只支持3个选择项:OS_TASK_OTP_STK_CHK-STK检查OS_TASK_OPT_STK_CLR-清零OS_TASK_OPT_SAVE_FP-浮点运算22uC/OS-II任务概述OSTCBId:存储任务的识别码。OSTCBNext和OSTCBPrev:任务控制块OS_TCBs双向链接,将任务控制块链接起来。OSTCBEventPtr:指向事件控制块的指针。OSTCBMsg:指向传给任务的消息的指针23uC/OS-II任务概述OSTCBDly:任务延时的时钟节拍数。当需要把任务延时若干时钟节拍时,或者需要把任务挂起一段时间以等待某事件的发生时需要用到这个变量。如果这个变量为0,表示任务不延时,或者表示等待事件发生的时间没有限制.24uC/OS-II任务概述OSTCBStat:任务状态字,可取下列值:OS_STAT_RDY:处于就绪状态OS_STAT_SEM:处于等待信号量状态OS_STAT_MBOX:处于等待邮箱状态OS_STAT_Q:处于等待消息队列状态OS_STAT_SUSPEND:处于被挂起状态OS_STAT_MUTEX:处于等待互斥信号量状态25uC/OS-II任务概述OSTCBPrio:任务优先级。高优先级任务的OSTCBPrio值小,低优先级任务的OSTCBPrio值大OSTCBX、OSTCBY、OSTCBBitX与OSTCBBitY:与优先级有关的量,用于加速任务进入就绪态的过程或进入等待事件发生状态的过程。这些值是在任务建立时算好的,或者是在改变任务优先级时算出的。26OSTCBX、OSTCBY、OSTCBBitX与OSTCBBitY的计算OSTCBY=priority3;OSTCBBitY=OSMapTbl[priority3];OSTCBX=priority&0x07;OSTCBBitX=OSMapTbl[priority&0x07];OSMapTbl[]的值000000001100000010200000100300001000400010000500100000601000000IndexBitMask(Binary)710000000uC/OS-II任务概述27uC/OS-II任务概述OSTCBDelReq:一个布尔量,用于表示该任务是否需要删除。28uC/OS-II的任务管理uC/OS-II任务概述任务调度任务创建29任务调度就绪表是保存任务就绪标志的表,表中的每一位对应一个任务,某任务处于就绪态时,表中相应位置1;反知,若表中某位为0,则与此对应的任务就没有就绪.就绪表有两个变量:OSRdyGrp和OSRdyTbl[]OSRdyGrp1207654300XXXYYY任务优先级2017654310891514131211181617232221201926242531302928273432333938373635424041474645444350484955545352515856576362616059[0][1][2][3][4][5][6][7]OSRdyTbl[7]XY优先级最低任务(空闲任务)优先级最高任务任务优先级号30任务调度例设系统中优先级为7、12、21、63的任务就绪1000000XXXYYY任务优先级000000000000000000000000000000000000000000000000000000000000[0][1][2][3][4][5][6][7]OSRdyTbl[7]XY优先级最低任务(空闲任务)优先级最高任务任务优先级号OSRdyGrp010100010001111131任务调度OSMapTbl[]的值000000001100000010200000100300001000400010000500100000601000000IndexBitMask(Binary)710000000OSRdyGrp|=OSMapTbl[prio3];OSRdyTbl[prio3]|=OSMapTbl[prio&0x07];①使任务进入就绪态:0010000000XXXYYY任务优先级0001000000000000000000000000000000000000000000000000000000000000[0][1]
本文标题:第5章 嵌入式操作系统
链接地址:https://www.777doc.com/doc-3361300 .html