嵌入式系统基础教程第19讲第9章嵌入式操作系统课件.ppt

上传人(卖家):晟晟文业 文档编号:4592018 上传时间:2022-12-22 格式:PPT 页数:53 大小:1.12MB
下载 相关 举报
嵌入式系统基础教程第19讲第9章嵌入式操作系统课件.ppt_第1页
第1页 / 共53页
嵌入式系统基础教程第19讲第9章嵌入式操作系统课件.ppt_第2页
第2页 / 共53页
嵌入式系统基础教程第19讲第9章嵌入式操作系统课件.ppt_第3页
第3页 / 共53页
嵌入式系统基础教程第19讲第9章嵌入式操作系统课件.ppt_第4页
第4页 / 共53页
嵌入式系统基础教程第19讲第9章嵌入式操作系统课件.ppt_第5页
第5页 / 共53页
点击查看更多>>
资源描述

1、嵌入式系统原理与开发 第19讲 南京大学计算机系 俞建新主讲 2008年12月15日 南京大学计算机系 2 第9章 嵌入式操作系统概论?本讲内容?实时系统?嵌入式操作系统的特点和分类?RTOS常用调度算法?启动程序bootloader?嵌入式操作系统C/OS-II 2008年12月15日 南京大学计算机系 3 9.5 嵌入式操作系统C/OS-II?C/OS-II的主要特点?C/OS-II的层次?C/OS-II的代码结构?C/OS-II的内核?C/OS-II的任务调度?C/OS-II的任务切换?C/OS-II的中断处理?C/OS-II的时间管理?C/OS-II的任务间通信?C/OS-II的存储管

2、理?C/OS-II的移植 2008年12月15日 南京大学计算机系 4 C/OS-II 简介?作者:Jean Labrosse?源码公开的嵌入式实时系统?已被移植到40多种不同的CPU上?http:/www.C/OS-II.com提供技术服务支持。2008年12月15日 南京大学计算机系 5 C/OS-II 的主要特点?可移植性和可确定性?绝大部分代码用ANSI C编写?与处理器硬件相关的代码用汇编语言编写?移植条件 移植目标处理器要有硬件堆栈指针 CPU内容寄存器入栈、出栈指令 C编译器支持内嵌汇编或C可扩展,可连接汇编模块 关中断、开中断可在C语言中实现 2008年12月15日 南京大学计

3、算机系 6 C/OS-II的主要特点(续1)?抢占式多任务?可以管理64个任务,8个任务是系统任务?用户可以最多定义56个任务,每个任务优先级不相同?实时性较强,参看下表 OS VxWorks C/OS-II RT-Linux QNX6 供应商 Wind River Micrium FSMlabs Quanturm 硬件平台 MC68000 80486/33MHz 80486/60MHz 80486/33MHz 任务切换 3.8微秒 9微秒 不详 12.57微秒 中断响应 3微秒 7.5微秒 25微秒 7.54微秒 4种嵌入式操作系统的实时性能典型值 2008年12月15日 南京大学计算机系

4、7 C/OS-II 的主要特点(续2)?可固化可裁剪?实用程序可以只使用C/OS-II中需要的那些系统服务?任务由独立堆栈?C/OS-II允许每个任务由不同的栈空间?嵌套中断管理?嵌套层数可达255层 2008年12月15日 南京大学计算机系 8 C/OS-II 的层次?C/OS-II嵌入式系统软件架构(见下页),是一个建立在硬件系统上的四层软件结构?最上层是应用软件层?API层和支撑软件层?内核?设备驱动程序 2008年12月15日 南京大学计算机系 9 C/OS-II的层次示意图?基于C/OS-II的嵌入式系统软件层次示意图如右图所示 任务1中断服务例程 ISR任务调度启动代码硬件应用程序

