Cortex-M3的μC/OS-II任务调度硬件指令实现

发布者:紫色小猫最新更新时间:2012-09-07 来源: 单片机与嵌入式系统 关键字:Cortex-M3  μCOS-II  任务调度 手机看文章 扫描二维码
随时随地手机看文章

1 μC/OS-II的任务调度算法分析
1.1 μC/OS-II任务就绪表的解读
    μC/OS操作系统采用优先级至上的任务调度原则,让进入就绪态任务中优先级最高的那个任务,一进入就绪态就能立即运行。μC/OS操作系统实现了一种巧妙的查表算法,利用这种算法能快速实现任务调度原则。如何从任务就绪表中,查找优先级最高的那个任务?归结起来:
两个变量(OSrdyGrp、OSRdyTb1[])和两张表(OSMapTb1[]、OSUnMaTb1[])。
    μC/OS操作系统可支持64个任务,每个任务被赋予不同的优先级——从0级到最低优先级OS_LOWEST_PRIO,最末两个为操作系统所用,分别为统计任务和空闲任务的优先级。μC/OS-II任务就绪表如图1所示。判断任务就绪同样根据OSRdyTb1[]和OSRdyGrp两个变量来完成:OSR-dyTb1[]按任务优先级分成8组(即每一组8个任务优先级),当任务处于就绪状态时,对应的位为1,反之则为0;OSRdyTb1口组中任何一位为1时,对应的OSRdyGrp位置1。

a.jpg


    使任务进入就绪状态和脱离就绪状态,都是通过OSRdyTb1[]和OSRdyGrp这两个变量来查找OSMapTb1[]表完成的:
    ①进入就绪状态。
b.jpg
    任务优先级的低3位用于确定任务在总就绪表OSRdyTb1[]中的位置。紧接着前面的3位用于确定是OSRclyTb1[]数组的第几个元素,两个变量都置1。
    ②脱离就绪状态。
c.jpg
    代码将就绪任务表数组OSRdyTb1[]中相应元素的相应位清0,而只有当这一组中的所有任务都为脱离就绪态时,OSRdyGrp变量才会为0。[page]

1.2 高优先级任务的查找
    从任务就绪表中查找最高优先级任务,即从OSRdyTb1[]变量中找到最低为1的位是第几位(对应的就是最高优先级任务)。μC/OS-II采用查表的方式来找出处于就绪态的最高优先级任务,μC/OS-II中有一张256个单元的数据表OSUnMapTb1[],表中按一定规律有128个O,64个1,32个2,16个3,8个4,4个5,2个6,1个7,还有1个0,共256字节。OSUnMapTb1[]的定义如下所示:
d.jpg
    找出进入就绪态的最高优先级任务的代码如下:
e.jpg
f.jpg
     初看这张表感觉杂乱无章,实际是很有规律的。以“OSUnMapTb1[0]~OSUnMapTb1[15]:0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x00~0x0F*/”为例说明:
g.jpg
    其他依次类推。
    下面再以一个实例进行说明:假设变量OSRdyGrp=01011000B,表示变量OSRdyTb1[3]、OSRdyTb1[4]、OSRdyTb1[6]有任务处于就绪状态,任务调度是去查找最高优先级任务(y=OSUnMapTb1[0x58])。由于OSRdyTb1[3]>OSRdyTb1[4]>OSRdyTb1[6],结果y=3。如果OSRdyTb1[3]=1000 0001B,则通过查表x=OS-UnMapTb1[OSRdyTb1[3]],即可得到x=O,表明这组数中第0位为1处于最优状态。这样,prio=(y<<3)+x=(3<<3)+0=24。再利用这个优先级的值,查找任务控制块优先级表OSTCBPrioTb1[],得到指向任务的任务控制块OS_TCB。

