最新北航《嵌入式系统》课件_第八章PPT课件.ppt
《最新北航《嵌入式系统》课件_第八章PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新北航《嵌入式系统》课件_第八章PPT课件.ppt(108页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、北航嵌入式系统课件北航嵌入式系统课件_第八章第八章2主要内容n嵌入式操作系统嵌入式操作系统n C/OS-简介简介n C/OS-内核结构内核结构n C/OS-任务管理任务管理n C/OS-时间管理时间管理n C/OS-任务通信与同步任务通信与同步9通用操作系统和嵌入式(实时)操作系统通用操作系统和嵌入式(实时)操作系统n通用操作系统:Windows/NT/XP、Linux、UNIX等,用于PC机、服务器,n嵌入式(实时)操作系统:用于嵌入式设备的操作系统,具有通用操作系统的基本特点,又具有系统实时性、硬件的相关依赖性、软件固态化以及应用的专用性等特点;n嵌入式(实时)操作系统通常包括与硬件相关的
2、底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器Browser等;n嵌入式(实时)操作系统的重要指标:实时性(中断响应时间、任务切换时间等)、尺寸(可裁剪性 )、可扩展性(内核、中间件)10嵌入式操作系统的发展操作系统内核操作系统内核应用程序应用程序驱动程序和固件驱动程序和固件操作系统内核操作系统内核文件系统文件系统驱动程序和固件驱动程序和固件API GUI应用程序应用程序操作系统内核操作系统内核文件系统文件系统驱动程序和固件驱动程序和固件API GUI应用程序应用程序通信协议通信协议库函数库函数80年代初期年代初期80年代中期年代中期-90年代中年代中期期90年代末期年
3、代末期-21世纪世纪11常见的嵌入式操作系统 实时嵌入式操作系统的种类繁多,大体上可分为两种,商用型和免费型。n商用型的实操作系统功能稳定、可靠,有完善的技术支持和售后服务,但往往价格昂贵,如Vxworks、QNX、WinCE、Palm OS等。n免费型的实时操作系统在价格方面具有优势,目前主要有Linux,C/OS是一种源码开放的商业RTOS12学习嵌入式操作系统 n学习一种实时操作系统RTOS,如 C/OS-,掌握实时系统的概念和设计方法n嵌入式系统以应用为中心,要选择“适用”的操作系统n嵌入式Linuxn自己尝试“写”RTOS13RTOS在嵌入式系统中的位置嵌入式硬件平台BSPKERNE
4、LFSTCP/IP设备驱动设备驱动设备设备I/O调试工具调试工具其它组件其它组件应用RTOSC/C+14主要内容n嵌入式操作系统嵌入式操作系统n C/OS-简介简介n C/OS-内核结构内核结构n C/OS-任务管理任务管理n C/OS-时间管理时间管理n C/OS-任务通信与同步任务通信与同步15 C/OSC/OS简介简介1 1、 C/OSC/OSMicro Controller O SMicro Controller O S,微控制器操作系统微控制器操作系统2、 C/OS简介简介n美国人Jean Labrosse 1992年完成n应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控
5、制、高速公路电话系统、自动提款机等 n1998年C/OS-II,目前的版本C/OS -II V2.61,2.72n2000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中n网站www.ucos-II.com()16u公开源代码u可移植性(Portable) 绝大部分 C/OS-II的源码是用移植性很强的ANSI C写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得 C/OS-II便于移植到其他微处理器上。 C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器 、数字信号处理器(DSP)上运行。u可固化(ROMable) C/
6、OS-II是为嵌入式应用而设计的,这就意味着,只要用户有固化手段(C编译、连接、下载和固化), C/OS-II可以嵌入到用户的产品中成为产品的一部分。u可裁剪(Scalable) 可以只使用 C/OS-II中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个 C/OS-II调用,而另一个产品则使用了几乎所有 C/OS-II的功能,这样可以减少产品中的 C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。 C/OSC/OS的性能特点(一)的性能特点(一)17u占先式(Preemptive)u多任务 C/OS-II可以管理64个任务,然而,目前这一版本保留8
7、个给系统。应用程序最多可以有56个任务u可确定性 全部 C/OS-II的函数调用与服务的执行时间具有可确定性。u任务栈 每个任务有自己单独的栈, C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。u系统服务 C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。u中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。u稳定性与可靠性 C/OSC/OS的性能特点(二)的性能特点(二)18C/OS-II图籍n描述了C/OS-II
8、内部的工作原理n随书的CD中包含了源代码n工业界最清晰的源代码n除英文版外,有中文和韩文版ChineseKoreanEnglishISBN 1-57820-103-9美国CMP BOOK ISBN 7-81077-290-2北京航空航天大学出版社ISBN 89-951540-5-519C/OS-IIC/OS-II的各种商业应用的各种商业应用n全世界有数百种产品在应用全世界有数百种产品在应用: :nAvionics(航空电子设备)(航空电子设备)nMedicalnCell phonesnRouters and switchesnHigh-end audio equipmentnWashing m
9、achines and dryersnUPS (Uninterruptible Power Supplies)nIndustrial controllersnGPS Navigation SystemsnMicrowave RadiosnInstrumentationnPoint-of-sale terminalsn更多20C/OS-IIC/OS-II提供的系统服务提供的系统服务n信号量n带互斥机制的信号量n减少优先级倒置的问题n事件标志n消息信箱n消息队列n内存管理n时钟管理n任务管理21C/GUI and C/FSnC/GUIC/GUIn嵌入式的用户界面n用ANSI C书写n支持任何8,
10、16, 32-bits CPUn彩色,灰度等级或黑白显示n代码尺寸小nC/FSC/FSn嵌入式的文件系统n用ANSI C书写n支持任何8, 16, 32-bits CPUn支持SMC, MMC, SD, CF, IDE, Flash, RAM其他介质22主要内容n嵌入式操作系统嵌入式操作系统n C/OS-简介简介n C/OS-内核结构内核结构n C/OS-任务管理任务管理n C/OS-时间管理时间管理n C/OS-任务通信与同步任务通信与同步23 C/OSC/OS-II-II的文件结构的文件结构24n内核结构n任务管理n时间管理n任务之间通信与同步nC/OS的移植 C/OSC/OS-II-II
11、分析分析25n当处理临界段代码时,须关中断,处理完毕后,再开中断当处理临界段代码时,须关中断,处理完毕后,再开中断n关中断时间关中断时间是实时内核最重要的指标之一。它影响用户系是实时内核最重要的指标之一。它影响用户系统对实时事件的相应特性。统对实时事件的相应特性。n在实际应用中,关中断的时间很大程度上取决于微处理器在实际应用中,关中断的时间很大程度上取决于微处理器的结构和编译器生成的代码质量的结构和编译器生成的代码质量n微处理器通常具有关中断微处理器通常具有关中断/ /开中断操作。开中断操作。C C编译器须具有某编译器须具有某种机制,能够在种机制,能够在c c中直接实现关中断中直接实现关中断/
12、 /开中断操作开中断操作nC C源代码中插入汇编语言的语句,易实现关中断源代码中插入汇编语言的语句,易实现关中断/ /开中断操作开中断操作n关中断关中断/ /开中断操作作为语言的扩展部分,直接从开中断操作作为语言的扩展部分,直接从C C语言中可以语言中可以 关中断关中断/ /开中断开中断 C/OSC/OS-II-II开关中断的方法开关中断的方法26 C/OSC/OS-II-II开关中断的方法(续开关中断的方法(续1 1)n C/OSC/OS-II-II定义了两个宏调用来开关中断定义了两个宏调用来开关中断: :nOS_ENTER_CRITICAL( ) OS_ENTER_CRITICAL( )
13、(禁止中断的宏(禁止中断的宏) ) nOS_EXIT_CRITICAL( ) OS_EXIT_CRITICAL( ) ( (启用中断的宏)启用中断的宏)n通常成对出现通常成对出现n上述宏定义取决于使用的微处理器。在文件上述宏定义取决于使用的微处理器。在文件OS_CPU.HOS_CPU.H有相应的宏定义有相应的宏定义n在在 C/OSC/OS-II-II中,每种微处理器都有自己的中,每种微处理器都有自己的OS_CPU.HOS_CPU.H文件文件27 C/OSC/OS-II-II开关中断的方法(续开关中断的方法(续2 2)28 C/OSC/OS-II-II开关中断的方法(续开关中断的方法(续3 3)
14、可以选择可以选择具体使用哪种方法具体使用哪种方法n该常数在与该常数在与CPUCPU类型有关的移植文件类型有关的移植文件OS_CPU.HOS_CPU.H中定义中定义29nOS_CRITICAL_METHOD=1OS_CRITICAL_METHOD=1n用最简单的方式来实现用最简单的方式来实现2 2个宏调用个宏调用n用处理器指令关中断,完成用处理器指令关中断,完成OS_ENTER_CRITICAL()OS_ENTER_CRITICAL()n用开中断指令完成用开中断指令完成OS_EXIT_CRITICAL()OS_EXIT_CRITICAL()n问题:问题:n如果调用如果调用 C/OSC/OS-II
15、-II功能函数时,中断是关掉的,则从功能函数时,中断是关掉的,则从 C/OSC/OS-II-II函数返回时,函数返回时,中断就打开了中断就打开了n若调用若调用 C/OSC/OS-II-II功能函数之前已将中断关掉,那么功能函数之前已将中断关掉,那么用户往往希望用户往往希望从从 C/OSC/OS-II-II函数返回时,中断仍然是关着的。函数返回时,中断仍然是关着的。这时,这种方法就不妥当。这时,这种方法就不妥当。n对特定的处理器,这种办法是唯一的选择对特定的处理器,这种办法是唯一的选择 C/OSC/OS-II-II中采用了中采用了3 3种开关中断的方法种开关中断的方法30 C/OSC/OS-II
16、-II中采用了中采用了3 3种开关中断的方法(续种开关中断的方法(续1 1)nOS_CRITICAL_METHOD=2OS_CRITICAL_METHOD=2n在堆栈中保存中断的开在堆栈中保存中断的开/ /关状态,然后再关中断关状态,然后再关中断n实现实现OS_ENTER_CRITICAL()OS_ENTER_CRITICAL()时,先在堆栈中保存中断的开时,先在堆栈中保存中断的开/ /关状态,然后再关中断关状态,然后再关中断n实现实现OS_EXIT_CRITICAL()OS_EXIT_CRITICAL()时,从堆栈中弹出原来中断的开时,从堆栈中弹出原来中断的开/ /关状态关状态n利用这种机制
17、,不论用户在调用利用这种机制,不论用户在调用 C/OSC/OS-II-II功能函数功能函数之前中断是开或关,函数的进入和返回状态都得到之前中断是开或关,函数的进入和返回状态都得到了保护。即:调用前中断的开了保护。即:调用前中断的开/ /关状态,在调用之关状态,在调用之后保持不变后保持不变31 C/OSC/OS-II-II中采用了中采用了3 3种开关中断的方法(续种开关中断的方法(续2 2)nOS_CRITICAL_METHOD=3OS_CRITICAL_METHOD=3n把当前处理器的状态字(把当前处理器的状态字(PSWPSW)保存在)保存在C C函数函数的局部变量中(如的局部变量中(如OS_
18、CPU_SROS_CPU_SR)n关中断时保存,开中断时恢复关中断时保存,开中断时恢复32 C/OSC/OS-II-II中采用了中采用了3 3种开关中断的方法(续种开关中断的方法(续3 3)Void Some_ uCOSuCOS_II_Service(arguments)_II_Service(arguments) OS_CPU_SR cpu_sr; OS_CPU_SR cpu_sr; cpu_sr=get_processor_psw(); cpu_sr=get_processor_psw(); disable_interrupts(); disable_interrupts(); / /*
19、*临界段代码临界段代码* */ / set_processor_psw(cpu_sr); set_processor_psw(cpu_sr); 33任务(任务(tasktask) 典型的任务:一个无限循环典型的任务:一个无限循环void mytask(void *pdata) for (;) do something; waiting; do something; 34Task Structure void YourTask (void *pdata) (1) for (;) (2) /* 用户代码 */ 调用uC/OS-II的某种系统服务: OSMboxPend(); OSQPend();
20、OSSemPend(); OSTaskDel(OS_PRIO_SELF); OSTaskSuspend(OS_PRIO_SELF); OSTimeDly(); OSTimeDlyHMSM(); /* 用户代码 */ 35任务完成后的自我删除任务完成后的自我删除n当任务完成后,任务可以自我删除当任务完成后,任务可以自我删除n任务代码并非真的删除了,系统只是简单地不再理会任务代码并非真的删除了,系统只是简单地不再理会这个任务这个任务n这个任务的代码也不会再运行了,即使任务调用了这个任务的代码也不会再运行了,即使任务调用了OSTaskDelOSTaskDel(),这个任务也绝不会返回(),这个任务也
21、绝不会返回 void YourTask (void *pdata) /* 用户代码 */ OSTaskDel(OS_PRIO_SELF);36 C/OSC/OS II II中的任务中的任务n C/OSC/OS II 2.5 II 2.5版本支持版本支持6464个任务,每个任务一个特定的优先级。个任务,每个任务一个特定的优先级。数字越小,优先级越高数字越小,优先级越高n系统总是运行进入就绪态优先级最高的任务系统总是运行进入就绪态优先级最高的任务n任务优先级号就是任务编号(任务优先级号就是任务编号(IDID). .优先级号也被一些内核功能优先级号也被一些内核功能函数调用。如函数调用。如OsTask
22、ChangePrio( )OsTaskChangePrio( )及及OsTaskDel( ).OsTaskDel( ).n系统占用了系统占用了8 8个任务个任务,保留优先级为,保留优先级为0 0、1 1、2 2、3 3、OS_LOWEST_PRIO-3OS_LOWEST_PRIO-3、 OS_LOWEST_PRIO-2OS_LOWEST_PRIO-2、 OS_LOWEST_PRIO-1OS_LOWEST_PRIO-1、 OS_LOWEST_PRIO-0OS_LOWEST_PRIO-0n即:建议不使用上述最高即:建议不使用上述最高4 4个和最低个和最低4 4个优先级,用户任务仍可达个优先级,用户
23、任务仍可达5656个个37任务状态任务状态n在任一给定的时刻,任务的状态一定是在任一给定的时刻,任务的状态一定是以下五种状态之一:以下五种状态之一:n睡眠态(睡眠态(task dormanttask dormant)n就绪态(就绪态(task readytask ready)n运行态(运行态(task runningtask running)n等待状态(等待状态(task waitingtask waiting)n中断服务态(中断服务态(ISR running)ISR running)38睡眠态(睡眠态(task dormanttask dormant)n指任务驻留在程序空间(指任务驻留在程序
24、空间(ROMROM或或RAMRAM),还没有),还没有交给系统来管理的状态交给系统来管理的状态n任务交给系统通过调用以下函数之一来实现:任务交给系统通过调用以下函数之一来实现: nOSTaskCreateOSTaskCreate()()nOSTaskCreateExtOSTaskCreateExt()()n告知系统:告知系统:n任务的起始地址任务的起始地址n任务建立时,用户给任务赋予的优先级任务建立时,用户给任务赋予的优先级n任务要使用的栈空间大小等任务要使用的栈空间大小等39就绪态(就绪态(task readytask ready)n任务一旦创建就进入就绪态,准备运行任务一旦创建就进入就绪态
25、,准备运行n任务的创建可以是在多任务开始之前,也可以任务的创建可以是在多任务开始之前,也可以动态地由一个运行着的任务创建动态地由一个运行着的任务创建n若刚创建任务的优先级高于创建它的任务的优若刚创建任务的优先级高于创建它的任务的优先级,它将立即获得先级,它将立即获得cpucpu的使用权的使用权n任务可通过任务可通过OSTaskDelOSTaskDel()返回睡眠态;或调()返回睡眠态;或调用该函数让另一个任务进入睡眠态用该函数让另一个任务进入睡眠态40运行态(运行态(task runningtask running)n就绪的任务只有当所有优先级高于它的任务都转为等就绪的任务只有当所有优先级高于
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式系统 最新 北航 嵌入式 系统 课件 第八 PPT
限制150内