嵌入式操作系统uCUS2简介.ppt
《嵌入式操作系统uCUS2简介.ppt》由会员分享,可在线阅读,更多相关《嵌入式操作系统uCUS2简介.ppt(68页珍藏版)》请在三一办公上搜索。
1、第五章 嵌入式实时操作系统分析,1,2023/11/13,第5章 实时操作系统C/OS-简介,2023/11/13,第五章 嵌入式实时操作系统分析,2,本章提要,1,3,2,5,4,6,C/OS-简介,C/OS-内核结构,C/OS-任务通信与同步,C/OS-任务管理,C/OS-时间管理,C/OS-移植,第五章 嵌入式实时操作系统分析,3,2023/11/13,RTOS是32位的嵌入式CPU的软件基础,RTOS内核 提供CPU的管理硬件初时化,MMU,定时器,中断RTOS 内核提供任务,内存管理RTOS提供设备管理,文件和网络的支持RTOS提供C/C+,JAVA,图形模块等编程接口,1,C/OS
2、-简介,第五章 嵌入式实时操作系统分析,4,2023/11/13,C/OSMicro Controller O S,微控制器操作系统C/OS简介美国人Jean Labrosse 1992年完成应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等 1998年C/OS-II,目前的版本C/OS-II V2.612000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中网站(),1,C/OS-简介,第五章 嵌入式实时操作系统分析,5,2023/11/13,公开源代码可移植性(Portable)绝大部分 C/OS-II的源码是用移植性很强的ANSI C写
3、的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得 C/OS-II便于移植到其他微处理器上。C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器、数字信号处理器(DSP)上运行。可固化(ROMable)C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(C编译、连接、下载和固化),C/OS-II可以嵌入到读者的产品中成为产品的一部分。可裁剪(Scalable)可以只使用 C/OS-II中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个 C/OS-II调用,而另一个产品则使用了几乎所有 C/OS-II的功能
4、,这样可以减少产品中的 C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。,C/OS的性能特点(一),1,C/OS-简介,第五章 嵌入式实时操作系统分析,6,2023/11/13,占先式(Preemptive)多任务 C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有56个任务可确定性 全部 C/OS-II的函数调用与服务的执行时间具有可确定性。任务栈 每个任务有自己单独的栈,C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。系统服务 C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固
5、定的内存的申请与释放、时间相关函数等。中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。稳定性与可靠性,C/OS的性能特点(二),1,C/OS-简介,第五章 嵌入式实时操作系统分析,7,2023/11/13,C/OS-II图书,描述了C/OS-II内部的工作原理随书的CD中包含了源代码工业界最清晰的源代码除英文版外,有中文和韩文版,Chinese,Korean,English,ISBN 1-57820-103-9美国CMP BOOK,ISBN 7-81077-290-2北京航空航天大学出版社,I
6、SBN 89-951540-5-5,1,C/OS-简介,第五章 嵌入式实时操作系统分析,8,2023/11/13,C/OS-II的各种商业应用,全世界有数百种产品在应用:AvionicsMedicalCell phonesRouters and switchesHigh-end audio equipmentWashing machines and dryersUPS(Uninterruptible Power Supplies)Industrial controllersGPS Navigation SystemsMicrowave RadiosInstrumentationPoint-of
7、-sale terminals更多,1,C/OS-简介,第五章 嵌入式实时操作系统分析,9,2023/11/13,C/OS-II提供的系统服务,信号量带互斥机制的信号量减少优先级倒置的问题事件标志消息信箱消息队列内存管理时钟管理任务管理,1,C/OS-简介,2023/11/13,第五章 嵌入式实时操作系统分析,10,本章提要,1,3,2,5,4,6,C/OS-简介,C/OS-内核结构,C/OS-任务通信与同步,C/OS-任务管理,C/OS-时间管理,C/OS-移植,第五章 嵌入式实时操作系统分析,11,2023/11/13,本部分给出C/OS-的主要结构概貌。将学习以下一些内容;C/OS-是怎
8、样处理临界段代码的;什么是任务,怎样把用户的任务交给C/OS-;任务是怎样调度的;应用程序CPU的利用率是多少,C/OS-是怎样知道的;怎样写中断服务子程序;什么是时钟节拍,C/OS-是怎样处理时钟节拍的;C/OS-是怎样初始化的,以及怎样启动多任务;还描述以下函数,这些服务于应用程序:OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL(),OSInit(),OSStart(),OSIntEnter()和 OSIntExit(),OSSchedLock()和 OSSchedUnlock(),以及 OSVersion().,2,C/OS-内核结构,第五章 嵌入式实时操作系
9、统分析,12,2023/11/13,C/OS-II的文件结构,H,2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,13,2023/11/13,临界段(Critical Sections),OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。因为这两个宏的定义取决于所用的微处理器,故在文件OS_CPU.H中可以找到相应宏定义。每种微处理器都有自己的OS_CPU.H文件。,2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,14,2023/11/13,任务task,典型的任务一个无限循环。void mytask(void*pdata)for(;)do some
10、thing;waiting;do something;,2,C/OS-内核结构,C/OS II 2.5版本支持64个任务,每个任务一个特定的优先级。优先级越高,数字越小。系统占用了8个任务,保留优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO-0。,第五章 嵌入式实时操作系统分析,15,2023/11/13,一个任务通常是一个无限的循环。一个任务看起来像其它C的函数一样,有函数返回类型,有形式参数变量,但是任务是绝不会返回的。故返回参数必须定义成void。,不同的是,当任务完成以后,任务可
11、以自我删除,如清单所示。注意任务代码并非真的删除了,C/OS-只是简单地不再理会这个任务了,这个任务的代码也不会再运行,如果任务调用了OSTaskDel(),这个任务绝不会返回什么。,2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,16,2023/11/13,Task Structure,2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,17,2023/11/13,任务状态,2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,18,2023/11/13,任务级的任务调度-OSSched,C/OS是占先式实时多任务内核,优先级最高的任务一旦准备就绪,则拥有CPU的所有权开始投入
12、运行。C/OS中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务并进行上下文(任务)切换。C/OS任务调度所花的时间为常数,与应用程序中建立的任务数无关。,两个关键:优先级数分解为高三位和低三位分别确定;高优先级有着小的优先级号;,根据就绪表确定最高优先级,2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,19,2023/11/13,任务调度(Task Scheduling),C/OS-总是运行进入就绪态任务中优先级最高的那一个。确定哪个任务优先级最高,下面该哪个任务运行了的工作是由调度器(Scheduler)完成的。任务级
13、的调度是由函数OSSched()完成的。中断级的调度是由另一个函数OSIntExt()完成的。这个函数将在以后描述。OSSched()的代码如程序清单,2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,20,2023/11/13,Task scheduler,2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,21,2023/11/13,C/OS-任务调度所花的时间是常数,与应用程序中建立的任务数无关。如程序清单中L(1)条件语句的条件不满足,任务调度函数OSSched()将退出,不做任务调度。这个条件是:如果在中断服务子程序中调用OSSched(),此时中断嵌套层数OSIntNes
14、ting0,或者由于用户至少调用了一次给任务调度上锁函数OSSchedLock(),使OSLockNesting0。如果不是在中断服务子程序调用OSSched(),并且任务调度是允许的,即没有上锁,则任务调度函数将找出那个进入就绪态且优先级最高的任务L(2),进入就绪态的任务在就绪任务表中有相应的位置位。一旦找到那个优先级最高的任务,OSSched()检验这个优先级最高的任务是不是当前正在运行的任务,以此来避免不必要的任务调度L(3)。注意,在C/OS中曾经是先得到OSTCBHighRdy然后和OSTCBCur做比较。因为这个比较是两个指针型变量的比较,在8位和一些16位微处理器中这种比较相对
15、较慢。而在C/OS-中是两个整数的比较。并且,除非用户实际需要做任务切换,在查任务控制块优先级表OSTCBPrioTbl时,不需要用指针变量来查OSTCBHighRdy。综合这两项改进,即用整数比较代替指针的比较和当需要任务切换时再查表,使得C/OS-比C/OS在8位和一些16位微处理器上要更快一些。,2,C/OS-内核结构,Task scheduler,第五章 嵌入式实时操作系统分析,22,2023/11/13,为实现任务切换,OSTCBHighRdy必须指向优先级最高的那个任务控制块OS_TCB,这是通过将以OSPrioHighRdy为下标的OSTCBPrioTbl数组中的那个元素赋给OS
16、TCBHighRdy来实现的L(4)。接着,统计计数器OSCtxSwCtr加1,以跟踪任务切换次数L(5)。最后宏调用OS_TASK_SW()来完成实际上的任务切换L(6)。,2,C/OS-内核结构,Task scheduler,第五章 嵌入式实时操作系统分析,23,2023/11/13,任务切换很简单,由以下两步完成,将被挂起任务的微处理器寄存器推入堆栈,然后将较高优先级的任务的寄存器值从栈中恢复到寄存器中。在C/OS-中,就绪任务的栈结构总是看起来跟刚刚发生过中断一样,所有微处理器的寄存器都保存在栈中。换句话说,C/OS-运行就绪态的任务所要做的一切,只是恢复所有的CPU寄存器并运行中断返
17、回指令。为了做任务切换,运行OS_TASK_SW(),人为模仿了一次中断。多数微处理器有软中断指令或者陷阱指令TRAP来实现上述操作。中断服务子程序或陷阱处理(Trap hardler),也称作事故处理(exception handler),必须提供中断向量给汇编语言函数OSCtxSw()。OSCtxSw()除了需要OS_TCBHighRdy指向即将被挂起的任务,还需要让当前任务控制块OSTCBCur指向即将被挂起的任务。OSSched()的所有代码都属临界段代码。在寻找进入就绪态的优先级最高的任务过程中,为防止中断服务子程序把一个或几个任务的就绪位置位,中断是被关掉的。为缩短切换时间,OSS
18、ched()全部代码都可以用汇编语言写。为增加可读性,可移植性和将汇编语言代码最少化,OSSched()是用C写的。,Task scheduler,第五章 嵌入式实时操作系统分析,24,2023/11/13,给调度器上锁函数OSSchedlock()用于禁止任务调度,直到任务完成后调用给调度器开锁函数OSSchedUnlock()为止。调用OSSchedlock()的任务保持对CPU的控制权,尽管有个优先级更高的任务进入了就绪态。然而,此时中断是可以被识别的,中断服务也能得到(假设中断是开着的)。OSSchedlock()和OSSchedUnlock()必须成对使用。变量OSLockNesti
19、ng跟踪OSSchedLock()函数被调用的次数,以允许嵌套的函数包含临界段代码,这段代码其它任务不得干预。C/OS-允许嵌套深度达255层。当OSLockNesting等于零时,调度重新得到允许。函数OSSchedLock()和OSSchedUnlock()的使用要非常谨慎,因为它们影响C/OS-对任务的正常管理。,给调度器上锁和开锁(Locking and UnLocking the Scheduler),2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,25,2023/11/13,给调度器上锁,2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,26,2023/11/13,当
20、OSLockNesting减到零的时候,OSSchedUnlock()调用OSSched。OSSchedUnlock()是被某任务调用的,在调度器上锁的期间,可能有什么事件发生了并使一个更高优先级的任务进入就绪态。调用OSSchedLock()以后,用户的应用程序不得使用任何能将现行任务挂起的系统调用。也就是说,用户程序不得调用OSMboxPend()、OSQPend()、OSSemPend()、OSTaskSuspend(OS_PR1O_SELF)、OSTimeDly()或OSTimeDlyHMSM(),直到OSLockNesting回零为止。因为调度器上了锁,用户就锁住了系统,任何其它任务
21、都不能运行。,2,C/OS-内核结构,给调度器上锁,当低优先级的任务要发消息给多任务的邮箱、消息队列、信号量时(见 任务间通讯和同步),用户不希望高优先级的任务在邮箱、队列和信号量没有得到消息之前就取得了CPU的控制权,此时,用户可以使用禁止调度器函数。,第五章 嵌入式实时操作系统分析,27,2023/11/13,给调度器开锁,2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,28,2023/11/13,任务切换,将被挂起的任务寄存器入栈将较高优先级任务的寄存器出栈,任务级的任务切换OS_TASK_SW(),OS_TASK_SW()是宏调用,含有微处理器的软中断指令OS_TASK_SW(
22、)将处理器相关的软件中断机制封装起来,便于操作系统移植,2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,29,2023/11/13,调用OS_TASK_SW()前的数据结构,低优先级任务 OS_TCB,OSTCBCur(1),存贮器低地址,存贮器高地址,堆栈方向,SP,R1,R2,R3,R4,PC,PSW,存贮器低地址,存贮器高地址,高优先级任务 OS_TCB,OSTCBHighRdy(3),(2),CPU,(4),(5),2,C/OS-内核结构,第五章 嵌入式实时操作系统分析,30,2023/11/13,保存当前CPU寄存器的值,低优先级任务 OS_TCB,OSTCBCur,存贮器低
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 操作系统 uCUS2 简介

链接地址:https://www.31ppt.com/p-6569772.html