μCOS优先级调度机制在PowerPC上的优化

合集下载

μCOS-II的多任务系统实时性分析与优先级分配

μCOS-II的多任务系统实时性分析与优先级分配

从产品研发的角度,针对小资源系统中使用μC/OS-II的实时性和优先级关系进行了分析。

提出了可删除任务的灵活应用和可变大小任务栈的实现方法,对于并行任务使用共享资源的几种情况给出了实用解决方案。

这些措施获得了良好的任务并行性和实时响应,节约了代码存储空间。

引言μC/OS-II作为一种轻量级的嵌入式实时操作系统,正随着嵌入式微处理器性能的不断提高和外围资源(主要是存储器资源)的不断增加,得到越来越多的应用。

例如,原来的51系列单片机,限于6~12 MHz 的主频、12个Clock的机器周期以及有限的存储器资源,使用μC/OS-II会大大加重系统负担,使应用程序的运行受到影响,特别在快速A/D转换等实时性较强的场合,无法得到及时的响应,于是才有了更轻量级的Small RTOS等操作系统的出现。

但目前更强劲的51内核版本微处理器的大量出现,从根本上改变了这种情况。

40 MHz以上的主频,单周期指令的微处理器,加上64 KB的程序空间和8 KB以上的数据空间,这样的系统已经可以流畅地运行μC/OS-II[1]。

μC/OS-II的移植版本很多,选择一个适合系统CPU的版本,然后进行正确的配置和优化是非常重要的。

1 系统实时性分析本系统工作原理是在恒定温度条件下,任意启动4个测试通道来进行多个项目的并行分析,每个测试通道的工作流程完全相同,如图1所示。

C8051F120集成了8路12位高速A/D转换器(ADC0)和8路8位高速A/D转换器(ADC2)。

系统要求对4个光学传感器输出进行采样,ADC0可以构成4个差分测试通道以满足需求。

系统还要求能对2路温度实现实时控制,用于监控2个外部温度传感器的输出电压:一个保证测试部分的温度恒定在37±0.2 ℃,通过对加热组件的PWM控制来完成;另一个用于监测机箱温度,在32 ℃以上时启动风扇散热,30 ℃以下关闭风扇。

图1 通道工作流程从图1中可以看出,完整的流程包括信息输入、样本预温、通道启动、试剂添加、微分测量、结果处理6个阶段。

操作系统的调度算法优先级时间片和占式调度

操作系统的调度算法优先级时间片和占式调度

操作系统的调度算法优先级时间片和占式调度操作系统的调度算法:优先级、时间片和抢占式调度操作系统是计算机系统中的一个核心组件,用于管理和控制计算机的硬件和软件资源,以提供良好的用户体验和系统性能。

在操作系统中,调度算法是实现任务分配和资源管理的关键。

本文将介绍三种常见的调度算法:优先级调度、时间片轮转调度和抢占式调度。

一、优先级调度算法优先级调度算法是根据任务的优先级安排任务的执行顺序。

每个任务都有一个优先级值,数值越高表示优先级越高。

当一个任务就绪并等待执行时,调度器会选择优先级最高的任务来执行。

优先级调度算法可以保证高优先级任务及时得到执行,但可能会导致低优先级任务出现饥饿现象。

实际上,优先级调度算法可以分为静态优先级和动态优先级两种类型。

静态优先级是在任务创建时分配的,不会改变。

动态优先级根据任务的运行情况和系统状态进行动态调整,以提高系统的公平性和性能。

二、时间片轮转调度算法时间片轮转调度算法是一种周期性调度算法,每个任务被分配一个固定的时间片(时间段),当任务的时间片用完后,调度器会将任务挂起,并将CPU 分配给下一个任务执行。

当所有任务都执行完一次后,调度器会重新分配时间片,继续按照顺序执行任务。

时间片轮转调度算法可以保证任务的平均执行时间,并且避免了长时间任务的霸占资源问题。

然而,如果任务的时间片设置得过小,则会增加任务切换的开销。

如果任务的时间片设置得过大,则可能出现对实时任务响应时间的影响。

三、抢占式调度算法抢占式调度算法是一种灵活的调度策略,允许更高优先级的任务打断正在执行的低优先级任务,以确保高优先级任务的及时响应。

当一个任务就绪并具备运行条件时,调度器会立即安排其执行,无论当前是否有其他任务在执行。

抢占式调度算法可以有效地提高系统的响应速度和实时性,但可能会导致任务切换的频繁发生,增加了系统开销。

