欢迎来到金年会,金年会体育,金年会手机网页版登录水务平台有限公司!

联系电话:020-88888888

解决方案

SOLUTION
您的位置: 主页 > 解决方案 > 供水调度系统

尊龙凯时ag旗舰厅uCOS-II的职司切换机理及中缀调剂优化

发布日期:2024-07-08 13:44浏览次数:750

  最左边的两个参数借使不是struct(组织体)或者union(连结体)○,将被赋值到寄存器,不然将被压栈○○。函数剩下的参数都将被压栈○。按照最左边的那两个参数的类型,分歧赋值给R12(看待32位类型赋值给R12:R13)和R14(看待32位类型赋值给R14:R15)。

  因为没有停止嵌套,正在停止治理中没有此外停止爆发○○,那么返回的设施和上述的进栈操作正好相反○○。正在停止治理完了自此,SP会自愿回到图4中③的SP地方。接着,体系会查问到优先级最高的职分○○,然后把SP的指针移到优先级最高的职分的职分仓库○,举行R15~R4的出栈作事○,终末用RETI停止返回指令返回到新的职分。由于咱们把全部的职分仓库都规章成好像的方式,以是它们之间不会形成题目。这里须要细心的是,由于体系正在C编译器的停止治理中会对停止进入时默认压栈的寄存器出栈,以是正在策画出栈的圭外时,要先把这些实质压栈,如许才调确切出栈。

  咱们把这个函数称作职分调换的前导函数。它先剖断要举行职分切换的要求,借使要求许诺举行职分调换,则移用OSCtxSw()。这个函数是真正告竣职分调换的函数○○。因为功夫要对仓库举行操作,以是OSCtxSw()平常用汇编说话写成。它将正正在运转的职分的CPU的SR寄存器推入仓库,然后把R4~R15压栈。接着把目前的SP保全正在TCB-OSTCBStkPtr中○,然后把最高优先级的TCB-OSTCBStkPtr的值赋值给SP。这期间,SP就仍旧指到最高优先级职分的职分仓库了○。然后举行出栈作事○○,把R15~R4出栈。接着利用RETI返回○○,如许就把SR和PC出栈了。单纯地说,μC/OS-II切换到最高优先级的职分○○,只是还原最高优先级职分全部的寄存器并运转停止返回指令(RETI),实质上,所作的只是人工地仿效了一次停止○○。

  ◆ 有相应的CPU寄存器可以仿效SP的少少成效,能利用相应的指令来竣工好似SP的少少操作;

  职分治理局限(OSTask.c) 职分治理局限中的实质都是与职分的操作亲近干系的。席卷职分的修筑、删除、挂起、还原等等○○。由于μC/OS-II是以职分为根本单元调换的○,以是这局限实质也相当紧要。

  正在这种策画计划中,停止仓库区也即是行使原有的MSP430中的体系仓库区。正在前后台的策画事势中○,停止中的压栈和出栈的操作都是正在体系的仓库区竣工的。基于μC/OS-II的职分切换的道理,咱们看待职分仓库的成效和体系仓库的成效做了以下划分:职分正在运转进程中形成停止和职分切换的期间,PC和SR以及寄存器Rx都保全正在各个职分己方的职分仓库中;而停止嵌套形成的压栈和出栈的操作都是放正在体系仓库中举行的。这种划分形式是基于尽量将停止职分与平淡职分分隔的思思策画的○○。

  举行职分仓库的压栈作事自此,就可能安排SP的指针到体系仓库了,如图4所示。压栈后的SP指向终末一个压栈实质①。咱们把SP的值赋值给优先级6职分的TCB-OSTCBStkPtr,以便举行职分调换的期间出栈利用②。接着,就把SP安排到体系仓库处③○。正在停止治理进程中○○,大概会显现压栈的操作,那么这种环境下SP的指针会随之转移。因为现正在是停止仓库中,以是不会破损职分仓库的方式○○。

  看待如许的策画形式,时钟节奏的治理形式必需安乐常的停止治理形式是相同的○○。平常来说,MSP430利用WATCHDOG时钟停止举动时钟节奏的形成源。从性质上来说,时钟节奏自身也是停止治理进程,以是看待时钟节奏的治理应当和其它的停止治理进程好像○。实质上,正在时钟节奏的治理进程中也大概会存正在停止嵌套的题目。

  MSP430最常利用的C编译器应当即是IAR Embedd-ed WorkBench。看待这一编译器来说,通过剖析和探讨,发明它有以下秩序○。

  ① 编写停止圭外的期间○○,有要求尽量利用汇编说话。由于如许可能避免少少编译器己方举行的操作,淘汰指针安排的次数。

  μC/OS-II是一个众职分的操作体系,正在没有效户己方界说的停止环境下,职分间的切换设施是如许的:职分间的切换平常会移用OSSched()函数。函数的组织如下:

  曩昔面临于IAR EW的默认操作剖析来看,仓库的组织可能有两种○○。一种是把μC/OS-II的职分仓库策画成图1所示的事势○。这种手段是把编译器默认的压栈操作放正在前面○,然后再把剩下的寄存器进栈。然而,因为编译器正在治理庞大水平分歧的停止任职圭外的期间,压入栈的寄存器的数目未必,以是会对自此其余寄存器的压栈和出栈操作填补庞大度。这里,咱们采用了图2所示的形式天生仓库。正在这种仓库中,PC和SR压栈后,通过安排SP指针,使得R4~R15寄存器笼罩编译器默认压栈的寄存器。如许,治理的难度会小一点。

  图3所示为停止爆发后看待职分优先级为6的职分仓库所举行的操作○。停止爆发后,PC和SR被体系压栈②○,看待IAR C编译器来说,会遵照庞大度分歧的停止任职圭外的请求,默认地举行少少寄存器的压栈操作③。由于咱们请求的仓库方式是如图2所示的,咱们要把SP安排到SR后面④,然后举行R4~R15的压栈操作,酿成咱们所请求的仓库方式⑤。

  如图5所示,因为正在治理停止的期间○○,SP仍旧被移到体系仓库去了尊龙凯时ag旗舰厅,唯有当停止退出的期间才大概把SP移到此外职分的职分仓库中。以是正在停止的期间举行停止嵌套I的职司切换机理及中缀调剂优化,那么看待停止的治理和第一次是相同的,所分歧的是j9九游会 - 真人游戏第一品牌,此次保全正在仓库中的不是职分运转中的寄存器,而是停止治理中的寄存器,并且是保全正在体系仓库中而不是职分仓库中。从这里就可能看出优化内存的成就。全部的停止嵌套中的寄存器压栈都压正在体系仓库中,如许看待职分仓库内存巨细的请求大大低落。

  OSIntEnter()即是将全部变量OSIntNesting加1。OSIntNesting是停止嵌套层数的变量。μC/OS-II通过它确保正在停止嵌套的期间,不举行职分调换。实践完用户的代码后○○,μC/OS-II移用OSIntExit(),一个与OSSched()很像的函数○。正在这个函数中○○,体系起首把OSIntNesting减1○○,然后剖断是否停止嵌套。借使不是的话○,而且目前职分不是最高优先级的职分,那么找到优先级最高的职分,实践OSIntCtxSw()这一出停止职分切换函数。由于,正在这之前仍旧做好了压栈作事;正在这个函数中,要举行R15~R4的出栈作事。并且,因为正在之前移用函数的期间,大概仍旧有少少寄存器被压入了仓库。以是要举行仓库指针的安排,使得可以从确切的地方出栈。

  ③ 停止治理进程中移用OSIntExit()的期间,因为 μC/OS-II的原始策画中SP指针有时是担心排的,以是正在OSIntExit()返回了自此尊龙凯时ag旗舰厅uCOS-II的职司切换机理及中缀调剂优化,,还要剖断一下是否停止嵌套○○。由于有的期间是须要切换职分的。

  不管是看待初学者○○,依然有阅历的工程师,μC/OS盛开源代码的形式使其不单知其然○,还知其以是然。通过看待体系内部组织的深切了然○,能加倍便利地举行开拓和调试;而且正在这种要求下,完整可能遵照策画请求举行合理的淘汰、扩充、修设和移植。常常,进货RTOS往往须要一大笔资金,使得平常的研习者望而生畏;而μC/OS看待学校探讨完整免费,唯有正在运用于结余项目时才须要付出少量的版权费,稀少适合平常利用者的研习、探讨和开拓。自1992第1版问世以还,已有成千上万的开拓者把它得胜地运用于百般体系,太平性和安靖性仍旧取得认证,现仍旧通过美邦FAA认证。

  ② 正在用C编写停止任职的期间,由于有些成效必需移用汇编的函数才调告竣。移用函数时,有些期间压栈的PC会破损仓库的组织。这个期间须要把仓库举行适合的安排,保障仓库方式确切切○。

  因为μC/OS-II正在运用的期间会占用单片机上的少少资源,如体系时钟、RAM、Flash或者ROM,从而淘汰了用户圭外对资源的行使。看待MSP430来说,RAM的占用是稀少非常的题目。看待8、16位的单片机来说○○,片内的RAM容量都很小○○,MSP430也是云云(最大的片内RAM也唯有2KB,比方MSP430F149)。借使利用扩展内存,会大大填补策画难度。

  借使是正在停止中移用停止任职子圭外的话,编译器将把目前实践语句的PC压栈,同时再把SR压栈○。接着,按照停止任职子圭外的庞大水平○,采选把R12~R15中的寄存器压栈。然后,实践停止任职子圭外。停止治理结尾后再把Rx寄存器出栈,SR出栈,PC出栈。把体系还原到停止前的状况,使圭外接着被停止的局限连续运转。

  μC/OS-II的停止任职子圭外安乐常前后台的操作有少许分歧,往往须要如许操作:

  借使是函数级移用○,编译器会正在函数移用时先把目前函数PC压栈○,然后移用函数,PC值革新。

  μC/OS-II可能大致分成重点、职分治理、时刻治理、职分同步与通讯○○,CPU的移植等5个局限。

  与CPU的接口局限 是指μC/OS-II针对所利用的CPU的移植局限。因为μC/OS-II是一个通用性的操作体系,以是看待闭节题目上的告竣,依然须要按照详细CPU的详细实质和请求作相应的移植。这局限实质因为连累到SP等体系指针,以是常常用汇编说话编写。苛重席卷停止级职分切换的底层告竣、职分级职分切换的底层告竣、时钟节奏的形成和治理、停止的干系治理局限等实质。

  正在嵌入式操作体系周围○○,由Jean J. Labrosse开拓的μC/OS,因为盛开源代码和强壮而安靖的成效,一经一度正在嵌入式体系周围惹起激烈响应。而其自己也早已成为了嵌入式体系聚会(美邦)的参谋委员会的成员。

  由于μC/OS-II正在进入停止中,会把全部变量OSIntNesting++;正在退出停止的期间,又会把OSIntNesting--。正在退出停止举行职分切换之前○○,μC/OS-II会先剖断OSIntNesting是否为0,是0才会举行职分调换。当第二停止运转结尾自此,退出停止嵌套的期间,OSIntNesting不为0,也就不会举行职分调换○○。于是,仍然正在体系仓库出栈,那么体系会连续前面没有竣工的停止任职圭外。

  时钟局限(OSTime.c) μC/OS-II中的最小时钟单元是timetick(时钟节奏)。职分延时等操作是正在这里竣工的。

  ◆ 举动SP利用的寄存器正在编译进程中最好不被编译器默认利用。正在IAR的编译器中,有一个选项可能避免正在编译进程中利用到R4、R5。

  通过对μC/OS-II的剖析可能得知,μC/OS-II占用的RAM苛重是用正在每个职分的TCB、每个职分的仓库等方面。通过进一步剖析,发明职分仓库大的来历是由于MSP430的硬件策画中没有把停止仓库和职分仓库分隔。如许就酿成了正在运用μC/OS-II的期间,思虑每个职分的职分仓库巨细时○○,不但单须要阴谋职分中部分变量和函数嵌套层数,还须要思虑停止的最大嵌套层数。由于,看待μC/OS-II原始的停止治理的策画、停止治理进程中的停止嵌套中所须要压栈的寄存器巨细和部分变量的内存巨细,都须要算正在每个职分的职分仓库中,则看待每一个职分都须要预留这一局限内存,以是巨额的RAM被虚耗。从这里可能看出尊龙凯时ag旗舰厅uCOS-I,处理这一题目的直接手段即是把停止仓库和每个职分己方的仓库分隔。如许,正在阴谋每个职分仓库的期间○○,就不须要把停止治理中(席卷停止嵌套进程中)的内存的占用阴谋到每个职分的职分仓库中,只须要阴谋每个职分自身须要的内存巨细○○,从而降低了RAM的行使率,可能缓解内存吃紧的题目。

  接着退出停止的顺次和非停止嵌套的顺次是相同的。正在停止治理完自此,SP会自愿回到图4中③的SP地方。接着,体系会查问到优先级最高的职分,然后把SP的指针移到优先级最高的职分的职分仓库。举行R15~R4的出栈作事,终末用RETI停止返回指令返回到新的职分○。

  职分同步和通讯局限 为事项治理局限,席卷信号量、邮箱、邮箱队伍、事项标识等局限;苛重用于职分间的相互闭系和对临界资源的访谒。

  停止的环境根本上即是上述两种。看待有些文献中提到的正在停止中会调换到更高优先级的职分的环境,笔者感觉是不应当爆发的○。由于从上面的剖析可能看出,默认的(μC/OS-II的策画思绪)停止治理会同时对全部变量OSIntNesting举行增减治理,以给出是否须要职分调换的要求。那么纵使正在停止任职圭外中把更高优先级的职分停当,也会比及停止退出自此再举行调换○○,除非是正在停止中直接移用更高优先级的职分函数○○。但这种手段应当是和μC/OS-II的规矩相违背的,沿用的是以前前后台策画的思绪○○。

  重点局限(OSCore.c) 是操作体系的治理重点,席卷操作体系初始化、操作体系运转、停止进出的前导、时钟节奏、职分调换、事项治理等众局限。可以支持体系根本作事的局限都正在这里。

友情链接: 淘宝 腾讯 新浪 百度 微博
Copyright © 2002-2023 金年会,金年会体育,金年会手机网页版登录供水系统有限公司 版权所有 非商用版本 网站备案:ICP备********号
AOS.init({ easing: 'ease-out-back', duration: 1000 });