嵌入式系统原理与开发Ch5-μCOS-II嵌入式操作系统课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式系统原理与开发Ch5-μCOS-II嵌入式操作系统课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 原理 开发 Ch5 COS II 操作系统 课件
- 资源描述:
-
1、C/OS-II嵌入式操作系统嵌入式操作系统本课程的主要内容本课程的主要内容uC/OS-II是由是由Jean J.Labrosse于于1992年编写年编写的一个嵌入式多任务实时操作系统。的一个嵌入式多任务实时操作系统。u最早这个系统叫做最早这个系统叫做C/OS,后来经过近,后来经过近10年的应用年的应用和修改,在和修改,在1999年年Jean J.Labrosse推出了推出了C/OS-II,并在,并在2000年得到了美国联邦航空管理局年得到了美国联邦航空管理局对用于商用飞机的、符合对用于商用飞机的、符合RTCA DO-178B标准的认证标准的认证,从而证明,从而证明C/OS-II具有足够的稳定性
2、和安全性。具有足够的稳定性和安全性。u目前,最新版本为目前,最新版本为C/OS-III。u1.C/OS-II的特点的特点lC/OS-II是用是用C语言和汇编语言编写的。用户只要做很少工语言和汇编语言编写的。用户只要做很少工作就可把它移植到各类作就可把它移植到各类8位、位、16位和位和32位嵌入式处理器上。位嵌入式处理器上。lC/OS-II最多可以管理最多可以管理64个任务。个任务。lC/OS-II是可剥夺型内核。是可剥夺型内核。l由于由于C/OS-II的构思巧妙、结构简洁精练、可读性的构思巧妙、结构简洁精练、可读性极强极强,同时又具备了实时操作系统的全部功能,并且源码开放。同时又具备了实时操作
3、系统的全部功能,并且源码开放。l虽然虽然C/OS-II只是一个内核,但非常适合初次接触嵌入式只是一个内核,但非常适合初次接触嵌入式实时操作系统的学生、开发人员和爱好者学习,并且通过适当实时操作系统的学生、开发人员和爱好者学习,并且通过适当地扩展之后,还可应用到实际系统中去。地扩展之后,还可应用到实际系统中去。lC/OS-II已经有已经有ARM7TDMI、ARM9等各种等各种ARM CPU移植,移植,支持包含支持包含Atmel、Hynix、Intel、Motorola、Philips、Samsung、Sharp等公司的等公司的ARM核的核的CPU。u1.C/OS-II的特点的特点lC/OS-II
4、的移植也相当容易,与的移植也相当容易,与CPU相关的代码包装在三相关的代码包装在三个文件中:个文件中:os_cpu.h、os_cpu_a.asm和和os_cpu_c.c。lC/OS-II内核含有内核含有60多个系统调用,覆盖任务、定时器、多个系统调用,覆盖任务、定时器、信号量、事件标志、邮箱、队列和内存管理,已经包含了传统信号量、事件标志、邮箱、队列和内存管理,已经包含了传统嵌入式操作系统内核嵌入式操作系统内核(如如PSOS,VRTX)的功能,还支持互斥型的功能,还支持互斥型信号量,这是如信号量,这是如VxWorks和和VRTXsa才有的技术。才有的技术。lC/OS-II没有用户态和内核态,任
5、务没有用户态和内核态,任务(线程线程)或中断和任务或中断和任务切换的响应可以很快,主要是和切换的响应可以很快,主要是和ARM CPU相关的。相关的。lC/OS-II的的2.7x之后的版本还增加了算法以避免在移植中之后的版本还增加了算法以避免在移植中修改堆栈指针,这样可以保证修改堆栈指针,这样可以保证C/OS-II在不同的在不同的CPU上运行上运行更稳定,移植更方便。更稳定,移植更方便。u1.C/OS-II的特点的特点lC/OS-II目前除了内核外,还有商业化文件系统目前除了内核外,还有商业化文件系统C/FS,图形系统图形系统C/GUI以及任务调试工具以及任务调试工具C/KA和和C/View,但
6、是,但是C/OS-II自己目前还没有自己目前还没有TCP/IP协议系统。协议系统。lC/OS-II是一个非常容易学习,结构简单,功能完备和实是一个非常容易学习,结构简单,功能完备和实时性很强的嵌入式操作系统内核,适合于各种嵌入式应用以及时性很强的嵌入式操作系统内核,适合于各种嵌入式应用以及大专院校教学和科研。大专院校教学和科研。l最后需要说明,最后需要说明,C/OS-II不是免费软件,任何人学习使用不是免费软件,任何人学习使用C/OS-II需要购买需要购买嵌入式实时操作系统嵌入式实时操作系统C/OS-II一书一书,使用,使用C/OS-II的产品需要购买产品生产授权,购买了此授的产品需要购买产品
7、生产授权,购买了此授权的还可以得到开发期间的技术支持和升级服务。权的还可以得到开发期间的技术支持和升级服务。u2.C/OS-II的移植的移植l移植移植C/OS-II对目标处理器有一定要求,整个嵌入式系统对目标处理器有一定要求,整个嵌入式系统分为两大层:硬件层和软件层。分为两大层:硬件层和软件层。l软件层主要分为四个部分:实时操作系统内核,与处理器相软件层主要分为四个部分:实时操作系统内核,与处理器相关部分,与应用相关部分,用户的应用系统。这里主要研究软关部分,与应用相关部分,用户的应用系统。这里主要研究软件层的架构。件层的架构。C/OS-II的体系结构如图的体系结构如图6.1所示。所示。u2.
8、C/OS-II的移植的移植lC/OS-II的体系结构如图的体系结构如图6.1所示。所示。用户程序用户程序C/OS-IIC/OS-II与处理器无关的代码与处理器无关的代码 C/OS-II与应用程序相关的代码与应用程序相关的代码OS_CORE.COS_FLAG.COS_MBOX.COS_MEM.COS_MUTEX.COS_Q.COS_SEM.COS_TASK.COS_TIME.CC/OS-II.CC/OS-II.HOS_CFG.HINCLUDES.HC/OS-II与处理器相关的代码与处理器相关的代码OS_CPU.HOS_CPU_A.ASMOS_CPU_C.C软件层软件层硬件层硬件层CPUTIMER
9、图图6.1:C/OS-II的体系结构的体系结构u2.C/OS-II的移植的移植lC/OS-II的文件说明的文件说明OS_CORE.COS_FLAG.COS_MBOX.COS_MEM.COS_MUTEX.COS_Q.COS_SEM.COS_TASK.COS_TIME.CC/OS-II.CC/OS-II.HOS_CFG.HINCLUDES.HuC/OS-II操作系统内核的主要工作就是对任务进操作系统内核的主要工作就是对任务进行管理和调度。弄清楚什么是任务、任务的结构和任行管理和调度。弄清楚什么是任务、任务的结构和任务的管理方法,对于理解务的管理方法,对于理解C/OS-II的体系结构无疑的体系结构无
10、疑是极其重要的。是极其重要的。u在在C/OS-II中,把完成特定功能的程序实体就叫中,把完成特定功能的程序实体就叫做做任务任务。C/OS-II就是一个能对这些任务的运行就是一个能对这些任务的运行进行管理和调度的多任务操作系统内核。进行管理和调度的多任务操作系统内核。u从应用程序设计的角度来看,从应用程序设计的角度来看,C/OS-II的任务就的任务就是一个线程,就是一个用来解决用户问题的是一个线程,就是一个用来解决用户问题的C语言函数语言函数和与之相关联的一些数据结构而构成的一个实体。和与之相关联的一些数据结构而构成的一个实体。u从任务的类型来看,从任务的类型来看,C/OS-II的任务有两种:用
11、的任务有两种:用户任务和系统任务。由应用程序设计者编写的任务,户任务和系统任务。由应用程序设计者编写的任务,叫做用户任务;由系统提供的任务叫做系统任务。用叫做用户任务;由系统提供的任务叫做系统任务。用户任务是为解决应用问题而编写的;系统任务是为应户任务是为解决应用问题而编写的;系统任务是为应用程序来提供某种服务的。用程序来提供某种服务的。u从任务的存储结构来看,从任务的存储结构来看,C/OS-II的任务由如图的任务由如图6.2所示的三个组成部分构成:任务程序代码、任务所示的三个组成部分构成:任务程序代码、任务堆栈和任务控制块。其中,任务控制块用来保存任务堆栈和任务控制块。其中,任务控制块用来保
12、存任务属性;任务堆栈用来保存任务工作环境;任务程序代属性;任务堆栈用来保存任务工作环境;任务程序代码是任务的执行部分。码是任务的执行部分。u为了管理上的方便,为了管理上的方便,C/OS-II把每一个任务都作把每一个任务都作为一个节点,然后把它们链接成如图图为一个节点,然后把它们链接成如图图6.3所示的一所示的一个任务链表。目前,个任务链表。目前,C/OS-II最多可以对最多可以对64个任务个任务(包括用户任务和系统任务)进行管理。(包括用户任务和系统任务)进行管理。uC/OS-II的任务结构如图的任务结构如图6.2所示所示uC/OS-II任务管理链表如图任务管理链表如图6.3所示所示u1.任务
13、的状态任务的状态l在单处理器的嵌入式系统中,某一个具体时刻只能允许一个在单处理器的嵌入式系统中,某一个具体时刻只能允许一个任务占用任务占用CPU。根据任务是否占用。根据任务是否占用CPU,及是否处于被中断、,及是否处于被中断、等待等情况,任务在等待等情况,任务在C/OS-II中可能处于表中可能处于表2-1所列的所列的5种种状态之一。状态之一。表表6.1:任务的:任务的5种状态种状态任务的状态任务的状态说明说明睡眠状态睡眠状态任务只是以代码的形式驻留在程序空间(任务只是以代码的形式驻留在程序空间(ROM或或RAM),还没有交给操作系),还没有交给操作系统管理时的情况叫做睡眠状态。简单地说,任务在
14、没有被配备任务控制块或统管理时的情况叫做睡眠状态。简单地说,任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫做任务的睡眠状态被剥夺了任务控制块时的状态叫做任务的睡眠状态就绪状态就绪状态如果系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,则任如果系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,则任务就具备了运行的充分条件,这时任务的状态叫做就绪状态务就具备了运行的充分条件,这时任务的状态叫做就绪状态运行状态运行状态处于就绪状态的任务如果经调度器判断获得了处于就绪状态的任务如果经调度器判断获得了CPU的使用权,则任务就进入的使用权,则任务就进入运行状态任何时刻只能有一个
15、任务处于运行状态,就绪的任务只有当所有优运行状态任何时刻只能有一个任务处于运行状态,就绪的任务只有当所有优先级高于本任务的任务都转为等待状态时,才能进入运行状态先级高于本任务的任务都转为等待状态时,才能进入运行状态等待状态等待状态正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把任务就会把CPU的使用权让给其它任务而使任务进入等待状态的使用权让给其它任务而使任务进入等待状态中断服务状态中断服务状态一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,一个正在运行的任务一旦响应中断申请就会中
16、止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态这时任务的状态叫做中断服务状态u1.任务的状态任务的状态l任务在不同状态之间的转换和相关的函数见图任务在不同状态之间的转换和相关的函数见图6.4。等待等待状态状态运行运行状态状态中断中断状态状态就绪就绪状态状态睡眠睡眠状态状态图图6.:任务状态的转换:任务状态的转换中断中断任务的任务的CPU使用权被剥夺使用权被剥夺OSStart()OSIntExit()OS_TASK_SW()OSTaskDel()OSIntExit()OSTaskDel()OSTaskDel()OSTaskCreate()OSTaskCreateExt()OSFlag
17、Pend()OSMboxPend()OSMutexPend()OSQPend()OSSemPend()OSTaskSuspend()OSTimeDel()OSTimeDelHMSM()OSFlagPost()OSMboxPost()OSMboxPostOpt()OSMutexPost()OSQPost()OSQPostFront()OSQPostOpy()OSSemPost()OSTaskResume()OSTimeTick()u2.用户任务用户任务l任务的执行代码通常是一个无限循环结构,并且在这个循环任务的执行代码通常是一个无限循环结构,并且在这个循环中可以响应中断,这种结构也叫做超循环结构
18、。中可以响应中断,这种结构也叫做超循环结构。l实例实例6.1:一个具有超循环结构的任务的示意性代码。一个:一个具有超循环结构的任务的示意性代码。一个用用C语言编写的任务。语言编写的任务。void UserTask(void)for(;)/可以被中断的用户代码可以被中断的用户代码OS_ENTER_CRITICAL();/进入临界段(关中断)进入临界段(关中断)/不可以被中断的用户代码不可以被中断的用户代码OS_EXIT_CRITICAL();/退出临界段(开中断)退出临界段(开中断)/可以被中断的用户代码可以被中断的用户代码/调用的系统服务调用的系统服务u2.用户任务用户任务l从程序设计的角度来
19、看,一个从程序设计的角度来看,一个C/OS-II任务的代码就是一任务的代码就是一个个C语言函数。为了传递各种不同类型的数据甚至是函数,任语言函数。为了传递各种不同类型的数据甚至是函数,任务的参数是一个务的参数是一个void类型的指针。类型的指针。l为了有效地对中断进行控制,在任务的代码里可使用为了有效地对中断进行控制,在任务的代码里可使用C/OS-II定义的进入临界段宏定义的进入临界段宏OS_ENTER-CRITICAL()和和退出临界段宏退出临界段宏OS_EXIT-CRITICAL()来控制任务何时响应中来控制任务何时响应中断,何时屏蔽中断。断,何时屏蔽中断。l在运行这两个宏之间的代码时是不
20、会响应中断的,这种受保在运行这两个宏之间的代码时是不会响应中断的,这种受保护的代码段叫做临界段。护的代码段叫做临界段。l在具体应用中可以,根据实际需要在一个任务中使用这对宏在具体应用中可以,根据实际需要在一个任务中使用这对宏设置多个临界段。因此可以说,设置多个临界段。因此可以说,C/OS-II任务的代码结构是任务的代码结构是一个带有临界段的无限循环。一个带有临界段的无限循环。u3.系统任务系统任务lC/OS-II预定义了两个为应用程序服务的系统任务:空闲预定义了两个为应用程序服务的系统任务:空闲任务和统计任务。其中空闲任务是每个应用程序必须使用的,任务和统计任务。其中空闲任务是每个应用程序必须
21、使用的,而统计任务则是应用程序可以根据实际需要来选择使用的。而统计任务则是应用程序可以根据实际需要来选择使用的。l(1)空闲任务空闲任务空闲状态:在多任务系统运行时,系统经常会在某个时间内无用户任空闲状态:在多任务系统运行时,系统经常会在某个时间内无用户任务可运行而处于所谓的空闲状态。务可运行而处于所谓的空闲状态。为了使为了使CPU在没有用户任务可执行时有事可做,在没有用户任务可执行时有事可做,C/OS-II提供了一个提供了一个叫做空闲任务叫做空闲任务OSTaskIdle()的系统任务。的系统任务。空闲任务几乎不做什么事情,只是对系统定义的一个空闲任务运行次空闲任务几乎不做什么事情,只是对系统
22、定义的一个空闲任务运行次数计数器数计数器OSIdleCtr进行加进行加1操作。当然,如果用户认为有必要,那么操作。当然,如果用户认为有必要,那么也可在空闲任务中编写一些做用户工作的代码。也可在空闲任务中编写一些做用户工作的代码。C/OS-II规定,一个用户应用程序必须使用这个空闲任务,而且这个规定,一个用户应用程序必须使用这个空闲任务,而且这个任务是不能用软件来删除的。任务是不能用软件来删除的。u3.系统任务系统任务l(2)统计任务统计任务C/OS-II提供的另一个系统任务是统计任务提供的另一个系统任务是统计任务OSTaskstat()。这个统计任务每秒计算一次这个统计任务每秒计算一次CPU在
23、单位时间内被使用的时间,并把计算在单位时间内被使用的时间,并把计算结果以百分比的形式存放在变量结果以百分比的形式存放在变量OSCPUsage中,以便应用程序通过访问中,以便应用程序通过访问它来了解它来了解CPU的利用率,所以该系统任务的利用率,所以该系统任务OSTaskstat()叫做统计任务叫做统计任务.用户应用程序是否使用统计任务,可以根据应用程序的实际需要来进用户应用程序是否使用统计任务,可以根据应用程序的实际需要来进行选择。行选择。如果应用程序要使用这个统计任务,则必须把定义在系统头文件如果应用程序要使用这个统计任务,则必须把定义在系统头文件OS_CFG.H中的系统配置常数中的系统配置
24、常数OS_TASK_STAT_EN设置为设置为1,并且必须在,并且必须在创建统计任务之前调用函数创建统计任务之前调用函数OSStatInit()对统计任务进行初始化。对统计任务进行初始化。u4.任务的优先级任务的优先级lC/OS-II的每个任务都必须具有一个惟一的优先级别。的每个任务都必须具有一个惟一的优先级别。C/OS-II把任务的优先权分为把任务的优先权分为64个优先级别,每一个级别都个优先级别,每一个级别都用一个数字来表示。数字用一个数字来表示。数字0表示任务的优先级别最高;数字越表示任务的优先级别最高;数字越大则表示任务的优先级别越低。大则表示任务的优先级别越低。l通常,一个应用程序的
25、任务数小于通常,一个应用程序的任务数小于64。为了节省内存,用户。为了节省内存,用户可以根据应用程序的需要,在文件可以根据应用程序的需要,在文件OS_CFG.H中通过给表示最中通过给表示最低优先级别的常数低优先级别的常数OS_LOWEST_PRIO赋值的方法,来说明应赋值的方法,来说明应用程序中任务优先级别的数目。用程序中任务优先级别的数目。l该常数一旦被定义,就意味着系统中可供使用的优先级别为该常数一旦被定义,就意味着系统中可供使用的优先级别为0、1、2、OS_LOWEST_PRIO,共,共OS_LOWEST_PRIO+1个。同时也限制了应用程序中任务的总数最多不能超过个。同时也限制了应用程
展开阅读全文