5、接口APIGUITCP/IP文件系统uCOS-II内核内存管理任务间通信 ITC时间处理时钟节拍系统任务应用软件层任务2任务3任务nLCD驱动FLASH驱动任务管理驱动程序2008年12月15日 南京大学计算机系 10 C/OS-II 的代码结构?基于C/OS-II平台的嵌入式系统体系结构如右下图所示?C/OS-II主要由三大类程序文件构成 A类:处理器无关 B类:应用程序有关 C类:硬件平台相关 应用软件 (用户代码)C/OS-II(与处理器类型无关的代码)C/OS-II配置文件(与应用程序有关)移植C/OS-II(与处理器类型有关的代码)软件硬件CPU定时器OS_Q.C OS_SEM.C

6、OS_TASK.C OS_TIME.C uC/OS-II.C uC/OS-II.HOS_CORE.C OS_FLAG.COS_MBOX.COS_MEM.COS_MUTEX.COS_CFG.H INCLUDES.HOS_CPU.H、OS_CPU_A.ASM、OS_CPU_C.C 2008年12月15日 南京大学计算机系 11 C/OS-II 的代码结构(续)?按功能分?核心模块、预处理模块、进程间通信模块、内存管理模块、任务与调度管理器模块、时间管理模块、移植模块?C/OS-II的源代码文件组成?见教材第344页表9-5 2008年12月15日 南京大学计算机系 12 C/OS-II 的代码结构

7、(续)?C/OS-II的任务代码有两种框架结构,如下列出:void Usertask(void*pdata)for(;)用户代码;OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();用户代码;void Usertask(void*pdata)用户代码;OSTaskDel(OS_PRIO_SELF);2008年12月15日 南京大学计算机系 13 C/OS-II 的代码结构(续)?对于执行无限循环的任务,通常采用第一种形

8、式;对于只执行一次就自我删除的任务,采用第二种形式。?以下是推荐的C/OS-II应用程序任务的基本结构 void Usertask(void*pdata)INT8U ReturnNum;/返回值 InitTimer();/可选 for(;)./应用程序代码 OSTimeDly(n);/常用的语句 2008年12月15日 南京大学计算机系 14 C/OS-II 的代码结构(续)?C/OS-II的启动过程?Bootloader执行完毕后,调用应用程序主文件(通常是main.c)里的main()函数。main()函数在执行过程中,除硬件初始化函数和用户函数外,按以下次序执行三个主要的C/OS-II函

9、数:操作系统初始化OSInit();任务创建OSTaskCreate();任务调度开始OSStart()?一旦OSStart()函数开始执行,就标志着C/OS-II进入了多任务调度的正常运行状态 2008年12月15日 南京大学计算机系 15 C/OS-II 的内核?C/OS-II内核只提供任务调度、任务间通信(ITC)与同步、任务管理、时间管理和内存管理等基本功能?可裁剪编译到8K左右,全部只有100K左右,消耗资源非常小?在小规模的代码内实现了抢占式任务调度、多任务通信功能 2008年12月15日 南京大学计算机系 16 C/OS-II 的内核(续1)?C/OS-II的临界区?C/OS-I

10、I调用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏来执行关中断和开中断,对于不同的体系结构,这两个宏定义不一样。?OS_CPU.H文件中含有OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()的定义 2008年12月15日 南京大学计算机系 17 C/OS-II 的内核(续2)?C/OS-II的任务状态?最大任务数64个,最高优先级为0,最低优先级取值为实际定义的最大任务数减1.?任务建立之后,拥有优先级,执行函数,自用栈空间和 任务控制块(TCB),在运行时刻能够完全控制CPU的操作以及全部用户可访问寄存器的操作。2008年12月

11、15日 南京大学计算机系 18 C/OS-II 的任务状态转换图 C/OS-II的每个任务都是一个无限的循环。每个任务都处在休眠态、就绪态、运行态、挂起态和被中断态的某种状态下(任务状态变迁如右图所示)等待状态任务OSFlagPost()OSMboxPost()OSMboxPostOpt()OSMutexPost()OSQPost()OSQPostFront()OSQPostOpy()OSSemPost()OSTaskResume()OSTimeTick()OSFlagPend()OSMboxPend()OSMutexPend()OSQPend()OSSemPend()OSTaskSuspen

