欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    嵌入式系统教学课件:ucos-ii代码总结分析.ppt

    • 资源ID:73168735       资源大小:1.85MB        全文页数:159页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式系统教学课件:ucos-ii代码总结分析.ppt

    1第四章第四章 实时操作系统实时操作系统 C/OS-C/OS-分析分析2实时操作系统实时操作系统C/OS-II1 13 32 24 4 C/OS-II概述概述任务管理任务管理中断和时间中断和时间管理管理任务之间的通信与任务之间的通信与同步同步5 5存储管理存储管理3通用操作系统和嵌入式(实时)操作系统通用操作系统和嵌入式(实时)操作系统l通用操作系统:通用操作系统:Windows/NT/XPWindows/NT/XP、LinuxLinux、UNIXUNIX等,用于等,用于PCPC机、服务器,机、服务器,l嵌入式(实时)操作系统:用于嵌入式设备的操作系统,嵌入式(实时)操作系统:用于嵌入式设备的操作系统,具有通用操作系统的基本特点,又具有系统实时性、硬具有通用操作系统的基本特点,又具有系统实时性、硬件的相关依赖性、软件固态化以及应用的专用性等特点;件的相关依赖性、软件固态化以及应用的专用性等特点;l嵌入式(实时)操作系统通常包括与硬件相关的底层驱嵌入式(实时)操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器面、标准化浏览器BrowserBrowser等;等;l嵌入式(实时)操作系统的重要指标:实时性(中断响嵌入式(实时)操作系统的重要指标:实时性(中断响应时间、任务切换时间等)、尺寸(可裁剪性应时间、任务切换时间等)、尺寸(可裁剪性 )、可)、可扩展性(内核、中间件);扩展性(内核、中间件);4嵌入式操作系统的发展嵌入式操作系统的发展操作系统内核操作系统内核应用程序应用程序驱动程序和固件驱动程序和固件操作系统内核操作系统内核文件系统文件系统驱动程序和固件驱动程序和固件API GUI应用程序应用程序操作系统内核操作系统内核文件系统文件系统驱动程序和固件驱动程序和固件API GUI应用程序应用程序通信协议通信协议库函数库函数80年代初期年代初期80年代中期年代中期-90年代中年代中期期90年代末期年代末期-21世纪世纪5常见的嵌入式操作系统常见的嵌入式操作系统 实时嵌入式操作系统的种类繁多,大体上可分实时嵌入式操作系统的种类繁多,大体上可分为两种,商用型和免费型。为两种,商用型和免费型。l商用型的实操作系统功能稳定、可靠,有完善商用型的实操作系统功能稳定、可靠,有完善的技术支持和售后服务,但往往价格昂贵的技术支持和售后服务,但往往价格昂贵,如如VxworksVxworks、QNXQNX、WinCEWinCE、Palm OSPalm OS等。等。l免费型的实时操作系统在价格方面具有优势,免费型的实时操作系统在价格方面具有优势,目前主要有目前主要有Linux,C/OSLinux,C/OS是一种源码开放的商是一种源码开放的商业业RTOSRTOS;6RTOSRTOS在嵌入式系统中的位置在嵌入式系统中的位置嵌入式硬件平台BSPKERNELFSTCP/IP设备驱动设备驱动设备设备I/O调试工具调试工具其它组件其它组件应用RTOSC/C+7C/OS简介1、C/OSMicro Controller O S,微控制器操作系统2 2、C/OSC/OS简介l美国人美国人Jean Labrosse 1992Jean Labrosse 1992年完成年完成l应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等机控制、高速公路电话系统、自动提款机等 l19981998年年 C/OSC/OS-II-II,目前的版本,目前的版本 C/OSC/OS-II V2.61-II V2.61,2.722.72l20002000年,得到美国航空管理局(年,得到美国航空管理局(FAAFAA)的认证,可以用于飞行器)的认证,可以用于飞行器中中l网站(网站()8u公开源代码公开源代码u可移植性(可移植性(PortablePortable)绝大部分绝大部分 C/OS-IIC/OS-II的源码是用移植性很强的的源码是用移植性很强的ANSI CANSI C写的。和微处理器写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得低限度,使得 C/OS-IIC/OS-II便于移植到其他微处理器上。便于移植到其他微处理器上。C/OS-IIC/OS-II可以在可以在绝大多数绝大多数8 8位、位、1616位、位、3232位以至位以至6464位微处理器、微控制器位微处理器、微控制器 、数字信号处、数字信号处理器(理器(DSPDSP)上运行。上运行。u可固化(可固化(ROMableROMable)C/OS-IIC/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(段(C C编译、连接、下载和固化),编译、连接、下载和固化),C/OS-IIC/OS-II可以嵌入到读者的产品可以嵌入到读者的产品中成为产品的一部分。中成为产品的一部分。u可裁剪(可裁剪(ScalableScalable)可以只使用可以只使用 C/OS-IIC/OS-II中应用程序需要的那些系统服务。也就是说某产中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个品可以只使用很少几个 C/OS-IIC/OS-II调用,而另一个产品则使用了几乎所调用,而另一个产品则使用了几乎所有有 C/OS-IIC/OS-II的功能,这样可以减少产品中的的功能,这样可以减少产品中的 C/OS-IIC/OS-II所需的存储器空所需的存储器空间(间(RAMRAM和和ROMROM)。)。这种可剪裁性是靠条件编译实现的。这种可剪裁性是靠条件编译实现的。C/OS的性能特点(一)9u占先式(占先式(PreemptivePreemptive)u多任务多任务 C/OS-IIC/OS-II可以管理可以管理6464个任务,然而,目前这一版本保留个任务,然而,目前这一版本保留8 8个给系统。应用程序最多个给系统。应用程序最多可以有可以有256256个任务个任务u可确定性可确定性 全部全部 C/OS-IIC/OS-II的函数调用与服务的执行时间具有可确定性。的函数调用与服务的执行时间具有可确定性。u任务栈任务栈 每个任务有自己单独的栈,每个任务有自己单独的栈,C/OS-IIC/OS-II允许每个任务有不同的栈空间,以便压低应允许每个任务有不同的栈空间,以便压低应用程序对用程序对RAMRAM的需求。的需求。u系统服务系统服务 C/OS-IIC/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。的申请与释放、时间相关函数等。u中断管理中断管理 中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255255层。层。u稳定性与可靠性稳定性与可靠性C/OS的性能特点(二)10C/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-511C/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提供的系统服务l信号量信号量l带互斥机制的信号量带互斥机制的信号量n减少优先级倒置的问题减少优先级倒置的问题l事件标志事件标志l消息信箱消息信箱l消息队列消息队列l内存管理内存管理l时钟管理时钟管理l任务管理任务管理操作系统的概述操作系统的概述13C/OS-II的文件结构141 13 32 24 4 C/OS-II概述概述任务管理任务管理中断和时间中断和时间管理管理任务之间的通信与任务之间的通信与同步同步5 5存储管理存储管理15任务的实现任务的实现创建任务的系统服务创建任务的系统服务lOSTaskCreate()INT8UOSTaskCreate(void(*task)(void*pd),/任务代码指针任务代码指针void*pdata,/任务参数指针任务参数指针OS_STK*ptos,/任务栈的栈顶指针任务栈的栈顶指针INT8Uprio/任务的优先级任务的优先级);lOSTaskCreateExt()提问:提问:C/OS-II中的任务是进程还是线程?中的任务是进程还是线程?16任务主函数任务主函数一个任务通常是一个无限循环(返回值类型一个任务通常是一个无限循环(返回值类型voidvoid)voidMyTask(void*pdata)while(1)dosomething;waiting;dosomething;Why?17任务也可以自我删除(并非真的删除,只是内核不任务也可以自我删除(并非真的删除,只是内核不再知道该任务)再知道该任务)voidMyTask(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_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内核总是创建一个内核总是创建一个空闲任务空闲任务OSTaskIdle()OSTaskIdle();w总是设置为最低优先级,总是设置为最低优先级,OS_LOWEST_PRIOROS_LOWEST_PRIOR;w当所有其他任务都未在执行时,空闲任务开始当所有其他任务都未在执行时,空闲任务开始执行;执行;w应用程序不能删除该任务;应用程序不能删除该任务;w空闲任务的工作就是把空闲任务的工作就是把3232位计数器位计数器OSIdleCtrOSIdleCtr加加1 1,该计数器被统计任务所使用;,该计数器被统计任务所使用;l统计任务统计任务OSTaskStat()OSTaskStat(),提供运行时间统计。每,提供运行时间统计。每秒钟运行一次,计算当前的秒钟运行一次,计算当前的CPUCPU利用率。其优先级利用率。其优先级是是OS_LOWEST_PRIOR-1OS_LOWEST_PRIOR-1,可选。,可选。20任务控制块任务控制块TCBTCBl任务控制块任务控制块 OS_TCB OS_TCB是描述一个任务的核是描述一个任务的核心数据结构,存放了它的各种管理信息,心数据结构,存放了它的各种管理信息,包括任务堆栈指针,任务的状态、优先包括任务堆栈指针,任务的状态、优先级,任务链表指针等;级,任务链表指针等;l一旦任务建立了,任务控制块一旦任务建立了,任务控制块OS_TCBOS_TCB将将被赋值。被赋值。21任务控制块任务控制块TCBTCBtypedefstructos_tcb栈栈指指针针;INT16UOSTCBId;/*任任务务的的ID*/链链表指表指针针;OS_EVENT*OSTCBEventPtr;/*事件指事件指针针*/void*OSTCBMsg;/*消息指消息指针针*/INT8UOSTCBStat;/*任任务务的状的状态态*/INT8UOSTCBPrio;/*任任务务的的优优先先级级*/其他其他OS_TCB;22栈指针栈指针lOSTCBStkPtrOSTCBStkPtr:指向当前任务栈顶的指针,指向当前任务栈顶的指针,每个任务可以有自己的栈,栈的容量可以每个任务可以有自己的栈,栈的容量可以是任意的;是任意的;lOSTCBStkBottomOSTCBStkBottom:指向任务栈底的指针;:指向任务栈底的指针;lOSTCBStkSizeOSTCBStkSize:栈的容量,用可容纳的指:栈的容量,用可容纳的指针数目而不是字节数(针数目而不是字节数(ByteByte)来表示。)来表示。2324链表指针链表指针l所有的任务控制块分属于两条不同的链表,所有的任务控制块分属于两条不同的链表,单向的单向的空闲链表空闲链表(头指针为(头指针为OSTCBFreeListOSTCBFreeList)和双向的)和双向的使用链表使用链表(头(头指针为指针为OSTCBListOSTCBList););lOSTCBNextOSTCBNext、OSTCBPrevOSTCBPrev:用于将任务控制用于将任务控制块插入到空闲链表或使用链表中。每个任块插入到空闲链表或使用链表中。每个任务的任务控制块在任务创建的时候被链接务的任务控制块在任务创建的时候被链接到使用链表中,在任务删除的时候从链表到使用链表中,在任务删除的时候从链表中被删除。双向连接的链表使得任一成员中被删除。双向连接的链表使得任一成员都能快速插入或删除。都能快速插入或删除。25空闲空闲TCBTCB链表链表l所有的任务控制块都被放置在任务控制块列表数组所有的任务控制块都被放置在任务控制块列表数组OSTCBTbl中,系统初始化时,所有中,系统初始化时,所有TCBTCB被链接成空闲的单向链表,被链接成空闲的单向链表,头指针为头指针为OSTCBFreeListOSTCBFreeList。当创建一个任务后,就把。当创建一个任务后,就把OSTCBFreeListOSTCBFreeList所指向的所指向的TCBTCB赋给了该任务,并将它加入到赋给了该任务,并将它加入到使用链表中,然后把使用链表中,然后把OSTCBFreeListOSTCBFreeList指向空闲链表中的下一指向空闲链表中的下一个结点。个结点。26系统初始化后系统初始化后指针数组,指向相应指针数组,指向相应TCB27任务的状态休眠任务的状态休眠l休眠状态休眠状态(Dormant):任务存在于内存):任务存在于内存空间中,但内核不可见;空间中,但内核不可见;l可以通过以下函数通知内核,使之变为就可以通过以下函数通知内核,使之变为就绪状态:绪状态:OSTaskCreate()或或OSTaskCreateExt()l可以通过以下函数返回到休眠状态:可以通过以下函数返回到休眠状态:OSTaskDel()28任务的状态就绪任务的状态就绪l就绪状态就绪状态(Ready):万事具备,只欠):万事具备,只欠CPU;l在所有的就绪任务当中,具有最高优先级在所有的就绪任务当中,具有最高优先级的任务被选中去运行;的任务被选中去运行;l如果任务在运行的时候被抢占了如果任务在运行的时候被抢占了CPU,则,则又回到就绪状态。又回到就绪状态。29任务的状态运行任务的状态运行l运行状态运行状态(Running):任务在):任务在CPU上运上运行;行;l当一个任务在运行时,如果没有关闭中断,当一个任务在运行时,如果没有关闭中断,则有可能被中断所打断;则有可能被中断所打断;l当一个任务在运行时,可能因为各种原因进当一个任务在运行时,可能因为各种原因进入阻塞状态。入阻塞状态。OSMBoxPend(),OSQPend(),OSSemPend()OSTaskSuspend(),OSTimeDly()30任务的状态任务的状态ISRISRl中断服务状态中断服务状态(ISR):该任务原来在):该任务原来在CPU上运行,后来被中断所打断,由中断服务程上运行,后来被中断所打断,由中断服务程序序ISR接管了接管了CPU;l当中断服务程序运行完毕后,内核要判断是当中断服务程序运行完毕后,内核要判断是否有新的、更高优先级的任务就绪,如果有,否有新的、更高优先级的任务就绪,如果有,则原有的任务被抢占;如果没有,则原有的则原有的任务被抢占;如果没有,则原有的任务重新运行。任务重新运行。31任务的状态阻塞任务的状态阻塞l阻塞阻塞/等待状态等待状态(Waiting):任务由于正在):任务由于正在等待某个事件(信号量、邮箱或队列)而被等待某个事件(信号量、邮箱或队列)而被挂起;挂起;l当任务等待的事件发生时,回到就绪状态。当任务等待的事件发生时,回到就绪状态。OSMBoxpost(),OSQPost(),OSSemPost(),OSTaskResume(),OSTimeDlyResume()或或OSTimeTick()32状态的转换状态的转换删除任务删除任务 33任务就绪表任务就绪表l每个任务的就绪态标志放入在就绪表中,每个任务的就绪态标志放入在就绪表中,就绪表中有两个变量就绪表中有两个变量OSRdyGrpOSRdyGrp和和OSRdyTblOSRdyTbl。l在在OSRdyGrpOSRdyGrp中,任务按优先级分组,中,任务按优先级分组,8 8个任个任务为一组。务为一组。OSRdyGrpOSRdyGrp中的每一位表示中的每一位表示8 8组任组任务中每一组中是否有进入就绪态的任务。务中每一组中是否有进入就绪态的任务。任务进入就绪态时,就绪表任务进入就绪态时,就绪表OSRdyTblOSRdyTbl中中的相应元素的相应位也置位。的相应元素的相应位也置位。34任务就绪表任务就绪表OSRdyGrp OSRdyGrp 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优先级最低任务优先级最低任务 (空闲任务)(空闲任务)优先级最高任务优先级最高任务 任务优先级号任务优先级号 对于整数对于整数OSRdyTbli(0 i 7),若它的某一位),若它的某一位为为1,则,则OSRdyGrp的第的第i位为位为1。任务的优先级由任务的优先级由X和和Y确定确定35根据优先级确定就绪表根据优先级确定就绪表(1)(1)n假假 设设 优优 先先 级级 为为 1212的的 任任 务务 进进 入入 就就 绪绪 状状 态态,12=1100b,12=1100b,则则 OSRdyTbl1OSRdyTbl1的的 第第 4 4位位 置置 1 1,且且OSRdyGrpOSRdyGrp的第的第1 1位置位置1 1,相应的数学表达式为,相应的数学表达式为:OSRdyGrpOSRdyGrp|=0 x02|=0 x02;OSRdyTbl1|=0 x10;OSRdyTbl1|=0 x10;n而而优优先先级级为为2121的的任任务务就就绪绪21=10 21=10 101b101b,则则OSRdyTbl2OSRdyTbl2的的第第5 5位位置置1 1,且且OSRdyGrpOSRdyGrp的的第第2 2位位置置1,1,相应的数学表达式为:相应的数学表达式为:OSRdyGrpOSRdyGrp|=0 x04|=0 x04;OSRdyTbl2|=0 x20;OSRdyTbl2|=0 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 00010000 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|=|=OSMapTblprioOSMapTblprio3;3;OSRdyTblprioOSRdyTblprio3|=OSMapTblprio&0 x07;3|=OSMapTblprio&0 x07;n假设优先级为假设优先级为121100b121100bOSRdyGrpOSRdyGrp|=OSMapTbl123(0 x02)|=OSMapTbl123(0 x02);OSRdyTbl1|=0 x10;OSRdyTbl1|=0 x10;38使任务脱离就绪态使任务脱离就绪态n将将任任务务就就绪绪表表OSRdyTblprioOSRdyTblprio33相相应应元元素素的的相相应应位位清清零零,而而且且当当OSRdyTblprioOSRdyTblprio33中中的的所所有有位位都都为为零零时时,即即该该任任务务所所在在组组的的所所有有任任务务中中没没有有一一个个进入就绪态时,进入就绪态时,OSRdyGrpOSRdyGrp的相应位才为零。的相应位才为零。if(OSRdyTblprio3&=OSMapTblprio&0 x07)=0)OSRdyGrp&=OSMapTblprio3;39任务的调度任务的调度l C/OSC/OS是可抢占实时多任务内核,它总是运行是可抢占实时多任务内核,它总是运行就绪任务中优先级最高的那一个。就绪任务中优先级最高的那一个。l C/OSC/OS中不支持时间片轮转法,每个任务的优中不支持时间片轮转法,每个任务的优先级要求不一样且是唯一的,所以任务调度的先级要求不一样且是唯一的,所以任务调度的工作就是:查找准备就绪的最高优先级的任务工作就是:查找准备就绪的最高优先级的任务并进行上下文切换。并进行上下文切换。l C/OSC/OS任务调度所花的时间为常数,与应用程任务调度所花的时间为常数,与应用程序中建立的任务数无关。序中建立的任务数无关。40l确定哪个任务的优先级最高,应该选择哪个任确定哪个任务的优先级最高,应该选择哪个任务去运行,这部分的工作是由调度器务去运行,这部分的工作是由调度器(SchedulerScheduler)来完成的。)来完成的。w任务级的调度是由函数任务级的调度是由函数OSSchedOSSched()()完成的;完成的;w中断级的调度是由另一个函数中断级的调度是由另一个函数OSIntExtOSIntExt()()完完成的。成的。41根据就绪表确定最高优先级根据就绪表确定最高优先级两个关键两个关键:l将优先级数分解为高三位和低三位分别确将优先级数分解为高三位和低三位分别确定;定;l高优先级有着小的优先级号;高优先级有着小的优先级号;42根据就绪表确定最高优先级根据就绪表确定最高优先级l通过通过OSRdyGrpOSRdyGrp值确定高值确定高3 3位,假设位,假设OSRdyGrpOSRdyGrp0 x08=0 x08=0 x000010000 x00001000,第,第3 3位为位为1 1,优先级的高,优先级的高3 3位为位为011011;l通过通过OSRdyTbl3OSRdyTbl3的值来确定低的值来确定低3 3位,假设位,假设OSRdyTbl3OSRdyTbl30 x3a0 x3a,第,第1 1位为位为1 1,优先级的低,优先级的低3 3位为位为001001,3*8+1=3*8+1=252500011001任务优先级任务优先级43任务调度器任务调度器voidOSSched(void)INT8Uy;OS_ENTER_CRITICAL();if(OSLockNesting|OSIntNesting)=0)y=OSUnMapTblOSRdyGrp;OSPrioHighRdy=(INT8U)(y3)+OSUnMapTblOSRdyTbly);if(OSPrioHighRdy!=OSPrioCur)OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy;OSCtxSwCtr+;OS_TASK_SW();OS_EXIT_CRITICAL();检查是否中断调用和允许任务调用找到优先级最高的任务该任务是否正在运行44源代码中使用了查表法n查查表表法法具具有有确确定定的的时时间间,增增加加了了系系统统的的可可预预测测性性,uCuC/OS/OS中中所所有有的的系系统统调调用用时时间间都都是是确定的确定的Y=OSUnMapTblOSRdyGrp;X=OSUnMapTblOSRdyTblY;Prio=(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,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举例:举例:如如OSRdyGrpOSRdyGrp的值为的值为01101000B01101000B,即,即0X680X68,则查,则查得得OSUnMapTblOSRdyGrpOSUnMapTblOSRdyGrp的的值是值是3 3,它相应于,它相应于OSRdyGrpOSRdyGrp中的第中的第3 3位置位置1 1;如如OSRdyTbl3OSRdyTbl3的值是的值是11100100B11100100B,即,即0XE40XE4,则查,则查OSUnMapTblOSRdyTbl3OSUnMapTblOSRdyTbl3的值是的值是2 2,则进入就绪态的,则进入就绪态的最高任务优先级最高任务优先级 Prio=3*8+2=26 Prio=3*8+2=26 46任务切换l将被挂起任务的寄存器内容入栈;将被挂起任务的寄存器内容入栈;l将较高优先级任务的寄存器内容出栈,将较高优先级任务的寄存器内容出栈,恢复到硬件寄存器中。恢复到硬件寄存器中。47任务级的任务切换OS_TASK_SW()l通过通过scsc系统调用指令完成系统调用指令完成l保护当前任务的现场保护当前任务的现场l恢复新任务的现场恢复新任务的现场l执行中断返回指令执行中断返回指令l开始执行新的任务开始执行新的任务48调用OS_TASK_SW()前的数据结构低优先级任务 OS_TCBOSTCBCur(1)存贮器低地址存贮器高地址堆栈方向堆栈方向SPR1R2R3R4PCPSW存贮器低地址存贮器高地址高优先级任务 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存贮器低地址存贮器高地址高优先级任务 OS_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的控制权(即使有优的控制权(即使有优先级更高的任务进入了就绪态);先级更高的任务进入了就绪态);lOSSchedUnlock():给调度器开锁函数,当任:给调度器开锁函数,当任务完成后调用此函数,调度重新得到允许;务完成后调用此函数,调度重新得到允许;l当低优先级的任务要发消息给多任务的邮箱、当低优先级的任务要发消息给多任务的邮箱、消息队列、信号量时,它不希望高优先级的任消息队列、信号量时,它不希望高优先级的任务在邮箱、队列和信号量还没有得到消息之前务在邮箱、队列和信号量还没有得到消息之前就取得了就取得了CPU的控制权,此时,可以使用调度的控制权,此时,可以使用调度器上锁函数。器上锁函数。53任务管理的系统服务任务管理的系统服务v创建任务创建任务v删除任务删除任务v修改任务的优先级修改任务的优先级v挂起和恢复任务挂起和恢复任务v获得一个任务的有关信息获得一个任务的有关信息54创建任务创建任务(创建任务的函数创建任务的函数SOSTaskCreate();SOSTaskCreateExt();(OSTaskCreateExt()OSTaskCreateExt()是是OSTaskCreate()OSTaskCreate()的扩展版本,的扩展版本,提供了一些附加的功能提供了一些附加的功能;(任务可以在多任务调度开始任务可以在多任务调度开始 (即调用即调用OSStartOSStart()()之前创建,也可以在其它任务的执行过程中被创之前创建,也可以在其它任务的执行过程中被创建。但在建。但在OSStartOSStart()()被调用之前,用户必须创建至被调用之前,用户必须创建至少一个任务;少一个任务;(不能在中断服务程序不能在中断服务程序(ISR)(ISR)中创建新任务。中创建新任务。55OSTaskCreate()OSTaskCreate()INT8UOSTaskCreate(void(*task)(void*pd),/任务代码指针任务代码指针void*pdata,/任务参数指针任务参数指针OS_STK*ptos,/任务栈的栈顶指针任务栈的栈顶指针INT8Uprio/任务的优先级任务的优先级);返回值返回值OS_NO_ERR:函数调用成功;:函数调用成功;OS_PRIO_EXIT:任务优先级已经存在;:任务优先级已经存在;OS_PRIO_INVALID:任务优先级无效。:任务优先级无效。56OSTaskCreate()OSTaskCreate()的实现过程的实现过程v任务优先级检查任务优先级检查该优先级是否在该优先级是否在0 0到到OS_LOWSEST_PRIOOS_LOWSEST_PRIO之间?之间?该优先级是否空闲?该优先级是否空闲?v调用调用OSTaskStkInitOSTaskStkInit()(),创建任务的栈帧;,创建任务的栈帧;v调用调用OSTCBInitOSTCBInit()(),从空闲的,从空闲的OS_TCBOS_TCB池(即池(即OSTCBFreeListOSTCBFreeList链表)中获得一个链表)中获得一个TCBTCB并初始化其并初始化其内容,然后把它加入到内容,然后把它加入到OSTCBListOSTCBList链表的开头,并链表的开头,并把它设定为就绪状态;把它设定为就绪状态;v任务个数任务个数OSTaskCtrOSTaskCtr加加1 1;v调用用户自定义的函数调用用户自定义的函数OSTaskCreateHookOSTaskCreateHook()();v判断是否需要调度(调用者是正在执行的任务)判断是否需要调度(调用者是正在执行的任务)57OSTaskCreateExt()OSTaskCreateExt()INT8UOSTaskCreateExt(前四个参数与前四个参数与OSTaskCreate相同,相同,INT16Uid,/任务的任务的IDOS_STK*pbos,/指向任务栈底的指针指向任务栈底的指针INT32Ustk_size,/栈栈能容纳的成员能容纳的成员数目数目void*pext,/指向用户附加数据域的指针指向用户附加数据域的指针INT16Uopt/一些选项信息一些选项信息);返回值:与返回值:与OSTaskCreate()相同。相同。58任务的栈空间任务的栈空间(每个任务都有自己的栈空间(每个任务都有自己的栈空间(StackStack),栈必须声),栈必须声明为明为OS_STKOS_STK类型,并且由连续的内存空间组成;类型,并且由连续的内存空间组成;(栈空间的分配方法栈空间的分配方法?静态分配:在编译的时候分配,例如:静态分配:在编译的时候分配,例如:staticOS_STKMyTaskStackstack_size;OS_STKMyTaskStackstack_size;?动态分配:在任务运行的时候使用动态分配:在任务运行的时候使用mallocmalloc()()函函数来动态申请内存空间;数来动态申请内存空间;59OS_STK*pstk;pstk=(OS_STK*)malloc(stack_size);/*确认确认malloc()能得到足够的内存空间能得到足够的内存空间*/if(pstk!=(OS_STK*)0)Create

    注意事项

    本文(嵌入式系统教学课件:ucos-ii代码总结分析.ppt)为本站会员(wuy****n92)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开