嵌入式系统教学课件:ucos-ii代码总结分析.ppt
《嵌入式系统教学课件:ucos-ii代码总结分析.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统教学课件:ucos-ii代码总结分析.ppt(159页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、1第四章第四章 实时操作系统实时操作系统 C/OS-C/OS-分析分析2实时操作系统实时操作系统C/OS-II1 13 32 24 4 C/OS-II概述概述任务管理任务管理中断和时间中断和时间管理管理任务之间的通信与任务之间的通信与同步同步5 5存储管理存储管理3通用操作系统和嵌入式(实时)操作系统通用操作系统和嵌入式(实时)操作系统l通用操作系统:通用操作系统:Windows/NT/XPWindows/NT/XP、LinuxLinux、UNIXUNIX等,用于等,用于PCPC机、服务器,机、服务器,l嵌入式(实时)操作系统:用于嵌入式设备的操作系统,嵌入式(实时)操作系统:用于嵌入式设备的
2、操作系统,具有通用操作系统的基本特点,又具有系统实时性、硬具有通用操作系统的基本特点,又具有系统实时性、硬件的相关依赖性、软件固态化以及应用的专用性等特点;件的相关依赖性、软件固态化以及应用的专用性等特点;l嵌入式(实时)操作系统通常包括与硬件相关的底层驱嵌入式(实时)操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器面、标准化浏览器BrowserBrowser等;等;l嵌入式(实时)操作系统的重要指标:实时性(中断响嵌入式(实时)操作系统的重要指标:实时性(中断响应时间、任务切换时间等)、尺寸(可
3、裁剪性应时间、任务切换时间等)、尺寸(可裁剪性 )、可)、可扩展性(内核、中间件);扩展性(内核、中间件);4嵌入式操作系统的发展嵌入式操作系统的发展操作系统内核操作系统内核应用程序应用程序驱动程序和固件驱动程序和固件操作系统内核操作系统内核文件系统文件系统驱动程序和固件驱动程序和固件API GUI应用程序应用程序操作系统内核操作系统内核文件系统文件系统驱动程序和固件驱动程序和固件API GUI应用程序应用程序通信协议通信协议库函数库函数80年代初期年代初期80年代中期年代中期-90年代中年代中期期90年代末期年代末期-21世纪世纪5常见的嵌入式操作系统常见的嵌入式操作系统 实时嵌入式操作系统
4、的种类繁多,大体上可分实时嵌入式操作系统的种类繁多,大体上可分为两种,商用型和免费型。为两种,商用型和免费型。l商用型的实操作系统功能稳定、可靠,有完善商用型的实操作系统功能稳定、可靠,有完善的技术支持和售后服务,但往往价格昂贵的技术支持和售后服务,但往往价格昂贵,如如VxworksVxworks、QNXQNX、WinCEWinCE、Palm OSPalm OS等。等。l免费型的实时操作系统在价格方面具有优势,免费型的实时操作系统在价格方面具有优势,目前主要有目前主要有Linux,C/OSLinux,C/OS是一种源码开放的商是一种源码开放的商业业RTOSRTOS;6RTOSRTOS在嵌入式系
5、统中的位置在嵌入式系统中的位置嵌入式硬件平台BSPKERNELFSTCP/IP设备驱动设备驱动设备设备I/O调试工具调试工具其它组件其它组件应用RTOSC/C+7C/OS简介1、C/OSMicro Controller O S,微控制器操作系统2 2、C/OSC/OS简介l美国人美国人Jean Labrosse 1992Jean Labrosse 1992年完成年完成l应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等机控制、高速公路电话系统、自动提款机等 l19981998年年 C/OSC/O
6、S-II-II,目前的版本,目前的版本 C/OSC/OS-II V2.61-II V2.61,2.722.72l20002000年,得到美国航空管理局(年,得到美国航空管理局(FAAFAA)的认证,可以用于飞行器)的认证,可以用于飞行器中中l网站(网站()8u公开源代码公开源代码u可移植性(可移植性(PortablePortable)绝大部分绝大部分 C/OS-IIC/OS-II的源码是用移植性很强的的源码是用移植性很强的ANSI CANSI C写的。和微处理器写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到
7、最低限度,使得低限度,使得 C/OS-IIC/OS-II便于移植到其他微处理器上。便于移植到其他微处理器上。C/OS-IIC/OS-II可以在可以在绝大多数绝大多数8 8位、位、1616位、位、3232位以至位以至6464位微处理器、微控制器位微处理器、微控制器 、数字信号处、数字信号处理器(理器(DSPDSP)上运行。上运行。u可固化(可固化(ROMableROMable)C/OS-IIC/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(段(C C编译、连接、下载和固化),编译、连接、下载和固化),C/OS-IIC/OS-
8、II可以嵌入到读者的产品可以嵌入到读者的产品中成为产品的一部分。中成为产品的一部分。u可裁剪(可裁剪(ScalableScalable)可以只使用可以只使用 C/OS-IIC/OS-II中应用程序需要的那些系统服务。也就是说某产中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个品可以只使用很少几个 C/OS-IIC/OS-II调用,而另一个产品则使用了几乎所调用,而另一个产品则使用了几乎所有有 C/OS-IIC/OS-II的功能,这样可以减少产品中的的功能,这样可以减少产品中的 C/OS-IIC/OS-II所需的存储器空所需的存储器空间(间(RAMRAM和和ROMROM)。)。这种
9、可剪裁性是靠条件编译实现的。这种可剪裁性是靠条件编译实现的。C/OS的性能特点(一)9u占先式(占先式(PreemptivePreemptive)u多任务多任务 C/OS-IIC/OS-II可以管理可以管理6464个任务,然而,目前这一版本保留个任务,然而,目前这一版本保留8 8个给系统。应用程序最多个给系统。应用程序最多可以有可以有256256个任务个任务u可确定性可确定性 全部全部 C/OS-IIC/OS-II的函数调用与服务的执行时间具有可确定性。的函数调用与服务的执行时间具有可确定性。u任务栈任务栈 每个任务有自己单独的栈,每个任务有自己单独的栈,C/OS-IIC/OS-II允许每个任
10、务有不同的栈空间,以便压低应允许每个任务有不同的栈空间,以便压低应用程序对用程序对RAMRAM的需求。的需求。u系统服务系统服务 C/OS-IIC/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。的申请与释放、时间相关函数等。u中断管理中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达高优先级的任务在中断嵌套全部退出后立即
11、执行,中断嵌套层数可达255255层。层。u稳定性与可靠性稳定性与可靠性C/OS的性能特点(二)10C/OS-IIC/OS-II图书图书l描述了描述了C/OS-IIC/OS-II内部的工作原理内部的工作原理l随书的随书的CDCD中包含了源代码中包含了源代码n工业界最清晰的源代码工业界最清晰的源代码l除英文版外,有中文和韩文版除英文版外,有中文和韩文版ChineseKoreanEnglishISBN 1-57820-103-9美国CMP BOOK ISBN 7-81077-290-2北京航空航天大学出版社ISBN 89-951540-5-511C/OS-II的各种商业应用l全世界有数百种产品在应
12、用全世界有数百种产品在应用:lAvionicslMedicallCell phoneslRouters and switcheslHigh-end audio equipmentlWashing machines and dryerslUPS(Uninterruptible Power Supplies)lIndustrial controllerslGPS Navigation SystemslMicrowave RadioslInstrumentationlPoint-of-sale terminalsl更多更多12C/OS-II提供的系统服务l信号量信号量l带互斥机制的信号量带互斥机制的
13、信号量n减少优先级倒置的问题减少优先级倒置的问题l事件标志事件标志l消息信箱消息信箱l消息队列消息队列l内存管理内存管理l时钟管理时钟管理l任务管理任务管理操作系统的概述操作系统的概述13C/OS-II的文件结构141 13 32 24 4 C/OS-II概述概述任务管理任务管理中断和时间中断和时间管理管理任务之间的通信与任务之间的通信与同步同步5 5存储管理存储管理15任务的实现任务的实现创建任务的系统服务创建任务的系统服务lOSTaskCreate()INT8UOSTaskCreate(void(*task)(void*pd),/任务代码指针任务代码指针void*pdata,/任务参数指针
14、任务参数指针OS_STK*ptos,/任务栈的栈顶指针任务栈的栈顶指针INT8Uprio/任务的优先级任务的优先级);lOSTaskCreateExt()提问:提问:C/OS-II中的任务是进程还是线程?中的任务是进程还是线程?16任务主函数任务主函数一个任务通常是一个无限循环(返回值类型一个任务通常是一个无限循环(返回值类型voidvoid)voidMyTask(void*pdata)while(1)dosomething;waiting;dosomething;Why?17任务也可以自我删除(并非真的删除,只是内核不任务也可以自我删除(并非真的删除,只是内核不再知道该任务)再知道该任务)v
15、oidMyTask(void*pdata)./*用户代码用户代码*/OSTaskDel(OS_PRIO_SELF);18lC/OS-C/OS-可以管理多达可以管理多达6464个任务;个任务;l每个任务被赋以不同的优先级,取值从每个任务被赋以不同的优先级,取值从0 0到到OS_LOWEST_PRIO-2OS_LOWEST_PRIO-2,数值越小,优先级越高;,数值越小,优先级越高;l系统保留了优先级为系统保留了优先级为0 0、1 1、2 2、3 3、OS_LOWEST_PRIO-3OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2OS_LOWEST_PRI0-2,OS_LOWES
16、T_PRI0-1OS_LOWEST_PRI0-1以及以及OS_LOWEST_PRI0OS_LOWEST_PRI0这这8 8个任务个任务以被将来使用,用户可以有以被将来使用,用户可以有5656个应用任务;个应用任务;l任务的优先级同样也是它的标识号任务的优先级同样也是它的标识号IDID。OS_CFG.H中定义中定义6319空闲任务和统计任务空闲任务和统计任务l内核总是创建一个内核总是创建一个空闲任务空闲任务OSTaskIdle()OSTaskIdle();w总是设置为最低优先级,总是设置为最低优先级,OS_LOWEST_PRIOROS_LOWEST_PRIOR;w当所有其他任务都未在执行时,空闲
17、任务开始当所有其他任务都未在执行时,空闲任务开始执行;执行;w应用程序不能删除该任务;应用程序不能删除该任务;w空闲任务的工作就是把空闲任务的工作就是把3232位计数器位计数器OSIdleCtrOSIdleCtr加加1 1,该计数器被统计任务所使用;,该计数器被统计任务所使用;l统计任务统计任务OSTaskStat()OSTaskStat(),提供运行时间统计。每,提供运行时间统计。每秒钟运行一次,计算当前的秒钟运行一次,计算当前的CPUCPU利用率。其优先级利用率。其优先级是是OS_LOWEST_PRIOR-1OS_LOWEST_PRIOR-1,可选。,可选。20任务控制块任务控制块TCBT
18、CBl任务控制块任务控制块 OS_TCB OS_TCB是描述一个任务的核是描述一个任务的核心数据结构,存放了它的各种管理信息,心数据结构,存放了它的各种管理信息,包括任务堆栈指针,任务的状态、优先包括任务堆栈指针,任务的状态、优先级,任务链表指针等;级,任务链表指针等;l一旦任务建立了,任务控制块一旦任务建立了,任务控制块OS_TCBOS_TCB将将被赋值。被赋值。21任务控制块任务控制块TCBTCBtypedefstructos_tcb栈栈指指针针;INT16UOSTCBId;/*任任务务的的ID*/链链表指表指针针;OS_EVENT*OSTCBEventPtr;/*事件指事件指针针*/vo
19、id*OSTCBMsg;/*消息指消息指针针*/INT8UOSTCBStat;/*任任务务的状的状态态*/INT8UOSTCBPrio;/*任任务务的的优优先先级级*/其他其他OS_TCB;22栈指针栈指针lOSTCBStkPtrOSTCBStkPtr:指向当前任务栈顶的指针,指向当前任务栈顶的指针,每个任务可以有自己的栈,栈的容量可以每个任务可以有自己的栈,栈的容量可以是任意的;是任意的;lOSTCBStkBottomOSTCBStkBottom:指向任务栈底的指针;:指向任务栈底的指针;lOSTCBStkSizeOSTCBStkSize:栈的容量,用可容纳的指:栈的容量,用可容纳的指针数目
20、而不是字节数(针数目而不是字节数(ByteByte)来表示。)来表示。2324链表指针链表指针l所有的任务控制块分属于两条不同的链表,所有的任务控制块分属于两条不同的链表,单向的单向的空闲链表空闲链表(头指针为(头指针为OSTCBFreeListOSTCBFreeList)和双向的)和双向的使用链表使用链表(头(头指针为指针为OSTCBListOSTCBList););lOSTCBNextOSTCBNext、OSTCBPrevOSTCBPrev:用于将任务控制用于将任务控制块插入到空闲链表或使用链表中。每个任块插入到空闲链表或使用链表中。每个任务的任务控制块在任务创建的时候被链接务的任务控制块
21、在任务创建的时候被链接到使用链表中,在任务删除的时候从链表到使用链表中,在任务删除的时候从链表中被删除。双向连接的链表使得任一成员中被删除。双向连接的链表使得任一成员都能快速插入或删除。都能快速插入或删除。25空闲空闲TCBTCB链表链表l所有的任务控制块都被放置在任务控制块列表数组所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl中,系统初始化时,所有中,系统初始化时,所有TCBTCB被链接成空闲的单向链表,被链接成空闲的单向链表,头指针为头指针为OSTCBFreeListOSTCBFreeList。当创建一个任务后,就把。当创建一个任务后,就把OSTCBFreeListOSTCB
22、FreeList所指向的所指向的TCBTCB赋给了该任务,并将它加入到赋给了该任务,并将它加入到使用链表中,然后把使用链表中,然后把OSTCBFreeListOSTCBFreeList指向空闲链表中的下一指向空闲链表中的下一个结点。个结点。26系统初始化后系统初始化后指针数组,指向相应指针数组,指向相应TCB27任务的状态休眠任务的状态休眠l休眠状态休眠状态(Dormant):任务存在于内存):任务存在于内存空间中,但内核不可见;空间中,但内核不可见;l可以通过以下函数通知内核,使之变为就可以通过以下函数通知内核,使之变为就绪状态:绪状态:OSTaskCreate()或或OSTaskCreat
23、eExt()l可以通过以下函数返回到休眠状态:可以通过以下函数返回到休眠状态:OSTaskDel()28任务的状态就绪任务的状态就绪l就绪状态就绪状态(Ready):万事具备,只欠):万事具备,只欠CPU;l在所有的就绪任务当中,具有最高优先级在所有的就绪任务当中,具有最高优先级的任务被选中去运行;的任务被选中去运行;l如果任务在运行的时候被抢占了如果任务在运行的时候被抢占了CPU,则,则又回到就绪状态。又回到就绪状态。29任务的状态运行任务的状态运行l运行状态运行状态(Running):任务在):任务在CPU上运上运行;行;l当一个任务在运行时,如果没有关闭中断,当一个任务在运行时,如果没有
24、关闭中断,则有可能被中断所打断;则有可能被中断所打断;l当一个任务在运行时,可能因为各种原因进当一个任务在运行时,可能因为各种原因进入阻塞状态。入阻塞状态。OSMBoxPend(),OSQPend(),OSSemPend()OSTaskSuspend(),OSTimeDly()30任务的状态任务的状态ISRISRl中断服务状态中断服务状态(ISR):该任务原来在):该任务原来在CPU上运行,后来被中断所打断,由中断服务程上运行,后来被中断所打断,由中断服务程序序ISR接管了接管了CPU;l当中断服务程序运行完毕后,内核要判断是当中断服务程序运行完毕后,内核要判断是否有新的、更高优先级的任务就绪
25、,如果有,否有新的、更高优先级的任务就绪,如果有,则原有的任务被抢占;如果没有,则原有的则原有的任务被抢占;如果没有,则原有的任务重新运行。任务重新运行。31任务的状态阻塞任务的状态阻塞l阻塞阻塞/等待状态等待状态(Waiting):任务由于正在):任务由于正在等待某个事件(信号量、邮箱或队列)而被等待某个事件(信号量、邮箱或队列)而被挂起;挂起;l当任务等待的事件发生时,回到就绪状态。当任务等待的事件发生时,回到就绪状态。OSMBoxpost(),OSQPost(),OSSemPost(),OSTaskResume(),OSTimeDlyResume()或或OSTimeTick()32状态的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 教学 课件 ucos ii 代码 总结 分析
限制150内