12、d()OSTimeDly()OSTimeDlyHMSM()OSTaskDel()OSTaskCreate()OSTaskCreateExt()休眠态任务就绪态任务运行态任务被中断态任务OSTaskDel()OSTaskDel()任务的CPU使用权被剥夺中断OSIntExit()OSStart()OSIntExit()OS_TASK_SW()2008年12月15日 南京大学计算机系 19 C/OS-II 的内核(续3)?休眠态(dormant)?这种状态相当于该任务驻留在内存中,但还没有交给内核管理。把任务交给内核是通过调用任务创建函数实现的?C/OS-II两个任务创建函数 OSTaskCrea

13、te()和OSTaskCreateExt()2008年12月15日 南京大学计算机系 20 C/OS-II 的内核(续3)?就绪态(ready)?在这种状态下意味着该任务已经准备好,且可运行,但由于该任务的优先级比正在运行的任务的优先级低,所以还暂时不能运行?C/OS-II就绪表为每一个优先级的任务提供了一个位元,登记该任务是否就绪,就绪时取值为1,没有就绪时取值为0?运行态?得到了CPU的控制权正在运行之中的任务状态 2008年12月15日 南京大学计算机系 21 C/OS-II 的内核(续4)?挂起态(pending)或者等待态(waiting)?正在运行的任务由于调用延时函数OSTime

14、Dly(),或等待事件信号量而将自身挂起?被中断态(Interrupted)?发生中断时CPU提供相应的中断服务,原来正在运行的任务暂时停止运行,进入了被中断状态 2008年12月15日 南京大学计算机系 22 C/OS-II 的内核(续5)?任务控制块OS_TCB?内核对任务的管理通过任务控制块OS_TCB(Task Control Block)进行。任务控制块是一个数据结构,在任务创建时内核会申请一个空白TCB,而后进行初始化,将创建的任务信息填入该TCB的各个字段。当任务的CPU使用权被剥夺时,C/OS-II用它来保存该任务的状态。当任务重新得到CPU使用权时,任务控制块能确保任务从当时

15、被中断处继续执行。OS_TCB全部驻留在RAM中 2008年12月15日 南京大学计算机系 23 C/OS-II 的内核(续6)?OS_TCB的字段说明?OS_TCB 数据结构中的OSTCBX,OSTCBY,OSTCBBitX,OSTCBBitY四个变量用于加速任务进入就绪态的过程或进入等待事件发生状态的过程?是根据任务的优先级OSTCBPrio计算得出,计算公式如下 OSTCBY=OSTCBPrio 3;OSTCBBitY=OSMapTblOSTCBY;OSTCBX=OSTCBPrio&0 x07;OSTCBBitX=OSMapTblOSTCBX;2008年12月15日 南京大学计算机系 2

16、4 C/OS-II 的任务调度?C/OS-II的就绪表?C/OS-II的就绪任务登记在就绪表中。就绪表由两个变量OSRdyGrp和OSRdyTbl构成?OSRdyGrp是一个单字节整数变量?OSRdyTblOS_LOWEST_PRIO/8+1是单字节整数数组,其元素个数定义为最低优先级除以8加1,最多可有8个元素(字节)2008年12月15日 南京大学计算机系 25 C/OS-II的任务调度(续1)位图形式的C/OS-II的任务就绪表和就绪实例 012345670121456101234567811011111415161718192021222324252627282913132333435

17、363738394041424344454647484950515253545556575859606111YX最低优先级任务(idle task)任务优先级号最高优先级任务OSRdyGrp=0 x8A当前就绪表快照:处于就绪状态的任务优先级分别是 9、12、13、30、62、632008年12月15日 南京大学计算机系 26 C/OS-II 的任务调度(续2)?任务就绪表的操作?登记一个新就绪表操作的典型指令段?删除不再处于就绪态任务的指令段?从就绪表中找到最高优先级的任务 2008年12月15日 南京大学计算机系 27 C/OS-II 的任务调度(续3)?C/OS-II的任务调度?C/OS

