嵌入式系统教学课件:ucos-ii代码总结分析(同名1369).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式系统教学课件:ucos-ii代码总结分析(同名1369).ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 教学 课件 ucos ii 代码 总结 分析 同名 1369
- 资源描述:
-
1、1第四章第四章 实时操作系统实时操作系统 C/OS-C/OS-分析分析2实时操作系统实时操作系统C/OS-II C/OS-II概述概述任务管理任务管理中断和时间中断和时间管理管理任务之间的通信与任务之间的通信与同步同步存储管理存储管理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,CLinux,C/OS/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 LabrosseJean Labrosse 1992 1992年完成年完成l应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等机控制、高速公路电话系统、自动提款机等 l19981998年年 C/OSC/OS-II-II,目前的版本,目
6、前的版本 C/OSC/OS-II V2.61-II V2.61,2.722.72l20002000年,得到美国航空管理局(年,得到美国航空管理局(FAAFAA)的认证,可以用于飞行器)的认证,可以用于飞行器中中l网站网站www.ucos-II.comwww.ucos-II.com()8u公开源代码公开源代码u可移植性(可移植性(PortablePortable)绝大部分绝大部分 C/OS-II C/OS-II的源码是用移植性很强的的源码是用移植性很强的ANSI CANSI C写的。和微处理器写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最硬件相关的那部分是用汇编语言
7、写的。汇编语言写的部分已经压到最低限度,使得低限度,使得 C/OS-II C/OS-II便于移植到其他微处理器上。便于移植到其他微处理器上。C/OS-II C/OS-II可以在可以在绝大多数绝大多数8 8位、位、1616位、位、3232位以至位以至6464位微处理器、微控制器位微处理器、微控制器 、数字信号处、数字信号处理器(理器(DSPDSP)上运行。)上运行。u可固化(可固化(ROMableROMable)C/OS-II C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(段(C C编译、连接、下载和固化),编译、连接、
8、下载和固化),C/OS-II C/OS-II可以嵌入到读者的产品可以嵌入到读者的产品中成为产品的一部分。中成为产品的一部分。u可裁剪(可裁剪(ScalableScalable)可以只使用可以只使用 C/OS-II C/OS-II中应用程序需要的那些系统服务。也就是说某产中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个品可以只使用很少几个 C/OS-II C/OS-II调用,而另一个产品则使用了几乎所调用,而另一个产品则使用了几乎所有有 C/OS-II C/OS-II的功能,这样可以减少产品中的的功能,这样可以减少产品中的 C/OS-II C/OS-II所需的存储器空所需的存储器空
9、间(间(RAMRAM和和ROMROM)。这种可剪裁性是靠条件编译实现的。)。这种可剪裁性是靠条件编译实现的。C/OS的性能特点(一)9u占先式(占先式(PreemptivePreemptive)u多任务多任务 C/OS-IIC/OS-II可以管理可以管理6464个任务,然而,目前这一版本保留个任务,然而,目前这一版本保留8 8个给系统。应用程序最个给系统。应用程序最多可以有多可以有256256个任务个任务u可确定性可确定性 全部全部 C/OS-II C/OS-II的函数调用与服务的执行时间具有可确定性。的函数调用与服务的执行时间具有可确定性。u任务栈任务栈 每个任务有自己单独的栈,每个任务有自
10、己单独的栈,C/OS-II C/OS-II允许每个任务有不同的栈空间,以便压低应允许每个任务有不同的栈空间,以便压低应用程序对用程序对RAMRAM的需求。的需求。u系统服务系统服务 C/OS-IIC/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。的申请与释放、时间相关函数等。u中断管理中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中
11、断嵌套层数可达高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255255层。层。u稳定性与可靠性稳定性与可靠性C/OS的性能特点(二)10 C/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-5
12、11C/OS-II的各种商业应用l全世界有数百种产品在应用全世界有数百种产品在应用:lAvionicslMedicallCell phoneslRouters and switcheslHigh-end audio equipmentlWashing machines and dryerslUPS(Uninterruptible Power Supplies)lIndustrial controllerslGPS Navigation SystemslMicrowave RadioslInstrumentationlPoint-of-sale terminalsl更多更多12C/OS-II提供
13、的系统服务l信号量信号量l带互斥机制的信号量带互斥机制的信号量n减少优先级倒置的问题减少优先级倒置的问题l事件标志事件标志l消息信箱消息信箱l消息队列消息队列l内存管理内存管理l时钟管理时钟管理l任务管理任务管理操作系统的概述操作系统的概述13C/OS-II的文件结构14 C/OS-II概述概述任务管理任务管理中断和时间中断和时间管理管理任务之间的通信与任务之间的通信与同步同步存储管理存储管理15任务的实现任务的实现创建任务的系统服务创建任务的系统服务lOSTaskCreate()INT8U OSTaskCreate(void(*task)(void*pd),/任务代码指针任务代码指针 voi
14、d*pdata,/任务参数指针任务参数指针OS_STK*ptos,/任务栈的栈顶指针任务栈的栈顶指针 INT8U prio /任务的优先级任务的优先级);lOSTaskCreateExt()提问:提问:C/OS-II中的任务是进程还是线程?中的任务是进程还是线程?16任务主函数任务主函数一个任务通常是一个无限循环(返回值类型一个任务通常是一个无限循环(返回值类型voidvoid)void MyTask(void*pdata)while(1)do something;waiting;do something;Why?17任务也可以自我删除(并非真的删除,只是内核不任务也可以自我删除(并非真的删除
15、,只是内核不再知道该任务)再知道该任务)void MyTask(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_
16、LOWEST_PRI0-2,OS_LOWEST_PRI0-1OS_LOWEST_PRI0-1以及以及OS_LOWEST_PRI0OS_LOWEST_PRI0这这8 8个任个任务以被将来使用,用户可以有务以被将来使用,用户可以有5656个应用任务;个应用任务;l任务的优先级同样也是它的标识号任务的优先级同样也是它的标识号IDID。OS_CFG.H中定义中定义6319空闲任务和统计任务空闲任务和统计任务l内核总是创建一个内核总是创建一个空闲任务空闲任务OSTaskIdleOSTaskIdle()();w总是设置为最低优先级,总是设置为最低优先级,OS_LOWEST_PRIOROS_LOWEST_P
17、RIOR;w当所有其他任务都未在执行时,空闲任务开始当所有其他任务都未在执行时,空闲任务开始执行;执行;w应用程序不能删除该任务;应用程序不能删除该任务;w空闲任务的工作就是把空闲任务的工作就是把3232位计数器位计数器OSIdleCtrOSIdleCtr加加1 1,该计数器被统计任务所使用;,该计数器被统计任务所使用;l统计任务统计任务OSTaskStatOSTaskStat()(),提供运行时间统计。每,提供运行时间统计。每秒钟运行一次,计算当前的秒钟运行一次,计算当前的CPUCPU利用率。其优先级利用率。其优先级是是OS_LOWEST_PRIOR-1OS_LOWEST_PRIOR-1,可
18、选。,可选。20任务控制块任务控制块TCBTCBl任务控制块任务控制块 OS_TCBOS_TCB是描述一个任务的核是描述一个任务的核心数据结构,存放了它的各种管理信息心数据结构,存放了它的各种管理信息,包括任务堆栈指针,任务的状态、优,包括任务堆栈指针,任务的状态、优先级,任务链表指针等;先级,任务链表指针等;l一旦任务建立了,任务控制块一旦任务建立了,任务控制块OS_TCBOS_TCB将将被赋值。被赋值。21任务控制块任务控制块TCBTCBtypedef struct os_tcb 栈指针;栈指针;INT16U OSTCBId;/*任务的任务的ID*/链表指针;链表指针;OS_EVENT*O
19、STCBEventPtr;/*事件指针事件指针*/void *OSTCBMsg;/*消息指针消息指针*/INT8U OSTCBStat;/*任务的状态任务的状态*/INT8U OSTCBPrio;/*任务的优先级任务的优先级*/其他其他 OS_TCB;22栈指针栈指针lOSTCBStkPtrOSTCBStkPtr:指向当前任务栈顶的指针指向当前任务栈顶的指针,每个任务可以有自己的栈,栈的容量可,每个任务可以有自己的栈,栈的容量可以是任意的;以是任意的;lOSTCBStkBottomOSTCBStkBottom:指向任务栈底的指针;:指向任务栈底的指针;lOSTCBStkSizeOSTCBStk
20、Size:栈的容量,用可容纳的指:栈的容量,用可容纳的指针数目而不是字节数(针数目而不是字节数(ByteByte)来表示。)来表示。2324链表指针链表指针l所有的任务控制块分属于两条不同的链表所有的任务控制块分属于两条不同的链表,单向的,单向的空闲链表空闲链表(头指针为(头指针为OSTCBFreeListOSTCBFreeList)和双向的)和双向的使用链表使用链表(头(头指针为指针为OSTCBListOSTCBList););lOSTCBNextOSTCBNext、OSTCBPrevOSTCBPrev:用于将任务控制用于将任务控制块插入到空闲链表或使用链表中。每个任块插入到空闲链表或使用链
21、表中。每个任务的任务控制块在任务创建的时候被链接务的任务控制块在任务创建的时候被链接到使用链表中,在任务删除的时候从链表到使用链表中,在任务删除的时候从链表中被删除。双向连接的链表使得任一成员中被删除。双向连接的链表使得任一成员都能快速插入或删除。都能快速插入或删除。25空闲空闲TCBTCB链表链表l所有的任务控制块都被放置在任务控制块列表数组所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl中,系统初始化时,所有中,系统初始化时,所有TCBTCB被链接成空闲的被链接成空闲的单向链表,头指针为单向链表,头指针为OSTCBFreeListOSTCBFreeList。当创建一个任务后。当
22、创建一个任务后,就把,就把OSTCBFreeListOSTCBFreeList所指向的所指向的TCBTCB赋给了该任务,并将它赋给了该任务,并将它加入到使用链表中,然后把加入到使用链表中,然后把OSTCBFreeListOSTCBFreeList指向空闲链表指向空闲链表中的下一个结点。中的下一个结点。26系统初始化后系统初始化后指针数组,指向相应指针数组,指向相应TCB27任务的状态休眠任务的状态休眠l休眠状态休眠状态(Dormant):任务存在于内存:任务存在于内存空间中,但内核不可见;空间中,但内核不可见;l可以通过以下函数通知内核,使之变为就可以通过以下函数通知内核,使之变为就绪状态:绪
23、状态:OSTaskCreate()或或OSTaskCreateExt()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(),OSTimeDlyR
展开阅读全文