嵌入式系统基础教程第19讲第9章嵌入式操作系统.ppt
《嵌入式系统基础教程第19讲第9章嵌入式操作系统.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统基础教程第19讲第9章嵌入式操作系统.ppt(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式系统基础教程第19讲第9章嵌入式操作系统 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望第第9章章 嵌入式操作系统概论嵌入式操作系统概论l本讲内容l实时系统l嵌入式操作系统的特点和分类lRTOS常用调度算法l启动程序bootloaderl嵌入式操作系统C/OS-II 2008年12月15日2南京大学计算机系9.5 嵌入式操作系统嵌入式操作系统C/OS-II lC/OS-II的主要特点lC/OS-II的层次lC/OS-II的代码结构lC/OS-II的内核lC/
2、OS-II的任务调度lC/OS-II的任务切换lC/OS-II的中断处理lC/OS-II的时间管理lC/OS-II的任务间通信lC/OS-II的存储管理lC/OS-II的移植2008年12月15日3南京大学计算机系C/OS-II简介简介l作者:Jean Labrossel源码公开的嵌入式实时系统l已被移植到40多种不同的CPU上lhttp:/www.C/OS-II.com提供技术服务支持。2008年12月15日4南京大学计算机系C/OS-II的主要特点的主要特点l可移植性和可确定性 l绝大部分代码用ANSI C编写l与处理器硬件相关的代码用汇编语言编写l移植条件移植目标处理器要有硬件堆栈指针C
3、PU内容寄存器入栈、出栈指令C编译器支持内嵌汇编或C可扩展,可连接汇编模块关中断、开中断可在C语言中实现2008年12月15日5南京大学计算机系C/OS-II的主要特点(续的主要特点(续1)l抢占式多任务 l可以管理64个任务,8个任务是系统任务l用户可以最多定义56个任务,每个任务优先级不相同l实时性较强,参看下表OSVxWorksC/OS-IIRT-LinuxQNX6供应商Wind RiverMicriumFSMlabsQuanturm硬件平台MC6800080486/33MHz80486/60MHz80486/33MHz任务切换3.8微秒9微秒不详12.57微秒中断响应3微秒7.5微秒2
4、5微秒7.54微秒4 4种嵌入式操作系统的实时性能典型值种嵌入式操作系统的实时性能典型值2008年12月15日6南京大学计算机系C/OS-II的主要特点(续的主要特点(续2)l可固化可裁剪 l实用程序可以只使用C/OS-II中需要的那些系统服务l任务由独立堆栈lC/OS-II允许每个任务由不同的栈空间l嵌套中断管理l嵌套层数可达255层2008年12月15日7南京大学计算机系C/OS-II的层次的层次lC/OS-II嵌入式系统软件架构(见下页),是一个建立在硬件系统上的四层软件结构l最上层是应用软件层lAPI层和支撑软件层l内核l设备驱动程序2008年12月15日8南京大学计算机系C/OS-I
5、I的层次示意图的层次示意图l基于C/OS-II的嵌入式系统软件层次示意图如右图所示2008年12月15日9南京大学计算机系C/OS-II的代码结构的代码结构l基于C/OS-II平台的嵌入式系统体系结构如右下图所示lC/OS-II主要由三大类程序文件构成A类:处理器无关B类:应用程序有关C类:硬件平台相关2008年12月15日10南京大学计算机系C/OS-II的代码结构(续)的代码结构(续)l按功能分l核心模块、预处理模块、进程间通信模块、内存管理模块、任务与调度管理器模块、时间管理模块、移植模块lC/OS-II的源代码文件组成l见教材第344页表9-52008年12月15日11南京大学计算机系
6、C/OS-II的代码结构(续)的代码结构(续)lC/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日12南京大学计算机系C/OS-II的代码结构(续)的代码结构
7、(续)l对于执行无限循环的任务,通常采用第一种形式;对于只执行一次就自我删除的任务,采用第二种形式。l以下是推荐的C/OS-II应用程序任务的基本结构 void Usertask(void*pdata)INT8U ReturnNum;/返回值 InitTimer();/可选 for(;)./应用程序代码 OSTimeDly(n);/常用的语句 2008年12月15日13南京大学计算机系C/OS-II的代码结构(续)的代码结构(续)lC/OS-II的启动过程lBootloader执行完毕后,调用应用程序主文件(通常是main.c)里的main()函数。main()函数在执行过程中,除硬件初始化函
8、数和用户函数外,按以下次序执行三个主要的C/OS-II函数:操作系统初始化OSInit();任务创建OSTaskCreate();任务调度开始OSStart()l一旦OSStart()函数开始执行,就标志着C/OS-II进入了多任务调度的正常运行状态 2008年12月15日14南京大学计算机系C/OS-II的内核的内核lC/OS-II内核只提供任务调度、任务间通信(ITC)与同步、任务管理、时间管理和内存管理等基本功能 l可裁剪编译到8K左右,全部只有100K左右,消耗资源非常小l在小规模的代码内实现了抢占式任务调度、多任务通信功能 2008年12月15日15南京大学计算机系C/OS-II的内
9、核(续的内核(续1)lC/OS-II的临界区lC/OS-II调用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏来执行关中断和开中断,对于不同的体系结构,这两个宏定义不一样。lOS_CPU.H文件中含有OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()的定义2008年12月15日16南京大学计算机系C/OS-II的内核(续的内核(续2)lC/OS-II的任务状态l最大任务数64个,最高优先级为0,最低优先级取值为实际定义的最大任务数减1.l任务建立之后,拥有优先级,执行函数,自用栈空间和 任务控制块(TCB),在运行时刻能够完全控制C
10、PU的操作以及全部用户可访问寄存器的操作。2008年12月15日17南京大学计算机系C/OS-II的任务状态转换图的任务状态转换图C/OS-II的每个任务都是一个无限的循环。每个任务都处在休眠态、就绪态、运行态、挂起态和被中断态的某种状态下(任务状态变迁如右图所示)2008年12月15日18南京大学计算机系C/OS-II的内核(续的内核(续3)l休眠态(dormant)l这种状态相当于该任务驻留在内存中,但还没有交给内核管理。把任务交给内核是通过调用任务创建函数实现的lC/OS-II两个任务创建函数OSTaskCreate()和OSTaskCreateExt()2008年12月15日19南京大
11、学计算机系C/OS-II的内核(续的内核(续3)l就绪态(ready)l在这种状态下意味着该任务已经准备好,且可运行,但由于该任务的优先级比正在运行的任务的优先级低,所以还暂时不能运行lC/OS-II就绪表为每一个优先级的任务提供了一个位元,登记该任务是否就绪,就绪时取值为1,没有就绪时取值为0 l运行态l得到了CPU的控制权正在运行之中的任务状态 2008年12月15日20南京大学计算机系C/OS-II的内核(续的内核(续4)l挂起态(pending)或者等待态(waiting)l正在运行的任务由于调用延时函数OSTimeDly(),或等待事件信号量而将自身挂起 l被中断态(Interrup
12、ted)l发生中断时CPU提供相应的中断服务,原来正在运行的任务暂时停止运行,进入了被中断状态 2008年12月15日21南京大学计算机系C/OS-II的内核(续的内核(续5)l任务控制块OS_TCBl内核对任务的管理通过任务控制块OS_TCB(Task Control Block)进行。任务控制块是一个数据结构,在任务创建时内核会申请一个空白TCB,而后进行初始化,将创建的任务信息填入该TCB的各个字段。当任务的CPU使用权被剥夺时,C/OS-II用它来保存该任务的状态。当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断处继续执行。OS_TCB全部驻留在RAM中 2008年12月
13、15日22南京大学计算机系C/OS-II的内核(续的内核(续6)lOS_TCB的字段说明lOS_TCB 数据结构中的OSTCBX,OSTCBY,OSTCBBitX,OSTCBBitY四个变量用于加速任务进入就绪态的过程或进入等待事件发生状态的过程 l是根据任务的优先级OSTCBPrio计算得出,计算公式如下 OSTCBY=OSTCBPrio 3;OSTCBBitY=OSMapTblOSTCBY;OSTCBX=OSTCBPrio&0 x07;OSTCBBitX=OSMapTblOSTCBX;2008年12月15日23南京大学计算机系C/OS-II的任务调度的任务调度lC/OS-II的就绪表lC/
14、OS-II的就绪任务登记在就绪表中。就绪表由两个变量OSRdyGrp和OSRdyTbl构成l OSRdyGrp是一个单字节整数变量 lOSRdyTblOS_LOWEST_PRIO/8+1是单字节整数数组,其元素个数定义为最低优先级除以8加1,最多可有8个元素(字节)2008年12月15日24南京大学计算机系C/OS-II的任务调度(续的任务调度(续1)位图形式的C/OS-II的任务就绪表和就绪实例2008年12月15日25南京大学计算机系C/OS-II的任务调度(续的任务调度(续2)l任务就绪表的操作l登记一个新就绪表操作的典型指令段l删除不再处于就绪态任务的指令段l从就绪表中找到最高优先级的
15、任务2008年12月15日26南京大学计算机系C/OS-II的任务调度(续的任务调度(续3)lC/OS-II的任务调度lC/OS-II总是运行处于就绪态任务中优先级最高的那一个 lOSSched()函数是任务调度的前导函数,判断进行任务调度的三个条件是否满足。这三个条件分别是:l中断嵌套层数共享全程变量OSIntNesting=0 l任务调度加锁层数共享全程变量OSLockNesting=0 l就绪表中查找到的最高优先级任务的优先级比当前任务的优先级高 2008年12月15日27南京大学计算机系C/OS-II的任务切换的任务切换l也叫做上下文切换(Context Switch)l当C/OS-I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 基础教程 19 操作系统
限制150内