2 Cortex-M3中μC/OS-II任务调度的硬件实现
    Cortex-M3采用精简指令集,采用Thumb-2指令,其中包括基于RTOS的硬件算法指令(CLZ),可以通过这种指令查找处于就绪态的最高优先级任务。μC/OS-II中任务的就绪态是反映在OSRdyTb1[]变量中,共计8字节(64位),对应64个任务。可以将其折分成两个32位的数据,然后分别查找这两个32位的数据中优先级最高的任务。先查找低32位,如果低32位中不为零,则找出其中最高优先级任务;否则查找高32位,找出其中最高优先级任务,高32位的的查找结果应加上数值32。
    Cotrex-M3中通过以下两条指令就可完成最高优先级任务的定位:RBIT和CLZ。RBIT的含义是把一个32位数据水平旋转180°;CLZ的含义是计算前导零的个数。[page]

    假设在OSRdyTb1[]的低32位数据中,00000000000000000000000000001100B表示优先级为2的任务和优先级为3的任务处于就绪态,现在要通过指令RBIT和CLZ找出优先级为2的任务并调度运行。运行RBIT后数据变为:00110000000000000000000000000000000000。运行CLZ后计算出前导零的个数为2,表明优先级为2的任务处于最高就绪态。
    μC/OS-II中的任务调度是通过查两次表完成最高优先级任务的查找,方法如下:
h.jpg
    上述代码在MDK4.12软件中测试,系统时钟采用8 MHz,按照此方法进行任务调度可节省0.5μs,同时还减少了用来存放OSUnMapTb1[]的256字节的空间,缩短了代码运行时间,提高了CPU的利用率。此方法在μC/OS-II的任务通信中也同样适用。在此不再赘述。

结语
    本文主要对μC/OS-II中的任务调度算法作了分析,特别阐述了OSUnMapTb1[]表是如何构成的,同时介绍了基于ARM Cortex-M3处理器平台的μC/OS-II的任务调度硬件实现方法,简化了μC/OS-II的代码,提高了处理器的性能。

关键字:Cortex-M3  μCOS-II  任务调度 引用地址:Cortex-M3的μC/OS-II任务调度硬件指令实现

上一篇:触控屏的控制电路制作小记(附STM32的驱动)
下一篇:基于Cortex-M3的SD卡图片浏览器

推荐阅读最新更新时间:2024-03-16 13:07

