书签 分享 收藏 举报 版权申诉 / 159
上传文档赚钱

类型嵌入式系统教学课件:ucos-ii代码总结分析(同名1369).ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3194698
  • 上传时间:2022-08-01
  • 格式:PPT
  • 页数:159
  • 大小:2.20MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《嵌入式系统教学课件:ucos-ii代码总结分析(同名1369).ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    嵌入式 系统 教学 课件 ucos ii 代码 总结 分析 同名 1369
    资源描述:

    1、1第四章第四章 实时操作系统实时操作系统 C/OS-C/OS-分析分析2实时操作系统实时操作系统C/OS-II C/OS-II概述概述任务管理任务管理中断和时间中断和时间管理管理任务之间的通信与任务之间的通信与同步同步存储管理存储管理3通用操作系统和嵌入式(实时)操作系统通用操作系统和嵌入式(实时)操作系统l通用操作系统:通用操作系统:Windows/NT/XPWindows/NT/XP、LinuxLinux、UNIXUNIX等,用等,用于于PCPC机、服务器,机、服务器,l嵌入式(实时)操作系统:用于嵌入式设备的操作系统嵌入式(实时)操作系统:用于嵌入式设备的操作系统,具有通用操作系统的基本

    2、特点,又具有系统实时性、,具有通用操作系统的基本特点,又具有系统实时性、硬件的相关依赖性、软件固态化以及应用的专用性等特硬件的相关依赖性、软件固态化以及应用的专用性等特点;点;l嵌入式(实时)操作系统通常包括与硬件相关的底层驱嵌入式(实时)操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器面、标准化浏览器BrowserBrowser等;等;l嵌入式(实时)操作系统的重要指标:实时性(中断响嵌入式(实时)操作系统的重要指标:实时性(中断响应时间、任务切换时间等)、尺寸(可裁剪性应时间、任务切换时间等)

    3、、尺寸(可裁剪性 )、可)、可扩展性(内核、中间件);扩展性(内核、中间件);4嵌入式操作系统的发展嵌入式操作系统的发展操作系统内核操作系统内核应用程序应用程序驱动程序和固件驱动程序和固件操作系统内核操作系统内核文件系统文件系统驱动程序和固件驱动程序和固件API GUI应用程序应用程序操作系统内核操作系统内核文件系统文件系统驱动程序和固件驱动程序和固件API GUI应用程序应用程序通信协议通信协议库函数库函数80年代初期年代初期80年代中期年代中期-90年代中年代中期期90年代末期年代末期-21世纪世纪5常见的嵌入式操作系统常见的嵌入式操作系统 实时嵌入式操作系统的种类繁多,大体上可分实时嵌入

    4、式操作系统的种类繁多,大体上可分为两种,商用型和免费型。为两种,商用型和免费型。l商用型的实操作系统功能稳定、可靠,有完善商用型的实操作系统功能稳定、可靠,有完善的技术支持和售后服务,但往往价格昂贵的技术支持和售后服务,但往往价格昂贵,如如VxworksVxworks、QNXQNX、WinCEWinCE、Palm OSPalm OS等。等。l免费型的实时操作系统在价格方面具有优势,免费型的实时操作系统在价格方面具有优势,目前主要有目前主要有Linux,CLinux,C/OS/OS是一种源码开放的商是一种源码开放的商业业RTOSRTOS;6RTOSRTOS在嵌入式系统中的位置在嵌入式系统中的位置

    5、嵌入式硬件平台BSPKERNELFSTCP/IP设备驱动设备驱动设备设备I/O调试工具调试工具其它组件其它组件应用RTOSC/C+7C/OS简介1、C/OSMicro Controller O S,微控制器操作系统2 2、C/OSC/OS简介l美国人美国人Jean LabrosseJean Labrosse 1992 1992年完成年完成l应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等机控制、高速公路电话系统、自动提款机等 l19981998年年 C/OSC/OS-II-II,目前的版本,目

    6、前的版本 C/OSC/OS-II V2.61-II V2.61,2.722.72l20002000年,得到美国航空管理局(年,得到美国航空管理局(FAAFAA)的认证,可以用于飞行器)的认证,可以用于飞行器中中l网站网站www.ucos-II.comwww.ucos-II.com()8u公开源代码公开源代码u可移植性(可移植性(PortablePortable)绝大部分绝大部分 C/OS-II C/OS-II的源码是用移植性很强的的源码是用移植性很强的ANSI CANSI C写的。和微处理器写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最硬件相关的那部分是用汇编语言

    7、写的。汇编语言写的部分已经压到最低限度,使得低限度,使得 C/OS-II C/OS-II便于移植到其他微处理器上。便于移植到其他微处理器上。C/OS-II C/OS-II可以在可以在绝大多数绝大多数8 8位、位、1616位、位、3232位以至位以至6464位微处理器、微控制器位微处理器、微控制器 、数字信号处、数字信号处理器(理器(DSPDSP)上运行。)上运行。u可固化(可固化(ROMableROMable)C/OS-II C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(段(C C编译、连接、下载和固化),编译、连接、

    8、下载和固化),C/OS-II C/OS-II可以嵌入到读者的产品可以嵌入到读者的产品中成为产品的一部分。中成为产品的一部分。u可裁剪(可裁剪(ScalableScalable)可以只使用可以只使用 C/OS-II C/OS-II中应用程序需要的那些系统服务。也就是说某产中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个品可以只使用很少几个 C/OS-II C/OS-II调用,而另一个产品则使用了几乎所调用,而另一个产品则使用了几乎所有有 C/OS-II C/OS-II的功能,这样可以减少产品中的的功能,这样可以减少产品中的 C/OS-II C/OS-II所需的存储器空所需的存储器空

    9、间(间(RAMRAM和和ROMROM)。这种可剪裁性是靠条件编译实现的。)。这种可剪裁性是靠条件编译实现的。C/OS的性能特点(一)9u占先式(占先式(PreemptivePreemptive)u多任务多任务 C/OS-IIC/OS-II可以管理可以管理6464个任务,然而,目前这一版本保留个任务,然而,目前这一版本保留8 8个给系统。应用程序最个给系统。应用程序最多可以有多可以有256256个任务个任务u可确定性可确定性 全部全部 C/OS-II C/OS-II的函数调用与服务的执行时间具有可确定性。的函数调用与服务的执行时间具有可确定性。u任务栈任务栈 每个任务有自己单独的栈,每个任务有自

    10、己单独的栈,C/OS-II C/OS-II允许每个任务有不同的栈空间,以便压低应允许每个任务有不同的栈空间,以便压低应用程序对用程序对RAMRAM的需求。的需求。u系统服务系统服务 C/OS-IIC/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。的申请与释放、时间相关函数等。u中断管理中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中

    11、断嵌套层数可达高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255255层。层。u稳定性与可靠性稳定性与可靠性C/OS的性能特点(二)10 C/OS-IIC/OS-II图书图书l描述了描述了 C/OS-IIC/OS-II内部的工作原理内部的工作原理l随书的随书的CDCD中包含了源代码中包含了源代码n工业界最清晰的源代码工业界最清晰的源代码l除英文版外,有中文和韩文版除英文版外,有中文和韩文版ChineseKoreanEnglishISBN 1-57820-103-9美国CMP BOOK ISBN 7-81077-290-2北京航空航天大学出版社ISBN 89-951540-5-5

    12、11C/OS-II的各种商业应用l全世界有数百种产品在应用全世界有数百种产品在应用:lAvionicslMedicallCell phoneslRouters and switcheslHigh-end audio equipmentlWashing machines and dryerslUPS(Uninterruptible Power Supplies)lIndustrial controllerslGPS Navigation SystemslMicrowave RadioslInstrumentationlPoint-of-sale terminalsl更多更多12C/OS-II提供

    13、的系统服务l信号量信号量l带互斥机制的信号量带互斥机制的信号量n减少优先级倒置的问题减少优先级倒置的问题l事件标志事件标志l消息信箱消息信箱l消息队列消息队列l内存管理内存管理l时钟管理时钟管理l任务管理任务管理操作系统的概述操作系统的概述13C/OS-II的文件结构14 C/OS-II概述概述任务管理任务管理中断和时间中断和时间管理管理任务之间的通信与任务之间的通信与同步同步存储管理存储管理15任务的实现任务的实现创建任务的系统服务创建任务的系统服务lOSTaskCreate()INT8U OSTaskCreate(void(*task)(void*pd),/任务代码指针任务代码指针 voi

    14、d*pdata,/任务参数指针任务参数指针OS_STK*ptos,/任务栈的栈顶指针任务栈的栈顶指针 INT8U prio /任务的优先级任务的优先级);lOSTaskCreateExt()提问:提问:C/OS-II中的任务是进程还是线程?中的任务是进程还是线程?16任务主函数任务主函数一个任务通常是一个无限循环(返回值类型一个任务通常是一个无限循环(返回值类型voidvoid)void MyTask(void*pdata)while(1)do something;waiting;do something;Why?17任务也可以自我删除(并非真的删除,只是内核不任务也可以自我删除(并非真的删除

    15、,只是内核不再知道该任务)再知道该任务)void MyTask(void*pdata)./*用户代码用户代码*/OSTaskDel(OS_PRIO_SELF);18lC/OS-C/OS-可以管理多达可以管理多达6464个任务;个任务;l每个任务被赋以不同的优先级,取值从每个任务被赋以不同的优先级,取值从0 0到到OS_LOWEST_PRIO-2OS_LOWEST_PRIO-2,数值越小,优先级越高;,数值越小,优先级越高;l系统保留了优先级为系统保留了优先级为0 0、1 1、2 2、3 3、OS_LOWEST_PRIO-3OS_LOWEST_PRIO-3、OS_LOWEST_PRI0-2OS_

    16、LOWEST_PRI0-2,OS_LOWEST_PRI0-1OS_LOWEST_PRI0-1以及以及OS_LOWEST_PRI0OS_LOWEST_PRI0这这8 8个任个任务以被将来使用,用户可以有务以被将来使用,用户可以有5656个应用任务;个应用任务;l任务的优先级同样也是它的标识号任务的优先级同样也是它的标识号IDID。OS_CFG.H中定义中定义6319空闲任务和统计任务空闲任务和统计任务l内核总是创建一个内核总是创建一个空闲任务空闲任务OSTaskIdleOSTaskIdle()();w总是设置为最低优先级,总是设置为最低优先级,OS_LOWEST_PRIOROS_LOWEST_P

    17、RIOR;w当所有其他任务都未在执行时,空闲任务开始当所有其他任务都未在执行时,空闲任务开始执行;执行;w应用程序不能删除该任务;应用程序不能删除该任务;w空闲任务的工作就是把空闲任务的工作就是把3232位计数器位计数器OSIdleCtrOSIdleCtr加加1 1,该计数器被统计任务所使用;,该计数器被统计任务所使用;l统计任务统计任务OSTaskStatOSTaskStat()(),提供运行时间统计。每,提供运行时间统计。每秒钟运行一次,计算当前的秒钟运行一次,计算当前的CPUCPU利用率。其优先级利用率。其优先级是是OS_LOWEST_PRIOR-1OS_LOWEST_PRIOR-1,可

    18、选。,可选。20任务控制块任务控制块TCBTCBl任务控制块任务控制块 OS_TCBOS_TCB是描述一个任务的核是描述一个任务的核心数据结构,存放了它的各种管理信息心数据结构,存放了它的各种管理信息,包括任务堆栈指针,任务的状态、优,包括任务堆栈指针,任务的状态、优先级,任务链表指针等;先级,任务链表指针等;l一旦任务建立了,任务控制块一旦任务建立了,任务控制块OS_TCBOS_TCB将将被赋值。被赋值。21任务控制块任务控制块TCBTCBtypedef struct os_tcb 栈指针;栈指针;INT16U OSTCBId;/*任务的任务的ID*/链表指针;链表指针;OS_EVENT*O

    19、STCBEventPtr;/*事件指针事件指针*/void *OSTCBMsg;/*消息指针消息指针*/INT8U OSTCBStat;/*任务的状态任务的状态*/INT8U OSTCBPrio;/*任务的优先级任务的优先级*/其他其他 OS_TCB;22栈指针栈指针lOSTCBStkPtrOSTCBStkPtr:指向当前任务栈顶的指针指向当前任务栈顶的指针,每个任务可以有自己的栈,栈的容量可,每个任务可以有自己的栈,栈的容量可以是任意的;以是任意的;lOSTCBStkBottomOSTCBStkBottom:指向任务栈底的指针;:指向任务栈底的指针;lOSTCBStkSizeOSTCBStk

    20、Size:栈的容量,用可容纳的指:栈的容量,用可容纳的指针数目而不是字节数(针数目而不是字节数(ByteByte)来表示。)来表示。2324链表指针链表指针l所有的任务控制块分属于两条不同的链表所有的任务控制块分属于两条不同的链表,单向的,单向的空闲链表空闲链表(头指针为(头指针为OSTCBFreeListOSTCBFreeList)和双向的)和双向的使用链表使用链表(头(头指针为指针为OSTCBListOSTCBList););lOSTCBNextOSTCBNext、OSTCBPrevOSTCBPrev:用于将任务控制用于将任务控制块插入到空闲链表或使用链表中。每个任块插入到空闲链表或使用链

    21、表中。每个任务的任务控制块在任务创建的时候被链接务的任务控制块在任务创建的时候被链接到使用链表中,在任务删除的时候从链表到使用链表中,在任务删除的时候从链表中被删除。双向连接的链表使得任一成员中被删除。双向连接的链表使得任一成员都能快速插入或删除。都能快速插入或删除。25空闲空闲TCBTCB链表链表l所有的任务控制块都被放置在任务控制块列表数组所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl中,系统初始化时,所有中,系统初始化时,所有TCBTCB被链接成空闲的被链接成空闲的单向链表,头指针为单向链表,头指针为OSTCBFreeListOSTCBFreeList。当创建一个任务后。当

    22、创建一个任务后,就把,就把OSTCBFreeListOSTCBFreeList所指向的所指向的TCBTCB赋给了该任务,并将它赋给了该任务,并将它加入到使用链表中,然后把加入到使用链表中,然后把OSTCBFreeListOSTCBFreeList指向空闲链表指向空闲链表中的下一个结点。中的下一个结点。26系统初始化后系统初始化后指针数组,指向相应指针数组,指向相应TCB27任务的状态休眠任务的状态休眠l休眠状态休眠状态(Dormant):任务存在于内存:任务存在于内存空间中,但内核不可见;空间中,但内核不可见;l可以通过以下函数通知内核,使之变为就可以通过以下函数通知内核,使之变为就绪状态:绪

    23、状态:OSTaskCreate()或或OSTaskCreateExt()l可以通过以下函数返回到休眠状态:可以通过以下函数返回到休眠状态:OSTaskDel()28任务的状态就绪任务的状态就绪l就绪状态就绪状态(Ready):万事具备,只欠:万事具备,只欠CPU;l在所有的就绪任务当中,具有最高优先级在所有的就绪任务当中,具有最高优先级的任务被选中去运行;的任务被选中去运行;l如果任务在运行的时候被抢占了如果任务在运行的时候被抢占了CPU,则,则又回到就绪状态。又回到就绪状态。29任务的状态运行任务的状态运行l运行状态运行状态(Running):任务在:任务在CPU上运上运行;行;l当一个任务

    24、在运行时,如果没有关闭中断,当一个任务在运行时,如果没有关闭中断,则有可能被中断所打断;则有可能被中断所打断;l当一个任务在运行时,可能因为各种原因进当一个任务在运行时,可能因为各种原因进入阻塞状态。入阻塞状态。OSMBoxPend(),OSQPend(),OSSemPend()OSTaskSuspend(),OSTimeDly()30任务的状态任务的状态ISRISRl中断服务状态中断服务状态(ISR):该任务原来在:该任务原来在CPU上运行,后来被中断所打断,由中断服务程上运行,后来被中断所打断,由中断服务程序序ISR接管了接管了CPU;l当中断服务程序运行完毕后,内核要判断是当中断服务程序

    25、运行完毕后,内核要判断是否有新的、更高优先级的任务就绪,如果有否有新的、更高优先级的任务就绪,如果有,则原有的任务被抢占;如果没有,则原有,则原有的任务被抢占;如果没有,则原有的任务重新运行。的任务重新运行。31任务的状态阻塞任务的状态阻塞l阻塞阻塞/等待状态等待状态(Waiting):任务由于正在:任务由于正在等待某个事件(信号量、邮箱或队列)而被等待某个事件(信号量、邮箱或队列)而被挂起;挂起;l当任务等待的事件发生时,回到就绪状态。当任务等待的事件发生时,回到就绪状态。OSMBoxpost(),OSQPost(),OSSemPost(),OSTaskResume(),OSTimeDlyR

    26、esume()或或OSTimeTick()32状态的转换状态的转换删除任务删除任务 33任务就绪表任务就绪表l每个任务的就绪态标志放入在就绪表中,每个任务的就绪态标志放入在就绪表中,就绪表中有两个变量就绪表中有两个变量OSRdyGrpOSRdyGrp和和OSRdyTblOSRdyTbl。l在在OSRdyGrpOSRdyGrp中,任务按优先级分组,中,任务按优先级分组,8 8个任个任务为一组。务为一组。OSRdyGrpOSRdyGrp中的每一位表示中的每一位表示8 8组任组任务中每一组中是否有进入就绪态的任务。务中每一组中是否有进入就绪态的任务。任务进入就绪态时,就绪任务进入就绪态时,就绪表表O

    27、SRdyTblOSRdyTbl中中的相应元素的相应位也置位。的相应元素的相应位也置位。34任务就绪表任务就绪表OSRdyGrpOSRdyGrp 1207 6 5 4 300X XX XX XY YY Y Y Y任务优先级任务优先级 20176543108915 14 13 12 1118161723 22 21 20 1926242531 30 29 28 2734323339 38 37 36 3542404147 46 45 44 4350484955 54 53 52 5158565763 62 61 60 5901234567OSRdyTbl8OSRdyTbl8X XY Y优先级最低任

    28、务优先级最低任务 (空闲任务)(空闲任务)优先级最高任务优先级最高任务 任务优先级号任务优先级号 对于整数对于整数OSRdyTbli(0 i 7),若它的某一位),若它的某一位为为1,则,则OSRdyGrp的第的第i位为位为1。任务的优先级由任务的优先级由X和和Y确定确定35根据优先级确定就绪表根据优先级确定就绪表(1)(1)n假 设 优 先 级 为假 设 优 先 级 为 1 21 2 的 任 务 进 入 就 绪 状 态,的 任 务 进 入 就 绪 状 态,12=1100b,12=1100b,则则OSRdyTbl1OSRdyTbl1的第的第4 4位置位置1 1,且,且OSRdyGrpOSRdy

    29、Grp的第的第1 1位置位置1 1,相应的数学表达式为,相应的数学表达式为:OSRdyGrpOSRdyGrp|=0 x02|=0 x02;OSRdyTbl1|=0 x10;OSRdyTbl1|=0 x10;n而优先级为而优先级为2121的任务就绪的任务就绪21=10 101b21=10 101b,则,则OSRdyTbl2OSRdyTbl2的第的第5 5位置位置1 1,且,且OSRdyGrpOSRdyGrp的第的第2 2位位置置1,1,相应的数学表达式为:相应的数学表达式为:OSRdyGrpOSRdyGrp|=0 x04|=0 x04;OSRdyTbl2|=0 x20;OSRdyTbl2|=0

    30、x20;36根据优先级确定就绪表根据优先级确定就绪表(2)(2)n从上面的计算可知从上面的计算可知:若若OSRdyGrpOSRdyGrp及及OSRdyBblOSRdyBbl的第的第n n位置位置1 1,则应该把,则应该把OSRdyGrpOSRdyGrp及及OSRdyBblOSRdyBbl的值与的值与2 2n n 相或。相或。uCuC/OS/OS中,把中,把2 2n n的的n=0-7n=0-7的的8 8个个值先计算好存在数组值先计算好存在数组OSMapTbl7OSMapTbl7中中,也就是:也就是:OSMapTbl0=2OSMapTbl0=20 0=0 x01=0 x01(0000 000100

    31、00 0001)OSMapTbl1=2OSMapTbl1=21 1=0 x02=0 x02(0000 00100000 0010)OSMapTbl7=2 OSMapTbl7=27 7=0 x80=0 x80(1000 00001000 0000)37使任务进入就绪态使任务进入就绪态n如果如果prioprio是任务的优先级,即任务的标识号,则将是任务的优先级,即任务的标识号,则将任务放入就绪表,即使任务进入就绪态的方法是:任务放入就绪表,即使任务进入就绪态的方法是:OSRdyGrpOSRdyGrp|=OSMapTblprio|=OSMapTblprio3;3;OSRdyTblprioOSRdyT

    32、blprio3|=OSMapTblprio&0 x07;3|=OSMapTblprio&0 x07;n假设优先级为假设优先级为12121100b1100bOSRdyGrpOSRdyGrp|=OSMapTbl123(0 x02)|=OSMapTbl123(0 x02);OSRdyTbl1|=0 x10;OSRdyTbl1|=0 x10;38使任务使任务脱离脱离就绪态就绪态n将任务就绪表将任务就绪表OSRdyTblprioOSRdyTblprio33相应元素的相应相应元素的相应位清零,而且当位清零,而且当OSRdyTblprioOSRdyTblprio33中的所有位都中的所有位都为零时,即该任务所

    33、在组的所有任务中没有一个为零时,即该任务所在组的所有任务中没有一个进入就绪态时,进入就绪态时,OSRdyGrpOSRdyGrp的相应位才为零。的相应位才为零。if(OSRdyTblprio3&=OSMapTblprio&0 x07)=0)OSRdyGrp&=OSMapTblprio3;39任务的调度任务的调度l C/OSC/OS是可抢占实时多任务内核,它总是运行是可抢占实时多任务内核,它总是运行就绪任务中优先级最高的那一个。就绪任务中优先级最高的那一个。l C/OSC/OS中不支持时间片轮转法,每个任务的优中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的,所以任务调度的先级要求不一样

    34、且是唯一的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务工作就是:查找准备就绪的最高优先级的任务并进行上下文切换。并进行上下文切换。l C/OSC/OS任务调度所花的时间为常数,与应用程任务调度所花的时间为常数,与应用程序中建立的任务数无关。序中建立的任务数无关。40l确定哪个任务的优先级最高,应该选择哪个任确定哪个任务的优先级最高,应该选择哪个任务去运行,这部分的工作是由调度器(务去运行,这部分的工作是由调度器(SchedulerScheduler)来完成的。)来完成的。w任务级的调度是由函数任务级的调度是由函数OSSchedOSSched()()完成的;完成的;w中断级的调度是由

    35、另一个函数中断级的调度是由另一个函数OSIntExtOSIntExt()()完完成的。成的。41根据就绪表确定最高优先级根据就绪表确定最高优先级两个关键两个关键:l将优先级数分解为高三位和低三位分别确将优先级数分解为高三位和低三位分别确定;定;l高优先级有着小的优先级号;高优先级有着小的优先级号;42根据就绪表确定最高优先级根据就绪表确定最高优先级l通过通过OSRdyGrpOSRdyGrp值确定值确定高高3 3位,假设位,假设OSRdyGrpOSRdyGrp0 x08=0 x08=0 x000010000 x00001000,第,第3 3位为位为1 1,优先级的高,优先级的高3 3位为位为01

    36、1011;l通过通过OSRdyTbl3OSRdyTbl3的值来确定的值来确定低低3 3位,假设位,假设OSRdyTbl3OSRdyTbl30 x3a0 x3a,第,第1 1位为位为1 1,优先级的低,优先级的低3 3位为位为001001,3 3*8+1=8+1=252500011001任务优先级任务优先级43任务调度器任务调度器void OSSched(void)INT8U y;OS_ENTER_CRITICAL();if(OSLockNesting|OSIntNesting)=0)y =OSUnMapTblOSRdyGrp;OSPrioHighRdy=(INT8U)(y 3)+OSUnMap

    37、TblOSRdyTbly);if(OSPrioHighRdy!=OSPrioCur)OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy;OSCtxSwCtr+;OS_TASK_SW();OS_EXIT_CRITICAL();检查是否中断调用和允许任务调用找到优先级最高的任务该任务是否正在运行44源代码中使用了查表法n查表法具有确定的时间,增加了系统的可查表法具有确定的时间,增加了系统的可预测性,预测性,uCuC/OS/OS中所有的系统调用时间都是中所有的系统调用时间都是确定的确定的Y=OSUnMapTblOSRdyGrp;X=OSUnMapTblOSRdyTblY;P

    38、rio=(Y3)+X;参参见见OS_CORE.C45INT8U const OSUnMapTbl=0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0

    39、,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0;优先级判定表OSUnMapTbl256举例:举例:如如OSRdyGrpOSRd

    40、yGrp的值为的值为01101000B01101000B,即,即0X680X68,则查,则查得得OSUnMapTblOSRdyGrpOSUnMapTblOSRdyGrp 的的值是值是3 3,它相应于,它相应于OSRdyGrpOSRdyGrp中的第中的第3 3位置位置1 1;如如OSRdyTbl3OSRdyTbl3的值是的值是11100100B11100100B,即,即0XE40XE4,则查,则查OSUnMapTblOSRdyTbl3OSUnMapTblOSRdyTbl3的值是的值是2 2,则进入就绪态的,则进入就绪态的最高任务优先级最高任务优先级 PrioPrio=3=3*8+2=268+2=

    41、26 46任务切换l将被挂起任务的寄存器内容入栈;将被挂起任务的寄存器内容入栈;l将较高优先级任务的寄存器内容出栈,恢将较高优先级任务的寄存器内容出栈,恢复到硬件寄存器中。复到硬件寄存器中。47任务级的任务切换OS_TASK_SW()l通过通过scsc系统调用指令完成系统调用指令完成l保护当前任务的现场保护当前任务的现场l恢复新任务的现场恢复新任务的现场l执行中断返回指令执行中断返回指令l开始执行新的任务开始执行新的任务48调用OS_TASK_SW()前的数据结构低优先级任务 OS_TCBOSTCBCur(1)存贮器低地址存贮器高地址堆栈方向堆栈方向SPR1R2R3R4PCPSW存贮器低地址存

    42、贮器高地址高优先级任务 OS_TCBOSTCBHighRdy(3)(2)CPU(4)(5)49保存当前CPU寄存器的值低优先级任务 OS_TCBOSTCBCurPSWPCR1R2R3R4存贮器低地址存贮器高地址堆栈方向堆栈方向SPR1R2R3R4PCPSW存贮器低地址存贮器高地址高优先级任务 OS_TCBOSTCBHighRdy(3)(2)CPU(4)(5)(1)(3)50重新装入要运行的任务低优先级任务 OS_TCBOSTCBCurPSWPCR1R2R3R4存贮器低地址存贮器高地址堆栈方向堆栈方向SPR1R2R3R4PCPSWPSWPCR1R2R3R4存贮器低地址存贮器高地址高优先级任务 O

    43、S_TCBOSTCBHighRdyOSTCBCur(1)(2)CPU(4)(4)(1)(3)(3)(4)51任务切换OS_TASK_SW()的代码Void OSCtxSw(void)将R1,R2,R3及R4推入当前堆栈;OSTCBCurOSTCBStkPtr=SP;OSTCBCur =OSTCBHighRdy;SP =OSTCBHighRdy OSTCBSTKPtr;将R4,R3,R2及R1从新堆栈中弹出;执行中断返回指令;52给调度器上锁lOSSchedlock():给调度器上锁函数,用于禁:给调度器上锁函数,用于禁止任务调度,保持对止任务调度,保持对CPU的控制权(即使有优的控制权(即使有

    44、优先级更高的任务进入了就绪态);先级更高的任务进入了就绪态);lOSSchedUnlock():给调度器开锁函数,当任:给调度器开锁函数,当任务完成后调用此函数,调度重新得到允许;务完成后调用此函数,调度重新得到允许;l当低优先级的任务要发消息给多任务的邮箱、当低优先级的任务要发消息给多任务的邮箱、消息队列、信号量时,它不希望高优先级的任消息队列、信号量时,它不希望高优先级的任务在邮箱、队列和信号量还没有得到消息之前务在邮箱、队列和信号量还没有得到消息之前就取得了就取得了CPU的控制权,此时,可以使用调度的控制权,此时,可以使用调度器上锁函数。器上锁函数。53任务管理的系统服务任务管理的系统服

    45、务v创建任务创建任务v删除任务删除任务v修改任务的优先级修改任务的优先级v挂起和恢复任务挂起和恢复任务v获得一个任务的有关信息获得一个任务的有关信息54创建任务创建任务(创建任务的函数创建任务的函数SOSTaskCreate();SOSTaskCreateExt();(OSTaskCreateExt()OSTaskCreateExt()是是OSTaskCreate()OSTaskCreate()的扩展版的扩展版本,提供了一些附加的功能本,提供了一些附加的功能;(任务可以在多任务调度开始任务可以在多任务调度开始 (即调用即调用OSStartOSStart()()之前创建,也可以在其它任务的执行过

    46、程中被创之前创建,也可以在其它任务的执行过程中被创建。但在建。但在OSStartOSStart()()被调用之前,用户必须创建至被调用之前,用户必须创建至少一个任务;少一个任务;(不能在中断服务程序不能在中断服务程序(ISR)(ISR)中创建新任务。中创建新任务。55OSTaskCreateOSTaskCreate()()INT8U OSTaskCreate(void(*task)(void*pd),/任务代码指针任务代码指针 void*pdata,/任务参数指针任务参数指针OS_STK*ptos,/任务栈的栈顶指针任务栈的栈顶指针 INT8U prio /任务的优先级任务的优先级);返回值返

    47、回值OS_NO_ERR:函数调用成功;:函数调用成功;OS_PRIO_EXIT:任务优先级已经存在;:任务优先级已经存在;OS_PRIO_INVALID:任务优先级无效。:任务优先级无效。56OSTaskCreateOSTaskCreate()()的实现过程的实现过程v任务优先级检查任务优先级检查该优先级是否在该优先级是否在0 0到到OS_LOWSEST_PRIOOS_LOWSEST_PRIO之间?之间?该优先级是否空闲?该优先级是否空闲?v调用调用OSTaskStkInitOSTaskStkInit()(),创建任务的栈帧;,创建任务的栈帧;v调用调用OSTCBInitOSTCBInit()

    48、(),从空闲的,从空闲的OS_TCBOS_TCB池(即池(即OSTCBFreeListOSTCBFreeList链表)中获得一个链表)中获得一个TCBTCB并初始化其并初始化其内容,然后把它加入到内容,然后把它加入到OSTCBListOSTCBList链表的开头,并链表的开头,并把它设定为就绪状态;把它设定为就绪状态;v任务个数任务个数OSTaskCtrOSTaskCtr加加1 1;v调用用户自定义的函数调用用户自定义的函数OSTaskCreateHookOSTaskCreateHook()();v判断是否需要调度(调用者是正在执行的任务)判断是否需要调度(调用者是正在执行的任务)57OSTa

    49、skCreateExtOSTaskCreateExt()()INT8U OSTaskCreateExt(前四个参数与前四个参数与OSTaskCreate相同,相同,INT16U id,/任务的任务的IDOS_STK*pbos,/指向任务栈底的指针指向任务栈底的指针 INT32U stk_size,/栈栈能容纳的成员能容纳的成员数目数目void *pext,/指向用户附加数据域的指针指向用户附加数据域的指针INT16U opt /一些选项信息一些选项信息);返回值:与返回值:与OSTaskCreate()相同。相同。58任务的栈空间任务的栈空间(每个任务都有自己的栈空间(每个任务都有自己的栈空间

    50、(StackStack),栈必须声),栈必须声明为明为OS_STKOS_STK类型,并且由连续的内存空间组成;类型,并且由连续的内存空间组成;(栈空间的分配方法栈空间的分配方法?静态分配:在编译的时候分配,例如:静态分配:在编译的时候分配,例如:static OS_STK MyTaskStackstack_size;OS_STK MyTaskStackstack_size;?动态分配:在任务运行的时候使用动态分配:在任务运行的时候使用mallocmalloc()()函函数来动态申请内存空间;数来动态申请内存空间;59OS_STK *pstk;pstk=(OS_STK*)malloc(stack

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:嵌入式系统教学课件:ucos-ii代码总结分析(同名1369).ppt
    链接地址:https://www.163wenku.com/p-3194698.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


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

    163文库