为了平衡性能和实时性的需求,抢占式调度算法通常会和其他调度策略结合使用,例如优先级和时间片轮转。

嵌入式 网络题目答案

嵌入式 网络题目答案

第一单元FIQ中断的入口地址是(0x0000001C )。

问题Thumb指令集和ARM指令集分别是(16位,32位)的。

问题ARM处理器有几种工作模式(7 )。

问题存储一个32位数0x12168465到2000H~2003H四个字节单元中,若以小端模式存储,则2000H存储单元的内容为(0x65 )。

问题下列不是嵌入式系统的特点的是(A. 嵌入式系统开发可以在开发板上直接二次开发。

)。

问题下列不是嵌入式系统的特点的是(A. 嵌入式微处理器通常不包含专用调试电路)。

问题军用雷达跟踪系统是借助于嵌入式技术开发的,可以对军事目标做实时监控,按照系统的实时性来分,它是(D.硬实时系统)。

问题ARM寄存器组有(37 )个寄存器。

问题每种嵌入式操作系统都有自身的特点以吸引相关用户,下列说法错误的是(C. C/OS-Ⅱ操作系统不是一种实时操作系统(RTOS))。

问题10下列CPSR寄存器标志位的作用说法错误的是(D. V: 进位)。

问题μCOS-II操作系统属于(A. 占先式实时操作系统)问题下列属于ARM体系的技术特征的是(Loaded/Store体系结构)。

第二单元在内嵌汇编代码中实现x+x/y的运算,用如下代码是否能获得正确的结果,应如何修改?_ _asm{ MOV R0, xADD y, R0, x/y}问题一条ARM数据处理指令,例如“ADD R0,R1,#immed”中使用的立即数#immed 是有一定限制的,下列立即数表示中合法的是(0x12800 )。

问题ARM中使用的指令都是32位的。