STM32 简单多任务调度
STM32的开发目前大多数还开处于“裸奔”的阶段,处于开发成本的考虑,可能还未嵌入任何的RTOS系统,由于没有操作系统的支持,因而不能方便的对多任务进行调度和管理,在main函数中你可能会写成如下方式: int main(void) { while (1) { Task1(); // 调用任务1 Task2(); // 调用任务2 } } 但简单这样写的话会存在一个问题,假如任务1是一个很紧急的任务,如AD采样任务,需要不断的去执行,而任务2是一个不太紧急的任务,只要保证一段时间执行一次就行(如控制LED灯闪烁,只需要每1s钟闪烁一次)
[单片机]
基于Cortex-M3的无线电表采集器的研制
1.引言 如今,随着信息化应用的发展,将无线通信技术、智能采集技术和自动控制技术综合应用于现代企业信息化管理,已成为一种趋势。 企业也迫切需要将各种有利于提高生产效率的信息因素收集汇总,用于分析与管理,而设备的消耗电能与运行时间正是十分重要的一种生产信息。本文所设计的电表采集器是生产采集系统的核心部件,通过电表上的通讯接口,实时地读取表中的数据,并通过无线网络将数据传送到服务器中。这使得企业能够及时准确地了解生产运行情况,在避免手工抄表中不及时和易出错情况的同时,也为合理利用资源及有效维护设备提供了丰富的数据支持。 2.采集系统的结构 近年来,电表的数字化程度越来越高,大多提供标准的通信总线结构,便于设计人员编程实
[电源管理]
基于<font color='red'>Cortex-M3</font>的无线电表采集器的研制
站稳32位元MCU市场 64位元蓄势待发
微控制器(MCU)的架构,从早期的4或8位元,演进到近期逐渐流行的16、32位元架构,并应用在各式各样的中高阶电子产品领域。然在行动装置追求更纤细的画质与更高执行效能之下,业界纷纷推出更先进的制程与处理器架构来因应,尤在苹果iPhone 5s率先搭载64位元处理器抢占世人目光之后,更加速行动处理器市场迈向下世代64位元的趋势,期与桌上型计算机处理器架构分庭抗礼,为下世代先进架构的处理器市场布局… 8位元应用广泛 32位元已成主流 MCU(微控制器)的产品种类繁多,从汇流排架构来区分,可以分成早期4或8位元,中期16位元,以及如今最广泛的32位元架构。在8位元架构部分,就有多达20几家MCU厂商,提供各种微架构(例如
[嵌入式]
站稳32位元MCU市场 64位元蓄势待发
一种基于比特表的实时多任务调度算法
摘要:主要讨论常见的几种多任务实时性处理算法的优缺点,提出一种更能满足多任务实时性处理的算法——基于比特表的时间片算法。这种算法主要是把常规的比特表中的任务按照时间片进行分配,以很好地完成实时性要求高且任务时间较长的任务,而不影响其它实时性要求更高的任务的完成。 关键词:比特表 时间片 实时处理 引言 在微机控制领域中,许多单片机应用系统是实时控制系统RTCS(Real Time Control System)。在实时控制系统中,为了很好地完成外界信息的实时测量、计算和相应的多种实时控制操作,必须达到两个设计目标;实时性和并行性。即既要保证系统对外界信息以足够快的速度进行相应处理,又要同时完成多种任务操作。在这里,多种任务
[应用]
ARM Cortex-M3 微处理器测试方法研究与实现
0 引言 随着半导体技术的发展,集成电路制程工艺从深亚微米发展到纳米级,晶体管集成度的大幅提高使得芯片复杂度增加,单个芯片的功能越来越强。二十世纪90 年代ARM 公司成立于英国剑桥,主要出售芯片设计技术的授权。采用ARM 技术知识产权( IP 核)的微处理器,即ARM 微处理器,已遍及工业控制。消费类电子产 品。通信系统。网络系统。无线系统等各类产品市场,基于ARM 技术的微处理器应用约占据了32 位RISC 微处理器七成以上的市场份额。ARM 芯片的广泛应用和发展也给测试带来了挑战,集成电路测试一般采用实际速度下的功能测试,但半导体技术的发展使得测试开发工程资源按几何规律增长,自动测试 设备(ATE)的性能赶不上日益增加的
[单片机]
ARM <font color='red'>Cortex-M3</font> 微处理器测试方法研究与实现
μC/OS的任务调度实现方法及其在PowerPC上的优化
  μC/OS是Jean J.Labrosse开发的实时多任务内核,最初是为Motorola 8位处理器68HC11写的。在后来的相关著作中,作者将代码移植到了PC上,以便于更多的读者学习。μC/OSII继承了μC/OS的算法,有执行效率高、占用空间小、实时性强和可扩展性好等特点,被移植到几乎所有类型的CPU上,成为在嵌入式领域非常有影响力的RTOS。然而,由于该实时内核是为8位CPU设计的,对于那些具有优先级算法硬件指令的CPU,仅做移植是很不够的。    1 基于优先级的任务调度   一个基于优先级的实时多任务内核的任务调度机制需要实现下面三个核心的处理功能:   ◆ 将任务置于就绪态;   ◆ 将任务取消就绪态;
[嵌入式]
采用ARM Cortex-M3单片机和DSP的逆变电源设计
     引 言   在电气智能化发展无处不在的今天, 无数用电场合离不开逆变电源系统( Inverted Pow er Supply System,IPS) 为现场设备提供稳定的高质量电源, 特别在如通信机房、服务器工作站、交通枢纽调度中心、医院、电力、工矿企业等对电源保障有苛刻要求的场合。许多IPS产品因遵循传统设计而不符合或落后于现代电源理念,突出表现为控制模块的单一复杂化, 控制器芯片落后且控制任务繁重, 模拟闭环控制而得不到理想的监控和反馈调节效果,并由此带来单个控制设备软硬件设计上的隐患, 这对IPS 电源输出造成不利影响, 甚至对用电设备因为供电故障而导致灾难性后果。数字化控制技术日趋成熟,而且在某些领先理念的电源
[嵌入式]
ARM Cortex-M3 学习笔记(5)
最近在学ARM Cortex-M3,找了本号称很经典的书 An Definitive Guide to The ARM Cortex-M3 在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。 第五章 存储器系统 地址空间分配 对比更早版本的ARM内核,Cortex-M3的地址空间分配相对来说是固定的。尤其是内部的私有外设,地址分配是固定不变的。这为软件移植提供很大的方便。 图 1 Cortex-M3 地址空间分配 片内SRAM地址空间和片内外设地址空间中各有1MB是所谓的位带区。这个区数据可以按位访问。外部SRAM和外部外设地址空间中没有位带区。 RAM地址空间与外设地址空间最大的区别
[单片机]
ARM <font color='red'>Cortex-M3</font> 学习笔记(5)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved