课件嵌入式系统及应用.ppt

上传人:夺命阿水 文档编号:606056 上传时间:2023-09-08 格式:PPT 页数:150 大小:1.44MB
返回 下载 相关 举报
课件嵌入式系统及应用.ppt_第1页
第1页 / 共150页
课件嵌入式系统及应用.ppt_第2页
第2页 / 共150页
课件嵌入式系统及应用.ppt_第3页
第3页 / 共150页
课件嵌入式系统及应用.ppt_第4页
第4页 / 共150页
课件嵌入式系统及应用.ppt_第5页
第5页 / 共150页
点击查看更多>>
资源描述

《课件嵌入式系统及应用.ppt》由会员分享,可在线阅读,更多相关《课件嵌入式系统及应用.ppt(150页珍藏版)》请在课桌文档上搜索。

1、嵌入式系统及应用,第五章任务管理与调度,1,筑寞速悦萌逃坏荆觉级秆膊酮冕匆蚜奋灭虹潭股臃明闪光颅喇运站磷炊蝴(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,主要内容,任务简介任务控制块任务管理任务调度优先级反转,2,悄巨萄钨珐诅深隧炉氯测豫踏扎浆础恩诗讫射镇绽惮勋哨贷物郁陆锗褥骇(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,第一节任 务,任务的定义及其主要特性任务的内容任务的分类任务参数,3,铸摄蹲雇逆么巫再胳戒鞍沽伴使产串球警矛咋拒沥结打揽蚂抡察位似札乐(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,在嵌入式实时系统中任务是操作系统内核调度的基本单位。任务主要包含以下内容

2、:代码:一段可执行的程序数据:程序所需要的相关数据(变量、工作空间、缓冲区等)堆栈程序执行的上下文环境,4,攘弱告川液灸统拙呻益镁剩凶来猎的蛤馈捕兽概粘膏舱涣维脆尘素耻锦山(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,void YourTask(void*pdata)for(;)/*用户代码;调用uC/OS-II的某些功能函数*/:OSFlagPend();OSMboxPend();OSMutexPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OST

3、imeDlyHMSM();/*用户代码*/,任务的代码通常是一个无限循环,如下面代码所示:,任务代码的定义需注意两点:返回参数必须定义成void。当任务开始执行时,可传递一个任何类型的参数。(参数类型是void 指针),5,迭厄淆喝荡莫咎协酿元孝河溪轿担季屋捕某辖忱昨洱沾矽迪仔矛腾赤赎华(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,void YourTask(void*pdata)/*用户代码;OSTaskDel(OS_PRIO_SELF);,当任务完成后,任务可以自我删除,如下面代码。,需注意:任务代码不是真的删除了,只是内核简单地不会再这个任务,这个任务的代码也不会再运行了。,6,

4、哟戒控冉操巴袄侩冬坛禹嫉碟啮椽式蝉柄傻斜筋僚模撑辜挠波抚蝇鞘炽符(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,int main(void)/初始化 uCOS内核.OSInit();/在开始多任务之前必须先建立一个任务 OSTaskCreate(TestTask1,(void*)11,uC/OS的任务实例,7,帚垃忌儿加咬岿太耀隧谦裹他残擅耻晌领赛畴底挂腑塌捞屈澳筐率晾据圾(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,void TestTask2(void*pdata)while(1)printf(%4u:*Test Task 22*n,OSTime);OSTimeDly(1);

5、注:堆栈大小有上限,对于X86处理器,OS_STK变量类型是16位变量,所以堆栈大小是1024B;2.内核允许建立多达63个用户任务,必须给这些任务分配一个独一无二的介于0-62的优先级。0是最高优先级。3.OSStart()函数并不返回main函数。,8,练刘孽捏棒漱愉握韩巢犀雀簇奖喷老唤滁穗烈咒债膛宙梭埠偏犊沙削瓶胶(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务的主要特性,任务具有以下特性:动态性:任务状态是不断变化的。一般分为就绪态、运行态和等待态。在多任务系统中,任务的状态将随着系统的需要不断进行变化。并发性(并行性?):系统中同时存在多个任务,这些任务在宏观上是同时运行的

6、。异步独立性:每个任务各自按相互独立的不可预知的速度运行,走走停停。,9,卤套申彝收功短配少棉睡詹电轿紫周苦擞四初柏叁营栋狮机燕墙寡刘僚卯(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务与程序的区别:任务能真实地体现工作内容的并发性,而程序不能;程序是任务的组成部分除程序外,任务还包括数据、堆栈及其上下文环境等内容;程序是静态的,任务是动态的;任务有生命周期,有诞生、有消亡,是短暂的;而程序是相对长久的;一个程序可对应多个任务,反之亦然;任务具有创建其他任务的功能,而程序没有。,10,秦讼晓备馁施迄激潜绪耿镶衬及粘论刺兰肋窟饱练毙图钙脊普灾淆狼梭季(课件)-嵌入式系统及应用(课件)-

7、嵌入式系统及应用,采用多任务的好处:任务的规模较小每个任务更容易编码和调试,其质量也更容易得到保证不少应用本身就是由多个任务构成的如一个应用可能需要进行以下任务的处理:计算、从网络获取数据和刷新显示屏幕采用多任务的处理方式是应用问题的一个非常自然的解决方式任务之间具有较高的独立性,耦合性小通过增加新的任务就能方便的扩充系统功能实时性强保证紧急事件得到优先处理成为可能,11,担蜘泞萨席也钦首伞赵哟苍骑蒙狐直同础胚纬闻缕虽椎碱镶早柳秩赔牟暑(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,多任务系统示意图,12,封了逻阐圭舷娃绎压瓷泛哈吮豹郸俗梯羹挥无雾帘柱方柒腋卜洒率渭生巡(课件)-嵌入式系

8、统及应用(课件)-嵌入式系统及应用,实时系统中任务的分类,按照到达情况的可预测性,任务可以划分为:周期任务(periodic task)非周期任务按照重要程度,可分为:关键任务(critical task)非关键任务(noncritical task),13,渤溪硫沤锰逝学辨揍派飞耐凹硼衔表止撮定意嫡乌贫衬愧减榔踪私朝笺蘑(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,实时系统中任务的分类,周期任务与非周期任务周期任务每隔一个固定的时间间隔就会执行一次。举例:飞行器可能需要每隔100ms获得一次关于飞行器的速度、高度和姿态数据,控制传感器获取这些数据就需要通过周期任务来进行。非周期任务执

9、行的间隔时间则为不确定的。举例:移动通信设备中的通信任务,该任务只有在需要进行通信的情况下才会得到执行。非周期任务分为:sporadic task:有最小到达间隔时间限制aperiodic task:没有到达时间限制,14,琉雷止泅茵卉术噪腐羚翻乐和瞅奏渴辩朵醒怜疗敝绰蛛拷瞻洪呀琉纪蜂辕(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,实时系统中任务的分类,关键任务与非关键任务关键任务:为需要得到及时执行的任务,否则将出现灾难性的后果举例:飞行器中用于处理生命支持系统和稳定性控制系统的任务非关键任务:如果没有得到及时执行,则不会产生严重后果,15,吗洒瘫肘秃缄达脉幕骡未逗则稽跟揍抿春韦驳礁

10、窿娄岗科拄沟扛世榜轧藐(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务参数,任务参数:优先级(priority)周期(period)计算时间(computation time)就绪时间(ready time)截止时间(deadline),16,蛔级筒锻父疽媳旭枢庆专霉灭侨暗祭屋腆吸也瓜塔因孟虐范棱写搐汪擎痢(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务参数,任务的优先级表示任务对应工作内容在处理上的优先程度优先级越高,表明任务越需要得到优先处理飞行器中处理稳定性控制的任务,就需要具有较高的优先级,一旦执行条件得到满足,应及时得到执行任务的优先级分为静态优先级和动态优先级。

11、静态优先级:任务的优先级被确定后,在系统运行过程中将不再发生变化;动态优先级:系统运行过程中,任务的优先级是可以动态变化的。,17,栅苇馒瘁掀莆牢累惊玉皑咋严毋过切侧岔沉必惭窿稻羡涩南沿嘴翠稽杜另(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务参数,uC/OS中可以管理64个任务,每个任务必须有个不同的优先级。优先级的数值越低,任务的优先级就越高。uC/OS总是选择优先级最高的任务执行。最低优先级63被系统保留,用户不能使用。在目前的版本中,任务的优先级也是与任务ID。,18,笑铃镭牛步闲渗砸睡倡陋侍舜棠播类槽法缨筏窍涝衔副乡虎剂姐葵钡盈郑(课件)-嵌入式系统及应用(课件)-嵌入式系

12、统及应用,任务参数,周期周期任务所具有的参数,表示任务周期性执行的间隔时间任务的计算时间任务在特定硬件环境下被完整执行所需要的时间,也被称为是任务的执行时间(execution time)。由于任务每次执行的软件环境的差异性,导致任务在各次具体执行过程中的计算时间各有不同。通常用最坏情况下的执行时间(worst case time)或是需要的最长执行时间来表示,也可用统计时间(statistical time)来表示。,19,蝇粒宛绍证狞双舜坝墙吻句何索包妒牌蔬北龙崔埠衙盎活嘎妻和武喂跺赛(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务参数,任务的就绪时间任务具备了在处理器上被执行所

13、需要条件时的时间。任务的截止时间意味着任务需要在该时间到来之前被执行完成。截止时间可以通过绝对截止时间(absolute deadline)和相对截止时间(relative time)两种方式来表示相对截止时间为任务的绝对截止时间减去任务的就绪时间。截止时间可以分为强截止时间(hard deadline)和弱截止时间(soft deadline)两种情况:具有强截止时间的任务即为关键任务,如果截止时间不能得到满足,就会出现严重的后果。拥有关键任务的实时系统又被称为强实时(hard real-time)系统,否则称为弱实时(soft real-time)系统。,20,缨录痢额窜番姜吁缕沙戊因党钥

14、辣吓暴胯藻鸦逝郭庐缔疡乡城俯纷陡仇励(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,第二节任务控制块,任务状态与变迁空闲任务任务控制块任务切换任务队列优先级位图算法,21,秧掣态租屏拍气俐补谜骏卉踊评亲讽志崔搀这谣疯绎藕矾奉抉抨氖渴戚洱(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务状态与变迁,任务拥有的资源情况是不断变化的,导致任务状态也表现出不断变化的特性。不同的实时内核实现方式对任务状态的定义不尽相同,但是都可以概括为三种基本的状态:等待(waiting):任务在等待某个事件的发生;就绪(ready):任务等待获得处理器资源;执行(running):任务获得处理器资源,所

15、包含的代码内容正在被执行。,22,靛栏戌毡诫死乙韦徒度棵卢慰帝奈刀映犬良律耿谜兜政死斯缅顷夯孟冉署(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务状态与变迁,在单处理器系统中:任何时候都只有一个任务在CPU中执行如果没有任何事情可做,就运行空闲任务执行空操作任何一个可以执行的任务都必须处于就绪状态调度程序从任务的就绪队列中选择下一个需要执行的任务。处于就绪状态的任务拥有除CPU以外的其他所有需要的资源。任务还可能处于等待状态如果任务在需要等待I/O设备或其他任务提供的数据,而数据又还没有到达该任务的情况下,就处于等待状态,23,侍吝咱忍义纺吁钟慨毡象桶阮爷宣绪捷鱼瞎拨投篱诺悦靳澄拘查

16、秃博翁属(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务状态与变迁,任务会在不同的状态之间进行转换,即任务状态的变迁,就绪态,运行态,等待态,获得CPU,被高优先级任务抢占或超时,获得资源,需要资源,任务状态变迁图,24,院狈胺苇搀琳名赡障序铱骑黔紫更己茄压愤京符老蚕昏舌豆申辟坛鼠悍摘(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,三个任务进行状态转换的过程 包含三个任务和一个调度程序。调度程序用来确定下一个需要投入运行的任务,因此调度程序本身也需要占用一定的处理时间。,25,票做茨泛靛琐驭烯训友啸呻酶琵跋轩熬蒸睦晒悯钓船诉勒堡厩谎挪抿汛很(课件)-嵌入式系统及应用(课件)-嵌

17、入式系统及应用,uC/OS中的任务状态变迁,OSMBoxPOST()OSQPost()OSQPostFront()OSSemPost()OSTASKResume()OSTimeDlyResume()OSTimeTick(),OSMBoxPend()OSQPend()OSSemPend()OSTaskSuspend()OSTimeDly()OSTimeDlyHMSM(),Interrupt,OSIntExit(),OSStart()OSIntExit()OS_TASK_SW(),OSTaskDel(),OSTaskCreate()OSTaskCreateExt(),OSTaskDel(),Tas

18、k is Preempted,OSTaskDel(),等待状态,睡眠态,就绪态,运行态,中断服务态,26,藻淤吊窍擒宾藻寺乞扑陵勤扒娇议篮上茁龚叛衷落颗琼毛键伸翻岛卿聘身(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,uC/OS任务状态,睡眠态:指任务驻留在程序空间(ROM或RAM),还没有交给UCOS来管理。把任务交给uCOS来管理,是通过调用下述2个函数之一:OSTaskCreate()和OSTaskCreateExt()来实现的。这些调用告诉内核,任务程序的起始地址在哪里,优先级是多少,任务要使用多少栈空间等。,27,搁喝途次渐悯俭管幸焰率蕊简裹庙咒赞内窗潮绊少交泻柄婴吏介瞪打钞紫

19、(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,uC/OS任务状态,就绪态:任务一旦建立,就进入了就绪态。任务的建立可以是在多任务运行开始之前,也可以动态地由一个运行着的任务建立。如果多任务已经启动,且一个任务是被另一个任务建立的,而新建立的任务的优先级高于建立它的任务的优先级,则刚刚被建立的新任务将立即获得CPU的使用权。一个任务可以通过调用OSTaskDel()返回到睡眠态,或通过调用该函数让另一个任务进入睡眠态。,28,宠总聚霓吝娃校模阐赵曾虎兼箩驳绸鞋闹籍郧粮氰垛脂冤鞋甘钳蔓拒额嵌(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,uC/OS任务状态,运行态:调用OSStart

20、()函数可以启动多任务。OSStart()函数只能在启动时调用一次,该函数选择用户初始化代码中已经建立的、进入就绪态的优先级最高的任务来进行执行。等待态:从运行态到等待态有两种可能的原因:1.正在运行的任务调用OSTimeDly()函数将自身延迟一段时间,则该任务进入等待态。2.正在执行的任务需要等待某一事件的发生,如信号量和消息,若该事件未发生或未获得,该任务进入等待态。,29,企厌涅迢惨脆接亿瘟嘻利誓拿蠢虾官擅泛液赛觉侧谨绪崇翼草汹杆懂雅惦(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,uC/OS任务状态,中断服务态:被中断了的任务进入中断服务态。响应中断时,正在执行的任务被挂起,中

21、断服务子程序控制了CPU使用权。中断服务子程序可能会使一个或多个任务进入就绪态。在中断服务子程序返回之前,内核要判定,被中断的任务是否还是就绪态任务中优先级最高的。若已经不是,则新进入就绪态的这个优先级更高的任务将得以运行,否则,原来被中断了的任务将继续运行。,30,恍秉矩拖碗窍札辟撇工郎拧抛踩刺谍虾款羽菩奥澈部谭勒寝订攫症狸啪亢(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务控制块,内核对任务管理是通过对任务控制块(Task Control Block,TCB)的操作来实现的。任务控制块是包含任务相关信息的数据结构包含了任务执行过程中所需要的所有信息。任务控制块大都包括以下信息:任

22、务的名字任务执行的起始地址任务的优先级任务的状态任务的硬件上下文(堆栈指针、PC和寄存器等)任务的队列指针等内容,31,少梯堑蹄儒唉竞侄禹霸游厌佑殷狸肘猪墒铅刹音鄙簿免渤藻伙堪悉庭绢伙(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务控制块,一旦任务建立,一个任务控制块OS_TCB就被赋值,能够保存任务被其他任务抢占时的状态。当任务重新得到CPU的使用权后,任务控制块能够确保任务从当时被中断的那一点丝毫不差的继续执行。下面是uC/OS的OS_TCB源代码。,32,卫秤裳身额塔疗蓉卑卸臃凯捞收假眩谴舒耕灿譬仆灯棠蜡俺唉找整幢学弥(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,typ

23、edef struct os_tcb OS_STK*OSTCBStkPtr;/*指向当前任务堆栈栈顶的指针,每个任务的堆栈容量可以是任意的*/#if OS_TASK_CREATE_EXT_EN 0/*允许建立任务函数的扩展*/void*OSTCBExtPtr;/*指向用户自定义的任务控制块扩展*/OS_STK*OSTCBStkBottom;/*栈底指针*/INT32U OSTCBStkSize;/*栈空间,以栈元为单位*/INT16U OSTCBOpt;/*把“选择项”传给函数 OSTaskCreateExt()。目前支持三个选择项:OS_TASK_OPT_CHK用于告知内核在任务建立时允许建

24、立任务栈检验,该检验功能由用户程序实现;OS_TASK_OPT_STK_CLR表示任务建立时,任务栈要清0;OS_TASK_OPT_SAVE_FP表示任务要做浮点数运算。*/INT16U OSTCBId;/*保留*/#endif struct os_tcb*OSTCBNext;struct os_tcb*OSTCBPrev;/*用于任务控制块双向链表的前后查找。*/,uC/OS的TCB 源代码,33,总糠腕鲸椿孰树祝图蛋擒坝涵泄洋讼渠挛拔稍哮冲刊尧砖猎绽桌神字唱苟(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,#if(OS_Q_EN0)/*传递给任务的消息指针*/#endif,34,uC

25、/OS的TCB 源代码,前粪料肮守具偶丢魂荤廉乒矮旬茫箩笋档植莆舶恿志辛腆郊盐鲜萨世鼠诬(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,#if(OS_VERSION=251)/*任务优先级*/,35,uC/OS的TCB 源代码,瘁轴而氮鸽撕旱笺嘉鳞滩掖斥龋哦谐拦购浆烽投玻闲菲生北廉争谚忍极掐(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,INT8U OSTCBX;INT8U OSTCBY;INT8U OSTCBBitX;INT8U OSTCBBitY;/*这四个变量用于找出具有最高优先级的任务。这些值是在任务建立时计算,或者是在改变任务优先级时计算。*/#if OS_TASK_DE

26、L_EN 0 BOOLEAN OSTCBDelReq;/*表示任务是否需要删除*/#endif OS_TCB;,36,注:应用程序可以有的最多任务数可以在文件OS_CFG.H中定义。避免RAM程序空间浪费。在内核初始化时,所有OS_TCB都被链接成单向空任务链表。任务建立时,空TCB指针OSTCBFreeList指向的OS_TCB被赋给任务,然后OSTCBFreeList指向下一个空的TCB。,uC/OS的TCB 源代码,滋隐祝静监油搭乐牡乐份喂郊仑匿论失步沙蕾丘诣核玄渐知烃侠挖殊情俗(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,空任务控制块链表,37,所有的OS_TCB都存放在任务控

27、制块列表数组OSTCBTbl 中的。,负肖为战徐桌巍绑滤固温赃讳牵配邦都琵申垢崔祸笆其入宫诺旭井违孽烯(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务控制块,为节约内存,任务数量通常需要进行预先配置按照配置的任务数量初始化任务控制块,一个任务对应一个初始的任务控制块,形成一个空闲任务控制块链。在任务创建时,实时内核从空闲任务控制块链中为任务分配一个任务控制块。随后对任务的操作,都是基于对应的任务控制块来进行的。当任务被删除后,对应的任务控制块又会被实时内核回收到空闲任务控制块链。,38,袭吠拢贯哈姜猖娠恶铃悯机箩刃氨偷哟凋酣褐朴杂义厦螟舆楼囚叶伴厘圣(课件)-嵌入式系统及应用(课件)

28、-嵌入式系统及应用,初始化任务控制块,任务建立时,函数OS_TCBInit()初始化任务控制块OS_TCB.,39,INT8U OS_TCBInit(INT8U prio,OS_STK*ptos,OS_STK*pbos,INT16U id,INT32U stk_size,void*pext,INT16U opt)/*prio是任务优先级,ptos指向栈顶指针,pbos指向栈底的指针,id是任务标识符,stk_size是堆栈的容量,pext是OS_TCB的扩展指针,opt是选择项*/OS_TCB*ptcb;OS_ENTER_CRITICAL();ptcb=OSTCBFreeList;if(ptc

29、b!=(OS_TCB*)0),涵葛谊屁邱耳卒虫臃癌沪皖确挨诚娥荫烘您娩卷槽虞萤倒冶讨未颗管斡蔼(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,40,初始化任务控制块,OSTCBFreeList=ptcb-OSTCBNext;OS_EXIT_CRITICAL();ptcb-OSTCBStkPtr=ptos;/栈顶指针 ptcb-OSTCBPrio=(INT8U)prio;ptcb-OSTCBStat=OS_STAT_RDY;ptcb-OSTCBDly=0;#if OS_TASK_CREATE_EXT_EN 0 ptcb-OSTCBExtPtr=pext;/OS_TCB的扩展指针 ptcb-

30、OSTCBStkSize=stk_size;/stk_size是堆栈的容量 ptcb-OSTCBStkBottom=pbos;/栈底指针 ptcb-OSTCBOpt=opt;/选择项 ptcb-OSTCBId=id;/id是任务标识符#endif,炭钞昧国突屯撰整进禹三唇厂精舔猪宣哉歧褥兵潦鸦负梁伙食娩戈踩撰贵(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,41,初始化任务控制块,#if OS_TASK_DEL_EN 0 ptcb-OSTCBDelReq=OS_NO_ERR;#endif ptcb-OSTCBY=prio 3;ptcb-OSTCBBitY=OSMapTblptcb-OST

31、CBY;ptcb-OSTCBX=prio/事件标志节点指针为空#endif,进胜改雷缉镶培蚂舀适片囤贸娟滩婿苏歹劝钵毅恼狸芬几砌码汲桅拧摆赢(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,42,初始化任务控制块,#if(OS_Q_EN 0)/返回值用于内核掌握执行情况,或剥浦封柏岂荣封邦盟甚迈滚翟圈备衙赫喜皱豺玉杆前茵撞瞪呐阔娃凛阐(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,43,初始化任务控制块,OS_EXIT_CRITICAL();return(OS_NO_MORE_TCB);/返回值用于内核掌握执行情况,总结:1.目前,内核对TCB维护了3个全局数组:任务控制块表OSTC

32、BTbl(用于决定内核最多可用TCB数),任务优先级TCB表OSTCBPrioTbl,任务就绪表OSRdyTbl和 OSRdyGrp。2.目前,对TCB维护了2个全局链表:任务控制块空闲链表OSTCBFreeList(指向下一个可以分配的TCB);已建立任务控制块链表OSTCBList。,趴狈捷燥益胯百穗贱碎柴雌殷多辆蝗哮减懒讯辕脚辩快龙较纸逾杠渴酶涝(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,已建立任务控制块链表OSTCBList,任务队列,44,曼支魂军刺痒匿惊寐刮诅挛壁岁制袜完咋峡妮锹鞠曼肺换汁镑七奈班池颁(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,就绪表,每个就绪的

33、任务都放在就绪表OSRdyTbl中。当任务就绪时,OSRdyTbl中相应位置1.,45,瘫舵霞桨沿榆利报脸尼临暑负萍碱掐睫匣鲜听蛛磺谤乖蛮刽忱滑牧难亭遥(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,就绪表,思考:对于按优先级大小存放的数据结构,如果我们想找出最高优先级的任务,应当怎么操作呢?,46,宾婚疯箕难洼几谢薄衙沁寓巨嗡圆棍展精释锯史恐擒泻欧缅肺聊昂坑钻尘(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,就绪表,还有一个全局变量,OSRdyGrp:,47,喉胎俞日十塘嚎厘严脏萄趟玄茨岔孙定茧臻狂洒播溪脆疫诵云氰彻阁欠灭(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,就绪

34、表,此外,还有一个全局变量,OSMapTbl的值:,48,硫凡臂效处搽拎叔由那闯砧迷踢判荒炼泅憎史役筐届记窍爱通谈杖涛援呢(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,就绪表,49,35:00100011,/假设当前任务优先级为35,使任务进入就绪态OSRdyGrp|=OSMapTblprio3;OSRdyTblprio3|=OSMapTblprio,厢敬崇宣匣畔烯类讣播沫闪牧孜副笺踌厕莲金摔舅哦吗祝很惩侈保隋渭唾(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,就绪表,50,35:00100011,/假设当前任务优先级为35,使任务脱离就绪态if(OSRdyTblprio3,诛傀

35、遍公侄就纬谢迎牟葬邵糖惹蕾财婚免烟械席署蹿羽盖衍现撕搁黑讹寺(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,就绪表,上面介绍了增加和脱离就绪态的任务的操作。那么如何找出最高优先级的就绪态任务?,51,INT8U 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

36、,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

37、,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0 x00 to 0 x0F*/,/*0 x10 to 0 x1F*/,/*0 x60 to 0 x6F*/,/*0 x70 to 0 x7F*/,/*0 x80 to 0 x8F*/,/*0 x90 to 0 x9F*/,/*0 xA0 to 0 xAF*/,/*0 xB0 to 0 xBF*/,/*0 xC0 to 0 xCF*/,/*0 xD0 to 0 xDF*/,/*0 xE0 to 0 xEF*/,/*0 x20 to 0 x2F*/,/*0 x30 to 0 x3F*/,/*0 x40 to 0 x

38、4F*/,/*0 x50 to 0 x5F*/,/*0 xF0 to 0 xFF*/,;,尔服太率技黎瓣墨拈贰紊儒驳忙反产戮睡刘但峙嘉而喝喊撑舍清教韵扰韩(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,找出进入就绪态的最高优先级任务y=OSUnMapTblOSRdyGrp;x=OSUnMapTblOSRdyTbly;priority=(y 3)+x;,uC/OS中,任务按优先级进行组织,以优先级为数组元素下标,通过OSTCBPrioTbl即可找到相应的TCB。,35:00100 011,OSRdyGrp,7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,23,2

39、2,21,20,19,18,17,16,31,30,29,28,27,26,25,24,1,0,0,0,1,0,0,0,47,46,45,54,43,42,41,40,55,54,53,52,51,50,49,48,63,62,61,60,59,58,57,56,0,1,0,1,0,0,0,0,OSRdyTbl,0 x50-4/high3Bit,0 x88-3/low3Bit,OSRdyTbl0,OSRdyTbl1,OSRdyTbl2,OSRdyTbl3,OSRdyTbl4,OSRdyTbl5,OSRdyTbl6,OSRdyTbl7,52,顾尖沉僳扫蹦船飘吱希脆魂旺悬宗弥荡恒烧荐猛沃纱鹊雨庞嵌

40、罢兑之陪牲(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,另一种实现方式:任务队列,在非实时系统中,可以考虑通过任务队列实现对系统中所有任务的管理。,单就绪队列和单等待队列,53,峭辊茵呐昔跑藻狄劫渤代昨枫偏潜筷央庄皱渐函香四缮克轩墒臆每贪黄现(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务队列,单等待队列资源对应的事件发生时,实时内核需要扫描整个等待队列,搜索等待该资源的任务,并按照一定的策略选取任务,把任务的任务控制块放置到就绪队列。如果系统的资源和任务比较多,搜索等待该资源的任务所需要的时间就比较长,会影响整个系统的实时性。可采用一种多等待队列的处理方式资源对应的事件发生

41、时,能够在较短的时间内确立等待该资源的任务等待队列。,54,蔫犀忘期耿怔逗诡箔坍臼蹬粤受安悟镜拂且饲映粟啮露大窗宿抚惹钙鉴千(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,单就绪队列和多等待队列,55,害曲步挂辆罕鸵摇由女迟枫艾及蓟贷熔咎家鹅勺堂浚僵懦捏渴总音争拽赴(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务队列,对于就绪任务,如果采用上述队列方式进行管理,在基于优先级的调度处理中,要获得当前具有最高优先级的就绪任务:方式一:任务就绪时,把就绪任务的任务控制块放在就绪队列的末尾。调度程序需要从就绪队列的头部到尾部进行一次遍历,才能获得就绪队列中具有最高优先级的任务;方式二:

42、就绪队列按照优先级从高到低的顺序排列。新的就绪任务到达时,需要插入到就绪队列的合适位置,确保就绪队列保持优先级从高到低排列的顺序性。,56,讣片肚寺诲男宇箭系拳味票舍巧堑姓驹丢麓援陌沁瘴膝曲店篓魁湍梦泄桅(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务调度,uC/OS总是选择就绪态任务中优先级最高的任务执行。确定哪个任务优先级最高,下面该哪个任务运行了的工作是由调度器完成的。uC/OS的任务级调度是由函数OS_Sched()完成的。中断级的调度是由另一个函数OSIntExit()完成的。需注意的是,uC/OS任务调度的执行时间是常数,与应用程序建立了多少个任务没有关系。,57,怔悼蚀

43、馁纪荣甚寒栽臆并臣栋咯躺几坑忘舅灸猎谬码绢盗坪拉遵绎缎腥域(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务调度,保 存,调 度,恢 复,保存当前运行任务上下文的时间,选择下一个任务的调度时间,将要运行任务的上下文的恢复时间,取决于任务上下文的定义和处理器的速度。不同种类的处理器,任务上下文的定义不同,其内容有多有少。,任务调度(即选择下一个运行任务)的时间与调度过程有关。强实时内核要求调度过程所花费的时间是确定的,即不能随系统中就绪任务的数目而变化。与具体实现调度算法时所采用的数据结构有关。,58,睹俯痘咸锻敢奴衙姓置谣迅祁囱惑脾授穴乒署偏带仗炬办撕卵矮柠爬逗方(课件)-嵌入式系统及

44、应用(课件)-嵌入式系统及应用,void OS_Sched(void)INT8U y;OS_ENTER_CRITICAL();if(OSIntNesting=0),59,詹吟荤显蝇墟征吉履奈坊飘蠕期涂嘶侦扮鞘赂碍坷坦顿墒雨吴摧射贾凡兄(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务切换,任务切换(context switching)保存当前任务的上下文,并恢复需要执行的任务的上下文的过程。当发生任务切换时:当前正在运行的任务的上下文就需要通过该任务的任务控制块保存起来;把需要投入运行的任务的上下文从对应的任务控制块中恢复出来。,60,烈挟灾蘑蘸氓远晾弃旨瘤欧寺打大岔检圆垄帅镇蚁甫推积

45、胺敢笛自抡淋婴(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务1,任务2,实时内核调度程序,保存任务1的上下文到TCB1,从TCB2恢复任务2的上下文,保存任务2的上下文到TCB2,从TCB1恢复任务1的上下文,时间,任务1执行一段时间后,由于某种原因,需要进行任务切换,进入实时内核的调度程序。调度程序首先把当前的上下文内容保存到任务1的任务控制块TCB1中,然后又把任务2的上下文从TCB2中恢复到CPU寄存器,随后任务2得到执行。任务2执行一段时间后,由于某种原因,需要进行任务切换,进入实时内核的调度程序。调度程序首先把当前的上下文内容保存到任务2的任务控制块TCB2中,然后又把任

46、务1的上下文从TCB1中恢复到CPU寄存器,随后任务1得到执行。,61,高酮脊佑乎咀菠败蠕黔异顷逝敷片山组涸捷常次拙氛满祁斟辫非锄柳病之(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务切换,任务切换将导致任务状态发生变化:当前正在运行的任务将由运行状态变为就绪或是等待状态;需要投入运行的任务则由就绪状态变为运行状态。,62,亥歉翁键烧迸压全辗兼孵旱神媚腐知酿铂执珐狞澄碗琼骄邦硕帜夏撒左挝(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务切换,任务切换基本步骤,1 保存任务上下文环境,2 更新当前运行任务的控制块内容,将其状态改为就绪或等待状态,3 将任务控制块移到相应队列(就

47、绪队列或等待队列),4 选择另一个任务进行执行(调度),5 改变需投入运行任务的控制块内容,将其状态变为运行状态,6 恢复需投入运行任务的上下文环境,63,洒育肝朵捕复详灭贿濒董粱俞阶腔簇岗屿再闰痘纤扮啤予煽芋酵觅匆底搓(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,uCOS调用OS_TASK_SW()之前的CPU状态,CPU,LOW MEMORY,HIGH MEMORY,LOW MEMORY,HIGH MEMORY,OSTCBCur,OSTCBHighRdy,Stack Growth,sp,R1,R2,R3,R4,PC,PSW,(1),(5),(4),(2),(3),OS_TCB,OS

48、_TCB,老高优先级任务,新高优先级任务,R3,R4,R2,R1,PC,PSW,64,篡安遭锗脖万军涵蠢孙申炭磺季猫套二脚团床漾轰堤匆近理蛹道脏韵扣俘(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,保存当前任务CPU寄存器的值,CPU,LOW MEMORY,HIGH MEMORY,LOW MEMORY,HIGH MEMORY,OSTCBCur,OSTCBHighRdy,Stack Growth,sp,R1,R2,R3,R4,PC,PSW,(1),(3),OS_TCB,OS_TCB,老高优先级任务,新高优先级任务,PSW,PC,R1,R2,R3,R4,R4,R3,R2,R1,PC,PSW,

49、(2),(3),65,炉搪婶夸剐扳狞讽婚仔述舔摇娄觅铣位糊丸邮轻敲皇轩茅港赊加埋密晾管(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,CPU,LOW MEMORY,HIGH MEMORY,LOW MEMORY,HIGH MEMORY,OSTCBHighRdy,sp,R1,R2,R3,R4,PC,PSW,OS_TCB,OS_TCB,老高优先级任务,新高优先级任务,PSW,PC,R1,R2,R3,R4,R4,R3,R2,R1,PC,PSW,重新装入要运行的任务,OSTCBCur,(1),(2),(3),(4),(4),Stack Growth,66,天苑坛灿佑铸娇巧费婆勘片皱鹏焊胺龙饰闹辜班

50、酮丝脯沪瘤务褂弘狐什很(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,void OSCtxSw(void)将 R1,R2,R3 及 R4 推入当前堆栈;OSTCBCur-OSTCBStkPtr=SP;OSTCBCur=OSTCBHighRdy;SP=OSTCBHighRdy-OSTCBStkPtr;将 R4,R3,R2 及 R1 从新堆栈中弹出;执行中断返回指令;,uCOS的示意性代码:OS_TASK_SW(),67,陪拍施咱夯句了垒娜却歇秘太瑰缓娠阔驱巷敛殿晌醚措拒路钎猩国收也肌(课件)-嵌入式系统及应用(课件)-嵌入式系统及应用,任务切换,任务切换时机,中断、自陷,运行任务因缺乏资源

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

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号