(错)问题下列哪条指令可以实现异常返回时的操作( SUBS PC,R14,#4 )。

问题计数循环是程序中十分常用的流程控制结构,一般有以下两种形式:for (loop=1;loop<=limit;loop++)和for (loop=limit;loop!=0;loop--)这两种循环形式在逻辑上并没有效率差异,但是映射到具体的ARM体系结构中时,就产生了很大的不同,请分析原因,并说明何种形式更优?问题系统上电后执行的第一段代码可以编译为32位ARM指令,也可以编译为16位Thumb指令。

μCOS-II 的多任务系统实时性分析与优先级分配

μCOS-II 的多任务系统实时性分析与优先级分配

μC/OS-II的多任务系统实时性分析与优先级分配摘要从产品研发的角度,针对小资源系统中使用μC/OS-II的实时性和优先级关系进行了分析,提出了可删除任务的灵活应用和可变大小任务栈的实现方法,对于并行任务使用共享资源的几种情况给出了实用解决方案。

这些措施获得了良好的任务并行性和实时响应,节约了代码存储空间。

关键词μC/OS-II 实时性可变任务堆栈优先级引言μC/OS-II作为一种轻量级的嵌入式实时操作系统,正随着嵌入式微处理器性能的不断提高和外围资源(主要是存储器资源)的不断增加,得到越来越多的应用。

例如,原来的51系列单片机,限于6~12 MHz的主频、12个Clock的机器周期以及有限的存储器资源,使用μC/OS-II会大大加重系统负担,使应用程序的运行受到影响,特别在快速A/D转换等实时性较强的场合,无法得到及时的响应,于是才有了更轻量级的Small RTOS等操作系统的出现。

但目前更强劲的51内核版本微处理器的大量出现,从根本上改变了这种情况。

40 MHz以上的主频,单周期指令的微处理器,加上64 KB的程序空间和8 KB以上的数据空间,这样的系统已经可以流畅地运行μC/OS-II[1]。

μC/OS-II的移植版本很多,选择一个适合系统CPU的版本,然后进行正确的配置和优化是非常重要的。

1 系统实时性分析本系统工作原理是在恒定温度条件下,任意启动4个测试通道来进行多个项目的并行分析,每个测试通道的工作流程完全相同,如图1所示。

C8051F120集成了8路12位高速A/D转换器(ADC0)和8路8位高速A/D转换器(ADC2)。

系统要求对4个光学传感器输出进行采样,ADC0可以构成4个差分测试通道以满足需求。

系统还要求能对2路温度实现实时控制,用于监控2个外部温度传感器的输出电压:一个保证测试部分的温度恒定在37±0.2 ℃,通过对加热组件的PWM控制来完成;另一个用于监测机箱温度,在32 ℃以上时启动风扇散热,30 ℃以下关闭风扇。

嵌入式系统及应用-试题一

嵌入式系统及应用-试题一

嵌入式系统及应用-试题一学院姓名学号任课老师考场教室__________选课号/座位号密封线以内答题无效课程名称:_嵌入式系统开发_考试形式:闭卷考试日期:2022年月日考试时长:120分钟课程成绩构成:平时5%,期中10%,实验25%,期末60%本试卷试题由__5_部分构成,共__9___页。

题号得分得分一、判断题(共15分,共15题,每题1分,正确用“T”表示,错误用“F”表示)1.优先级位图法是通过牺牲空间赢得时间。

()2.EDF调度策略可用于调度周期性任务()3.在嵌入式操作系统中一般不使用虚拟存储技术,避免页面置换的开销所引起的不确定性。

()4.自陷、异常和中断基本上具有相同的中断服务程序结构。

()5.嵌入式多任务系统中,任务间的耦合程度越高,它们之间的通信越少。

()6.存储器映射编址是指I/O端口的地址与内存地址统一编址,即I/O单元与内存单元在同一地址空间。

其优点是可采用丰富的内存操作指令访问I/O单元、无需单独的I/O地址译码电路、无需专用的I/O指令。

()7.嵌入式系统中,优先级抢占调度可以在任意位置、任意时刻发生。

()8.当二值信号量用于任务之间同步时,其初始值为1。

()9.如果一个实时调度算法使得任务充分利用了CPU,则CPU的利用率为100%。

()10.RISC处理器常用高效流水线技术提高处理器的并行性。

()11.弱实时对系统响应时间有要求,但是如果系统响应时间不能满足,不会导致系统出现致命的错误或崩溃。

()12.循环轮询系统适合于慢速和非常快速的简单系统。

()13.单处理器多任务系统无需嵌入式操作系统的支持。

()14.任务控制块的内容在任务创建时进行初始化,在系统运行过程中不会发生变化。

()15.支持实时特性的DARTS设计方法也采用了面向对象技术。

()一二三四五合计第1页共7页学院姓名学号任课老师考场教室__________选课号/座位号密封线以内答题无效得分二、单项选择题(共20分,共10题,每题2分)1、以下描述中,哪一项不适用于前后台系统:()(A)是中断驱动系统的一种(B)后台是一个循环轮询系统一直在运行(C)前台由一些中断处理过程组成(D)具有多任务2、以下哪项不能降低嵌入式系统处理器的功耗()(A)降低工作电压;(B)提供不同的时钟频率;(C)关闭暂时不使用的功能块;(D)提升工作的时钟频率。

uCOS-II优先级任务调度在PowerPC上的移植和优化

uCOS-II优先级任务调度在PowerPC上的移植和优化

uCOS-II优先级任务调度在PowerPC上的移植和优化μC/OS是Jean brosse 开发的实时多任务内核,最初是为Motorola 8 位处理器68HC11 写的。

在后来的相关著作中,作者将代码移植到了PC 上,以便于更多的读者学习。

μC/OSII继承了μC/OS的算法,有执行效率高、占用空间小、实时性强和可扩展性好等特点,被移植到几乎所有类型的CPU 上,成为在嵌入式领域非常有影响力的RTOS。

然而,由于该实时内核是为8 位CPU设计的,对于那些具有优先级算法硬件指令的CPU,仅做移植是很不够的。

1基于优先级的任务调度一个基于优先级的实时多任务内核的任务调度机制需要实现下面三个核心的处理功能:◆将任务置于就绪态;◆将任务取消就绪态;◆找出最高优先级的就绪态任务。

在32 位机上运行64 个任务,可使用两个32 位的整型变量数组OSRdyTbl [2],建立一个64 位的任务就绪态向量;每一位表示对应优先级的任务是否处于就绪态,例如OSRdyTbl [0]的第4 位为1 表示优先级为4 的任务处于就绪态。

构造如下的三个函数,用来完成设置任务就绪、取消任务就绪和寻找当前最高优先级的就绪任务。

上述代码可在任何处理器上实现所需的功能,没有考虑任何的优化和改进。

通过这样的原理性函数,可以更好地理解多任务内核的任务调度。

寻找最高优先级就绪态任务的函数调用频率高,其执行时间直接影响内核的任务切换延迟时间,影响系统实时性。

上述寻找最高优先级的就绪态任务的代码,随当前就绪任务的优先级不同,其循环次数也不同,导致其运行时间不确定。

2 μC/OS的任务调度实现方法μC/OS和μC/OSII是为8 位CPU 写的,采用8 位机算法,支持64 个任务。

使用8 个字节的OSRdyTbl 全局数组,表示所有任务的就绪态信息:1 为任务就绪,0 为非就绪。

数组第一个字节的b0 位代表64 个任务中优先级最高的任务,最后一个字节的b7 位代表优先级最低的空闲任务,永远为1。

ucos多任务调度的基本原理

ucos多任务调度的基本原理

ucos多任务调度的基本原理题目:ucos多任务调度的基本原理引言:在嵌入式系统中,任务调度是一个重要而复杂的问题。

为了实现多任务的并发执行,实时操作系统(RTOS)ucos提供了一种成熟而高效的多任务调度方案。

本文将介绍ucos多任务调度的基本原理,包括任务管理、任务优先级、时间片轮转和中断处理等方面,以帮助读者更好地理解和应用ucos。

一、任务管理在ucos中,任务是系统中最基本的执行单位。

ucos的任务管理分为任务创建、任务删除和任务切换几个步骤。

1. 任务创建:ucos通过函数OSTaskCreate来创建任务。

该函数包括了任务的入口函数、任务的堆栈大小和任务的优先级等参数。

在任务创建过程中,ucos为任务分配堆栈空间,并把任务插入到任务就绪表中。

2. 任务删除:当任务完成了它的工作或者不再需要执行时,可以通过函数OSTaskDel来删除任务。

任务删除时,ucos会释放任务占用的资源,并将任务从任务就绪表中移除。

二、任务优先级ucos支持任务的优先级调度,即不同优先级的任务有不同的执行顺序。

优先级越高的任务会先于优先级较低的任务执行。

1. 任务优先级范围:ucos的任务优先级范围是0到ucos最大任务数减1(通常为256)。

优先级为0的任务为最高优先级任务,优先级为ucos 最大任务数减1的任务为最低优先级任务。

2. 任务的优先级设置:任务的优先级可以在任务创建的时候通过函数OSTaskCreate来设置,也可以在运行时通过函数OSTaskChangePrio来修改。

3. 任务的优先级比较和切换:ucos将优先级比较和任务切换过程放在了任务调度中,当有多个任务就绪时,ucos会选择优先级最高的任务执行。

任务调度过程是由ucos内核中的调度器负责的。

三、时间片轮转在ucos中,为了保证不同优先级任务的公平性和实时性,采用了时间片轮转的调度算法。

1. 时间片:时间片是指任务在一次调度中执行的时间。

基于多参数的μC/OS-Ⅱ任务优先级和调度方法

基于多参数的μC/OS-Ⅱ任务优先级和调度方法

中 蛋分类号; P9 T33
基于多参数的p / .T COS I任务优 先级和调度方法
周本海 ,王溪波 11乔建虑 ,沈国文 , 2
(.东北大学信息科学与工程 学院 ,沈阳 10 0 ;2 1 10 4 .沈 阳工业大学信息科 学与工程学院 ,沈阳 10 2 ) 10 3
摘 要 : t/SⅡ进行 实时任务调度时 ,可以使 用单一 的调度算法分配任 务优先级 。优先级判定标准的片面性 、“ 在 ̄ O 一 C 错过率”较高 的截止
[ bt c e er li e t k t shd l , C O —It e s o s g l r m t as nt r ryo ss B cueo e A s a t Wh n t a t ssa ce u d p / S I a su f i l a o t i ep o t f k . eas f r l h e —m a e e k e n e gi h os g h i i t a h t
调 速 率 算 法 ( t mo o nc M)】 r e n t i,R ,截 止 期 最 早 最 优 先 a— o (al s dal e fs D ) J eret edi i t F ,空闲 时 间最短 优 先( at i n r ,E 1s e s c rtL F和最早放行优先 ,价值最高优 先 ,价值密 l ki ,S ) a fs 】 度最大优先 等策略。
期,影响了 ̄ / S Ⅱ的实时调度性能 。 tO - C 该文提 出了多参数任务优先级分配策略和 ̄ / S Ⅱ t O . 任务 的调度方法 , C 实验证 明, 该方法截止期 的平
均错过率为 6 .%,有效地改善了p / - 01 COS Ⅱ的实时调度性能 。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

μC/OS优先级调度机制在PowerPC上的优化
技术分类:嵌入式系统 | 2010-12-03
单片机与嵌入式系统清华大学龚光华车惠军
μC/OS是Jean brosse开发的实时多任务内核,最初是为Motorola 8位处理器68HC11写的。

在后来的相关著作中,作者将代码移植到了PC上,以便于更多的读者学习。

μC/OSII继承了μC/OS的算法,有执行效率高、占用空间小、实时性强和可扩展性好等特点,被移植到几乎所有类型的CPU上,成为在嵌入式领域非常有影响力的RTOS。

然而,由于该实时内核是为8位CPU设计的,对于那些具有优先级算法硬件指令的CPU,仅做移植是很不够的。

1 基于优先级的任务调度
一个基于优先级的实时多任务内核的任务调度机制需要实现下面三个核心的处理功能:
◆将任务置于就绪态;
◆将任务取消就绪态;
◆找出最高优先级的就绪态任务。

在32位机上运行64个任务,可使用两个32位的整型变量数组OSRdyTbl [2],建立一个64位的任务就绪态向量;每一位表示对应优先级的任务是否处于就绪态,例如OSRdyTbl [0]的第4位为1表示优先级为4的任务处于就绪态。

构造如下的三个函数,用来完成设置任务就绪、取消任务就绪和寻找当前最高优先级的就绪任务。

点击看原图
上述代码可在任何处理器上实现所需的功能,没有考虑任何的优化和改进。

通过这样的原理性函数,可以更好地理解多任务内核的任务调度。

寻找最高优先级就绪态任务的函数调用频率高,其执行时间直接影响内核的任务切换延迟时间,影响系统实时性。

上述寻找最高优先级的就绪态任务的代码,随当前就绪任务的优先级不同,其循环次数也不同,导致其运行时间不确定。

2 μC/OS的任务调度实现方法
μC/OS和μC/OSII是为8位CPU写的,采用8位机算法,支持64个任务。

使用8个字节的OSRdyTbl全局数组,表示所有任务的就绪态信息:1为任务就绪,0为非就绪。

数组第一个字节的b0位代表64个任务中优先级最高的任务,最后一个字节的b7位代表优先级最低的空闲任务,永远为1。

当OSRdyTbl 数组的数据不为0时(表示对应的8个任务中至少有1个进入就绪态),另一个单字节全局变量OSRdyGrp 中的相应位要置1。

当任务状态发生变化时,需更新OSRdyGrp和OSRdyTbl中对应的位。

寻找最高优先级的就绪任务时,μC/OS使用了预先固化的256字节的对照表OSUnMapTbl,给出特定字节值的最低位1所在位的信息。

查表算法避免了逐位检测各优先级位引起的执行时间的不确定性,程序简单,执行速度快,与就绪任务多少和优先级无关。

对于取值0~63的任务优先级,μC/OS将其划分成高3位的Y和低3位的X,并保存在其任务控制块TCB的OSTCBX和OSTCBY中,其对应的OSUnMapTbl的值保存在OSTCBBitY和OSTCBBitX变量中,以提高运算速度。

为了避免函数调用所带来的额外开销,μC/OS直接用语句实现如下的三部分功能。

①设置任务进入就绪态
OSRdyGrp |= ptcb >OSTCBBitY;
OSRdyTbl[ptcb ﹥OSTCBY] |= ptcb >OSTCBBitX;
②设置任务退出就绪态。

y = OSTCBCur >OSTCBY;
OSRdyTbl[y] &= ~OSTCBCur >OSTCBBitX;
if (OSRdyTbl[y] == 0) {
OSRdyGrp &= ~OSTCBCur >OSTCBBitY;
}
③寻找最高优先级的就绪态任务。

以OSRdyGrp的值做偏移量,查OSUnMapTbl表,得到1个0到7的数Y,作为优先级高3位,再根据Y的值,找出OSRdyTbl中对应的字节,并且再次查OSUnMapTbl表,得到1个0到7的数X,作为优先级低3位的值,通过将Y左移3位再加上X的值,得到就绪任务中优先级最高的那个。

y = OSUnMapTbl[OSRdyGrp];
OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
μC/OS的任务调度算法采用了以空间换时间的策略,将特定字节值的最低位1所在位的信息预先计算并保存到表中,运行时通过查表快速得到;每个任务的TCB中除了保存优先级信息本身外,还使用额外的4个字节保存优先级的高低3位和对应的OSUnMapTbl值,以避免运行时实时计算这几个值所带来的延迟。

这些措施增加了系统ROM和RAM的开销。

3 利用PowerPC“数出前导零数目”指令实现任务调度
PowerPC是Motorola 、IBM和Apple三家公司于20世纪90年代初期联合设计的32位CPU。

Freescale(其前身是Motorola半导体部)发展了针对汽车电子的MPC5xx系列单片机及后续基于e200内核的MPC5xxx系列单片机;更高端的e500、e600内核是用于通信领域的MPC6xxx、7xxx和8xxx系列。

您现在的位置:首页 > 嵌入式系统 > 正文
μC/OS优先级调度机制在PowerPC上的优化
技术分类:嵌入式系统| 2010-12-03
单片机与嵌入式系统清华大学龚光华车惠军
下面对μC/OS任务优先级调度算法的改进和优化是在MPC5554单片机上实现的。

PowerPC处理器具有一条“数出前导零数目”的指令cntlzw(count leADIng zero word),可以以硬件指令方式实现优先级的多任务调度算法。

这条指令也可用于图像处理和算法加密的场合。

该指令数出一个32位寄存器中前置零的数目,例如,返回0表示b0不为零,即没有前导零;返回3表示b3不为零,b3位的前面从b0到b2共有3个零;返回32表示RS 寄存器中所有的位都为零。

(在PowerPC架构中,最高位MSB表示为b0,低位MSB根据位宽表示为b7、b15或b31。


利用这条指令,用汇编语言改写寻找最高优先级的就绪任务的函数,则不需要进行循环移位判断,可以直接从64个任务中找出优先级最高的那个任务。

代码如下:
点击看原图
在这段代码中,首先判断前32个任务是否有处于就绪态的,如果没有的话,再对后32个任务进行判断。

由于优先级最低的空闲任务总是处于就绪态,所以后32个任务总能返回一个有效值。

该代码在前32个任务有就绪态时运行7条指令,在前32个任务均没有就绪时需要执行10条指令;而μC/OS原有的代码编译出来的汇编程序,则需要运行15条指令。

使用这个方法的另一个好处是不再需要使用256字节的OSUnMapTbl表,任务控制块TCB也不需要使用OSTCBX、OSTCBY和OSTCBBitY、OSTCBBitX变量,每个ECB中也不再需要OSRdyGrp,这也减少了对ROM和RAM的占用。

4 改进扩展任务数的优先级调度性能
当对μC/OSII支持的任务数进行扩展时,按照μC/OSII原有的做法,需要按照高低字节分别查找OSUnMapTbl对照表。

任务数为256时,寻找最高优先级就绪任务的函数将需要运行约35条指令。

数出前导零数目的指令在这种情况下的作用将更加显著,对于32位PowerPC 处理器,精心设计的代码可以做到仅需10条指令就将任务数扩展到1024个。

此时OSRdyGrp扩展为32位,OSrdyTbl扩展成32个32位的数组。

从OSRdyGrp得到的前导零数目,就是任务优先级高5位的值,乘以4可以得到该字的相对偏移地址;在OSRdyTbl 中,定义高位对应高优先级任务,低位对应低优先级任务,则其前导零数目就是任务优先级低5位的值,和高5位的值移位相加就得到完整的任务优先级。

通过将OSRdyGrp和OSRdyTbl
定义成结构体,利用结构体首地址的相对寻址来分别读取其数值,可以减少一次取地址的操作。

寻找最高优先级就绪态的最终代码如下:
在64位的PowerPC 更有cntlzd(Count Leading Zero Double word)指令,一次就可以找出64个任务中优先级最高的那个,就更没有必要使用μC/OS II中的算法了。

5 总结
RTOS实时内核μC/OS和μC/OS II中,任务调度算法巧妙,性能优异,在嵌入式应用领域很有影响力,被移植到各种CPU上。

然而由于是为8位CPU设计的,对于那些具有优先级硬件算法指令的16/32/64位CPU,μC/OS II的软件算法就完全失去了优势。

应该利用这类CPU的特有指令,优化任务调度算法,使RTOS的实时性达到最佳。

对于这类处理器,仅移植μC/OS II软件算法是很不够的,应该利用相关硬件算法指令。

相关文档
最新文档