18、-II总是运行处于就绪态任务中优先级最高的那一个?OSSched()函数是任务调度的前导函数,判断进行任务调度的三个条件是否满足。这三个条件分别是:?中断嵌套层数共享全程变量OSIntNesting=0?任务调度加锁层数共享全程变量OSLockNesting=0?就绪表中查找到的最高优先级任务的优先级比当前任务的优先级高 2008年12月15日 南京大学计算机系 28 C/OS-II 的任务切换?也叫做上下文切换(Context Switch)?当C/OS-II内核决定运行另外任务时,它保存正在运行任务的上下文,这些内容保存在任务的自用堆栈之中。上下文入栈工作完成以后,把下一个将要执行的任务的

19、上下文从该任务自用堆栈中装入CPU的寄存器,然后开始该任务的运行 2008年12月15日 南京大学计算机系 29 ARM处理器任务栈上下文存储结构图 PC(R15)LR(R14)R12R11R10R9R8R7R6R5R4R3R2R1R0CPSRSPSR压栈出栈上下文压栈时初始栈顶指针R13(SP)位置内存高地址内存低地址上下文出栈时初始栈顶指针R13(SP)位置内存低地址内存高地址2008年12月15日 南京大学计算机系 30 C/OS-II 的中断处理?C/OS-II中的中断服务子程序主要用汇编语言编写而成?中断服务子程序在执行前将被中断任务的执行现场保存在自用堆栈?中断服务子程序执行事件处

20、理有两种方法。一种方法是通过OSMBoxPost()、OSQPost()、OSSemPost()等函数去通知真正做该事件处理的那个任务,让任务完成中断事件的处理。另外一种是由中断服务子程序本身完成事件处理 2008年12月15日 南京大学计算机系 31 C/OS-II 的中断处理(续1)?中断服务子程序的伪码结构如下所示:保存全部CPU寄存器到堆栈;调用OSIntEnter()或者对OSIntNesting变量加1;执行中断服务代码,或者发出 IPC消息通知特定任务去执行中断服务;调用OSIntExit()函数;恢复所有CPU寄存器;执行中断返回指令;2008年12月15日 南京大学计算机系

21、32 C/OS-II 的中断处理(续2)?调用中断退出函数OSIntExit()标志着中断服务子程序的终结,OSIntExit()将中断嵌套层数计数器减1。当中断嵌套计数器减到零并且调度未被禁止(OSLockNesting=0),C/OS-II要重新开始调度。2008年12月15日 南京大学计算机系 33 C/OS-II 的时间管理?C/OS-II能够提供周期性的时钟信号,节拍率10100Hz。?用户必须在多任务系统启动以后即在调用OSStart()之后激活时钟节拍信号发生器?时钟节拍中断服务子程序必须用汇编语言编写?每当硬件定时器发出节拍中断请求,C/OS-II就要响应这个中断 2008年1

22、2月15日 南京大学计算机系 34 C/OS-II 的时间管理(续)?C/OS-II时间管理函数?节拍延时函数OSTimeDly()该函数常常位于任务函数的结束处,用以退出运行,用户可以借助定义全局常数OS_TICKS_PER_SEC?OSTimeDlyHMSM()该函数可以按小时(H)、分(M)、秒(S)和毫秒(m)来定义时间?OSTimeDlyResume()根据需要正处于延时期任务可以被用户中止延时 2008年12月15日 南京大学计算机系 35 C/OS-II 的任务间通信?C/OS-II中保护任务间共享数据和提供任务间通信的主要三种方式?利用宏OS_ENTER_CRITICAL()和

