




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《嵌入式系统原理与开发》
第19讲南京大学计算机系俞建新主讲12月15日1南京大学计算机系第1页第9章嵌入式操作系统概论本讲内容实时系统嵌入式操作系统特点和分类RTOS惯用调度算法开启程序bootloader嵌入式操作系统µC/OS-II
12月15日2南京大学计算机系第2页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存放管理µC/OS-II移植12月15日3南京大学计算机系第3页µC/OS-II介绍作者:JeanLabrosse源码公开嵌入式实时系统已被移植到40各种不一样CPU上/提供技术服务支持。12月15日4南京大学计算机系第4页µC/OS-II主要特点可移植性和可确定性绝大部分代码用ANSIC编写与处理器硬件相关代码用汇编语言编写移植条件 移植目标处理器要有硬件堆栈指针 CPU内容存放器入栈、出栈指令 C编译器支持内嵌汇编或C可扩展,可连接汇编模块 关中止、开中止可在C语言中实现12月15日5南京大学计算机系第5页µC/OS-II主要特点(续1)抢占式多任务
能够管理64个任务,8个任务是系统任务用户能够最多定义56个任务,每个任务优先级不相同实时性较强,参看下表OSVxWorksµC/OS-IIRT-LinuxQNX6供给商WindRiverMicriumFSMlabsQuanturm硬件平台MC6800080486/33MHz80486/60MHz80486/33MHz任务切换3.8微秒﹤9微秒不详12.57微秒中止响应﹤3微秒﹤7.5微秒25微秒7.54微秒4种嵌入式操作系统实时性能经典值12月15日6南京大学计算机系第6页µC/OS-II主要特点(续2)可固化可裁剪实用程序能够只使用µC/OS-II中需要那些系统服务任务由独立堆栈µC/OS-II允许每个任务由不一样栈空间嵌套中止管理嵌套层数可达255层12月15日7南京大学计算机系第7页µC/OS-II层次µC/OS-II嵌入式系统软件架构(见下页),是一个建立在硬件系统上四层软件结构最上层是应用软件层API层和支撑软件层内核设备驱动程序12月15日8南京大学计算机系第8页µC/OS-II层次示意图基于µC/OS-II嵌入式系统软件层次示意图如右图所表示12月15日9南京大学计算机系第9页µC/OS-II代码结构基于µC/OS-II平台嵌入式系统体系结构如右下列图所表示µC/OS-II主要由三大类程序文件组成A类:处理器无关B类:应用程序相关C类:硬件平台相关12月15日10南京大学计算机系第10页µC/OS-II代码结构(续)按功效分关键模块、预处理模块、进程间通信模块、内存管理模块、任务与调度管理器模块、时间管理模块、移植模块µC/OS-II源代码文件组成见教材第344页表9-512月15日11南京大学计算机系第11页µC/OS-II代码结构(续)µC/OS-II任务代码有两种框架结构,以以下出:voidUsertask(void*pdata){for(;;){用户代码;OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();用户代码;}}voidUsertask(void*pdata){用户代码;OSTaskDel(OS_PRIO_SELF);}12月15日12南京大学计算机系第12页µC/OS-II代码结构(续)对于执行无限循环任务,通常采取第一个形式;对于只执行一次就自我删除任务,采取第二种形式。以下是推荐µC/OS-II应用程序任务基本结构
voidUsertask(void*pdata){INT8UReturnNum;//返回值InitTimer();//可选for(;;)………..//应用程序代码OSTimeDly(n);//惯用语句}12月15日13南京大学计算机系第13页µC/OS-II代码结构(续)µC/OS-II开启过程Bootloader执行完成后,调用应用程序主文件(通常是main.c)里main()函数。main()函数在执行过程中,除硬件初始化函数和用户函数外,按以下次序执行三个主要µC/OS-II函数:①操作系统初始化OSInit();②任务创建OSTaskCreate();③任务调度开始OSStart()一旦OSStart()函数开始执行,就标志着µC/OS-II进入了多任务调度正常运行状态12月15日14南京大学计算机系第14页µC/OS-II内核µC/OS-II内核只提供任务调度、任务间通信(ITC)与同时、任务管理、时间管理和内存管理等基本功效可裁剪编译到8K左右,全部只有100K左右,消耗资源非常小在小规模代码内实现了抢占式任务调度、多任务通信功效12月15日15南京大学计算机系第15页µC/OS-II内核(续1)µC/OS-II临界区µC/OS-II调用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏来执行关中止和开中止,对于不一样体系结构,这两个宏定义不一样。OS_CPU.H文件中含有OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()定义12月15日16南京大学计算机系第16页µC/OS-II内核(续2)µC/OS-II任务状态最大任务数64个,最高优先级为0,最低优先级取值为实际定义最大任务数减1.任务建立之后,拥有优先级,执行函数,自用栈空间和任务控制块(TCB),在运行时刻能够完全控制CPU操作以及全部用户可访问存放器操作。12月15日17南京大学计算机系第17页µC/OS-II任务状态转换图µC/OS-II每个任务都是一个无限循环。每个任务都处于休眠态、就绪态、运行态、挂起态和被中止态某种状态下(任务状态变迁如右图所表示)12月15日18南京大学计算机系第18页µC/OS-II内核(续3)休眠态(dormant)这种状态相当于该任务驻留在内存中,但还没有交给内核管理。把任务交给内核是经过调用任务创建函数实现µC/OS-II两个任务创建函数 OSTaskCreate()和OSTaskCreateExt()12月15日19南京大学计算机系第19页µC/OS-II内核(续3)就绪态(ready)在这种状态下意味着该任务已经准备好,且可运行,但因为该任务优先级比正在运行任务优先级低,所以还暂时不能运行µC/OS-II就绪表为每一个优先级任务提供了一个位元,登记该任务是否就绪,就绪时取值为1,没有就绪时取值为0运行态得到了CPU控制权正在运行之中任务状态12月15日20南京大学计算机系第20页µC/OS-II内核(续4)挂起态(pending)或者等候态(waiting)正在运行任务因为调用延时函数OSTimeDly(),或等候事件信号量而将本身挂起被中止态(Interrupted)发生中止时CPU提供对应中止服务,原来正在运行任务暂时停顿运行,进入了被中止状态12月15日21南京大学计算机系第21页µC/OS-II内核(续5)任务控制块OS_TCB内查对任务管理经过任务控制块OS_TCB(TaskControlBlock)进行。任务控制块是一个数据结构,在任务创建时内核会申请一个空白TCB,而后进行初始化,将创建任务信息填入该TCB各个字段。当任务CPU使用权被剥夺时,µC/OS-II用它来保留该任务状态。当任务重新得到CPU使用权时,任务控制块能确保任务从当初被中止处继续执行。OS_TCB全部驻留在RAM中12月15日22南京大学计算机系第22页µC/OS-II内核(续6)OS_TCB字段说明OS_TCB数据结构中OSTCBX,OSTCBY,OSTCBBitX,OSTCBBitY四个变量用于加速任务进入就绪态过程或进入等候事件发生状态过程是依据任务优先级OSTCBPrio计算得出,计算公式以下 OSTCBY =OSTCBPrio>>3; OSTCBBitY =OSMapTbl[OSTCBY]; OSTCBX =OSTCBPrio&0x07; OSTCBBitX =OSMapTbl[OSTCBX];12月15日23南京大学计算机系第23页µC/OS-II任务调度µC/OS-II就绪表µC/OS-II就绪任务登记在就绪表中。就绪表由两个变量OSRdyGrp和OSRdyTbl[]组成OSRdyGrp是一个单字节整数变量OSRdyTbl[OS_LOWEST_PRIO/8+1]是单字节整数数组,其元素个数定义为最低优先级除以8加1,最多可有8个元素(字节)12月15日24南京大学计算机系第24页µC/OS-II任务调度(续1)位图形式µC/OS-II任务就绪表和就绪实例12月15日25南京大学计算机系第25页µC/OS-II任务调度(续2)任务就绪表操作登记一个新就绪表操作经典指令段删除不再处于就绪态任务指令段从就绪表中找到最高优先级任务12月15日26南京大学计算机系第26页µC/OS-II任务调度(续3)µC/OS-II任务调度µC/OS-II总是运行处于就绪态任务中优先级最高那一个OSSched()函数是任务调度前导函数,判断进行任务调度三个条件是否满足。这三个条件分别是:中止嵌套层数共享全程变量OSIntNesting=0任务调度加锁层数共享全程变量OSLockNesting=0就绪表中查找到最高优先级任务优先级比当前任务优先级高12月15日27南京大学计算机系第27页µC/OS-II任务切换也叫做上下文切换(ContextSwitch)当µC/OS-II内核决定运行另外任务时,它保留正在运行任务上下文,这些内容保留在任务自用堆栈之中。上下文入栈工作完成以后,把下一个将要执行任务上下文从该任务自用堆栈中装入CPU存放器,然后开始该任务运行12月15日28南京大学计算机系第28页ARM处理器任务栈上下文存放结构图12月15日29南京大学计算机系第29页µC/OS-II中止处理µC/OS-II中中止服务子程序主要用汇编语言编写而成中止服务子程序在执行前将被中止任务执行现场保留在自用堆栈中止服务子程序执行事件处理有两种方法。一个方法是经过OSMBoxPost()、OSQPost()、OSSemPost()等函数去通知真正做该事件处理那个任务,让任务完成中止事件处理。另外一个是由中止服务子程序本身完成事件处理12月15日30南京大学计算机系第30页µC/OS-II中止处理(续1)中止服务子程序伪码结构以下所表示:保留全部CPU存放器到堆栈;调用OSIntEnter()或者对OSIntNesting变量加1;执行中止服务代码,或者发出IPC消息通知特定任务去执行中止服务;调用OSIntExit()函数;恢复全部CPU存放器;执行中止返回指令;12月15日31南京大学计算机系第31页µC/OS-II中止处理(续2)调用中止退出函数OSIntExit()标志着中止服务子程序终止,OSIntExit()将中止嵌套层数计数器减1。当中止嵌套计数器减到零而且调度未被禁止(OSLockNesting=0),µC/OS-II要重新开始调度。12月15日32南京大学计算机系第32页µC/OS-II时间管理µC/OS-II能够提供周期性时钟信号,节拍率10~100Hz。用户必须在多任务系统开启以后即在调用OSStart()之后激活时钟节拍信号发生器时钟节拍中止服务子程序必须用汇编语言编写每当硬件定时器发出节拍中止请求,µC/OS-II就要响应这个中止12月15日33南京大学计算机系第33页µC/OS-II时间管理(续)µC/OS-II时间管理函数
节拍延时函数OSTimeDly() 该函数经常位于任务函数结束处,用以退出运行,用户能够借助定义全局常数OS_TICKS_PER_SECOSTimeDlyHMSM() 该函数能够按小时(H)、分(M)、秒(S)和毫秒(m)来定义时间OSTimeDlyResume() 依据需要正处于延时期任务能够被用户中止延时
12月15日34南京大学计算机系第34页µC/OS-II任务间通信µC/OS-II中保护任务间共享数据和提供任务间通信主要三种方式利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来关闭中止和打开中止利用函数OSSchedLock()和OSSchekUnlock()对µC/OS-II中任务调度函数上锁和开锁利用信号量、互斥信号量、邮箱和消息队列进行任务间通信,属于事件控制同时与通信。12月15日35南京大学计算机系第35页µC/OS-II任务间通信(续1)事件控制块ECB用于实现信号量管理、互斥型信号量管理、消息邮箱以及消息队列管理ITC功效函数基本数据结构µC/OS-IIECB有4种类型:OSSemCreate()、OSMutexCreate()、OSMboxCreate()、OSQCreate()12月15日36南京大学计算机系第36页µC/OS-II任务间通信(续2)基于ECB任务间通信一个任务或者中止服务子程序能够经过事件控制块ECB来向另外任务发信号事件控制块作用见下页图示12月15日37南京大学计算机系第37页µC/OS-II任务间通信(续3)事件控制块作用12月15日38南京大学计算机系第38页µC/OS-II任务间通信(续4)上图ITC操作说明任务或中止服务子程序能够给事件控制块ECB发信号。只有任务能够等候另一个任务或中止服务子程序经过事件控制块ECB给它发送信号,而中止服务子程序是不能等候事件控制块ECB给它发送信号。处于等候状态任务能够指定一个最长等候时间多个任务能够同时等候同一事件发生。当事件控制块ECB是一个信号量时,任务能够等候它,也能够给它发送消息12月15日39南京大学计算机系第39页µC/OS-II任务间通信(续5)信号量控制下任务间通信在µC/OS-II下,用信号量进行任务间通信时,先用信号量创建函数OSSemCreate创建一个信号量,且对该信号量赋初始计数值。假如信号量是用来表示一个或者多个事件发生,那么该信号量初始值应设为0假如信号量是用于对共享资源访问,那么该信号量初始值应设为1假如该信号量是用来表示允许任务访问n个相同资源,那么该初始值显然应该是n,并把该信号量作为一个可计数信号量使用。12月15日40南京大学计算机系第40页µC/OS-II内存管理嵌入式内存管理含虚拟存放器:硬件提供MMU,软件提供虚拟存放器管理模块不含虚拟存放器:段式管理段式管理下存放器分配固定分区法 固定分区法指内存中分区个数固定不变,依据分区大小不一样,还能够分为等分方式和分区差分方式动态分区法 各个分区大小是在对应进程需要内存时依据需要建立12月15日41南京大学计算机系第41页µC/OS-II内存管理(续1)µC/OS-II内存管理改进型固定分区法,由操作系统把连续大块内存按分区进行管理每个分区包含整数个大小相同内存块:两级固定分区µC/OS-II对malloc()和free()进行了改进µC/OS-II中使用内存控制块数据结构跟踪每一个内存分区,系统中每个内存分区都有它自己内存控制块12月15日42南京大学计算机系第42页µC/OS-II内存管理(续2)µC/OS-II对内存管理经过以下四个函数完成创建一个内存分区:OSMemCreate()分配一个内存块:OSMemGet()释放一个内存块:OSMemPut()查询一个内存分区状态:OSMemQuery()12月15日43南京大学计算机系第43页µC/OS-II移植移植µC/OS-II必须满足以下要求处理器C编译器能产生可重入代码用C语言能够打开和关闭中止处理器支持中止,而且能产生定时中止处理器支持能够容纳一定量数据硬件栈区处理器有将栈区指针和其它CPU存放器读出和存放到栈区或内存中指令12月15日44南京大学计算机系第44页µC/OS-II移植(续1)基本配置和定义基本配置和定义全部集中在OS_CPU.H中定义和编译器相关数据结构定义关中止和开中止宏定义栈指针增加方向12月15日45南京大学计算机系第45页µC/OS-II移植(续2)与移植相关四个汇编语言程序OSStartHighRdy():运行优先级最高任务OSCtxSw():任务级任务切换函数OSintCtxSw():中止级任务切换函数OSTickISR():时钟节拍中止服务子程序12月15日46南京大学计算机系第46页需要移植汇编子程序(函数)OSTickISROSTickISR()――时钟节拍中止服务子程序时钟节拍起源于硬件电路,它是嵌入式操作系统基本定时单位OSTickISR()首先在被中止任务栈区中保留CPU存放器值,调用OSIntEnter(),该函数将中止嵌套统计值OSIntNesting加1OSTickISR()然后调用OSTimeTick()OSTickISR()最终调用OSIntExit()12月15日47南京大学计算机系第47页µC/OS-II移植(续3)与移植相关主要C函数需要在OS_CPU_C.C文件中改写10个简单C函数,其中必须修改函数是OSTaskStkInit(),其余9个都是用户接口函数用户接口函数调用位置都是在任务状态发生显著变动地方OSTaskStkInit()函数用于初始化任务自用栈区,它在任务创建时被调用,负责在内存开辟该任务栈工作区,然后返回该栈栈顶指针stk。12月15日48南京大学计算机系第48页相关µC/OS-II源代码通读通读µC/OS-II源
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年项目经理劳动合同范本
- 2025代理销售合同协议书范本
- 2025年租店转让合同协议书
- 2025合同解除协议书范本
- 《2025光伏电站用工试用合同》
- 2025租赁合同范文大全
- 2025版房产借款合同书范本
- 2025承租方安全生产责任合同
- 2025沉井钻孔混凝土灌注桩施工承包合同
- 《心脑血管肿瘤》课件
- 云-边-端协同架构设计-洞察分析
- 品管圈PDCA案例-中医医院减少住院患者艾灸烫伤率医院改善成果汇报
- 《新闻基础知识》近年考试真题题库(附答案)
- 【MOOC】大学摄影基础-福建师范大学 中国大学慕课MOOC答案
- 【MOOC】固体物理学-北京交通大学 中国大学慕课MOOC答案
- 心衰病人的观察与护理
- 20241115某克缝纫机供应链计划IBP PPDS详细解决方案
- 爱护环境主题班会课件
- 大班游戏活动案例《快乐沙池》
- 糖尿病饮食指导护理
- 国有企业战略规划审计实施方案
评论
0/150
提交评论