23、OS_EXIT_CRITICAL()来关闭中断和打开中断?利用函数OSSchedLock()和OSSchekUnlock()对C/OS-II中的任务调度函数上锁和开锁?利用信号量、互斥信号量、邮箱和消息队列进行任务间通信,属于事件控制的同步与通信。2008年12月15日 南京大学计算机系 36 C/OS-II 的任务间通信(续1)?事件控制块ECB?用于实现信号量管理、互斥型信号量管理、消息邮箱以及消息队列管理的 ITC功能函数的基本数据结构?C/OS-II的ECB有4种类型:OSSemCreate()、OSMutexCreate()、OSMboxCreate()、OSQCreate()200

24、8年12月15日 南京大学计算机系 37 C/OS-II 的任务间通信(续2)?基于ECB的任务间通信?一个任务或者中断服务子程序可以通过事件控制块ECB来向另外的任务发信号?事件控制块的的作用见下页图示 2008年12月15日 南京大学计算机系 38 C/OS-II 的任务间通信(续3)事件控制块的作用 ISRECB任务信号等待(1)(2)ECB任务信号等待(1)(2)任务ISRECB任务信号等待(4)(4)ECB任务等待/信号任务任务(4)信号等待(4)任务超时(3)超时(3)超时(5)超时(5)(5)等待/信号(5)2008年12月15日 南京大学计算机系 39 C/OS-II 的任务间

25、通信(续4)?上图ITC操作说明?任务或中断服务子程序可以给事件控制块ECB发信号。?只有任务可以等待另一个任务或中断服务子程序通过事件控制块ECB给它发送信号,而中断服务子程序是不能等待事件控制块ECB给它发送信号的。?处于等待状态的任务可以指定一个最长等待时间?多个任务可以同时等待同一事件的发生。?当事件控制块ECB是一个信号量时,任务可以等待它,也可以给它发送消息 2008年12月15日 南京大学计算机系 40 C/OS-II 的任务间通信(续5)?信号量控制下的任务间通信?在C/OS-II下,用信号量进行任务间通信时,先用信号量创建函数OSSemCreate创建一个信号量,且对该信号量

26、赋初始计数值。?如果信号量是用来表示一个或者多个事件的发生,那么该信号量的初始值应设为0?如果信号量是用于对共享资源的访问,那么该信号量的初始值应设为1?如果该信号量是用来表示允许任务访问n个相同的资源,那么该初始值显然应该是n,并把该信号量作为一个可计数的信号量使用。2008年12月15日 南京大学计算机系 41 C/OS-II 的内存管理?嵌入式内存管理?含虚拟存储器:硬件提供 MMU,软件提供虚拟存储器管理模块?不含虚拟存储器:段式管理?段式管理下存储器分配?固定分区法 固定分区法指内存中分区的个数固定不变 ,根据分区大小的不同,还可以分为等分方式和分区差分方式?动态分区法 各个分区的大

27、小是在相应的进程需要内存时根据需要建立的 2008年12月15日 南京大学计算机系 42 C/OS-II 的内存管理(续1)?C/OS-II的内存管理?改进型固定分区法,由操作系统把连续的大块内存按分区进行管理?每个分区包含整数个大小相同的内存块:两级固定分区?C/OS-II对malloc()和free()进行了改进?C/OS-II中使用内存控制块的数据结构跟踪每一个内存分区,系统中的每个内存分区都有它自己的内存控制块 2008年12月15日 南京大学计算机系 43 C/OS-II 的内存管理(续2)?C/OS-II对内存的管理通过以下四个函数完成?创建一个内存分区:OSMemCreate()

28、?分配一个内存块:OSMemGet()?释放一个内存块:OSMemPut()?查询一个内存分区的状态:OSMemQuery()2008年12月15日 南京大学计算机系 44 C/OS-II 的移植?移植C/OS-II必须满足以下要求?处理器的C编译器能产生可重入代码?用C语言可以打开和关闭中断?处理器支持中断,并且能产生定时中断?处理器支持能够容纳一定量数据的硬件栈区?处理器有将栈区指针和其他CPU寄存器读出和存储到栈区或内存中的指令 2008年12月15日 南京大学计算机系 45 C/OS-II 的移植(续1)?基本的配置和定义?基本配置和定义全部集中在OS_CPU.H中?定义和编译器相关的

29、数据结构?定义关中断和开中断宏?定义栈指针的增长方向 2008年12月15日 南京大学计算机系 46 C/OS-II 的移植(续2)?与移植有关的四个汇编语言程序?OSStartHighRdy():运行优先级最高的任务?OSCtxSw():任务级任务切换函数?OSintCtxSw():中断级任务切换函数?OSTickISR():时钟节拍中断服务子程序 2008年12月15日 南京大学计算机系 47 需要移植的汇编子程序(函数)OSTickISR?OSTickISR()时钟节拍中断服务子程序?时钟节拍来源于硬件电路,它是嵌入式操作系统的基本定时单位?OSTickISR()首先在被中断任务栈区中保

30、存CPU寄存器的值,调用OSIntEnter(),该函数将中断嵌套记录值OSIntNesting加1?OSTickISR()然后调用OSTimeTick()?OSTickISR()最后调用OSIntExit()2008年12月15日 南京大学计算机系 48 C/OS-II 的移植(续3)?与移植有关的主要C函数?需要在OS_CPU_C.C文件中改写10个简单的C函数,其中必须修改的函数是OSTaskStkInit(),其余9个都是用户接口函数?用户接口函数的调用位置都是在任务状态发生显著变动的地方?OSTaskStkInit()函数用于初始化任务的自用栈区,它在任务创建时被调用,负责在内存开辟

31、该任务的栈工作区,然后返回该栈的栈顶指针stk。2008年12月15日 南京大学计算机系 49 有关C/OS-II 源代码的通读?通读C/OS-II源代码是掌握嵌入式操作系统的好方法,建议有条件的情况下由教师带领同学通读。?通读C/OS-II源代码的注意事项?硬件平台不同的C/OS-II源代码是不同的?建议先阅读x86平台的C/OS-II全套源代码,再阅读ARM平台的C/OS-II源代码。有可能的情况下,阅读MIPS平台和PowerPC平台的C/OS-II源代码?阅读C/OS-II的源代码主要目的是全面了解嵌入式操作系统的总体结构。2008年12月15日 南京大学计算机系 50 有关C/OS-

32、II 的实验?通过C/OS-II实验项目初学者可以深切地体会嵌入式项目或者嵌入式产品的开发,从而获得第一手嵌入式软件开发经验。?以下是可供教师和学生选择的实验项目。?C/OS-II在不同ARM开发板上的移植?将C/OS-II移植到MIPS和PowerPC开发板上?基于C/OS-II的设备驱动开发?C/OS-II的工作参数配置实验?C/OS-II的应用程序编程 2008年12月15日 南京大学计算机系 51 第19讲重点?C/OS-II的特点、软件层次和代码结构?C/OS-II启动和初始化?C/OS-II的内核?C/OS-II的任务调度?C/OS-II的任务切换?C/OS-II的中断处理?C/O

33、S-II的时间管理?C/OS-II的任务间通信?C/OS-II的存储管理?C/OS-II的移植 2008年12月15日 南京大学计算机系 52 第19讲复习题思考题?两名工程师就C/OS-II任务就绪表占用内存空间问题各自发表了观点,A工程师 认为占8个字节,B工程师认为占9个字节,你认为哪个工程师的观点正确??如果需要对C/OS-II的任务管理数进行扩充,你认为应当如何进行。?请说明C/OS-II的任务就绪表和事件控制表的异同。?在C/OS-II环境,当用户建立一个新任务时,至少要向任务建立函数OSTaskCreate()函数传递哪几个参数??创建一个C/OS-II用户新任务时,先创建该任务的私有堆栈,还是先创建该任务的TCB??如果解决C/OS-II的优先级反转问题,请你给出一个解决方案。2008年12月15日 南京大学计算机系 53 第19讲结束?谢谢大家!?欢迎各位读者提出宝贵的意见和建议!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(嵌入式系统基础教程第19讲第9章嵌入式操作系统课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|