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

发布者:limm20032003最新更新时间:2013-11-01 来源: 21ic关键字:μCOS-II  任务调度  硬件指令 手机看文章 扫描二维码
随时随地手机看文章
μC/OS-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。

图1 μC/OS-II任务就绪表

  使任务进入就绪状态和脱离就绪状态,都是通过OSRdyTb1[]和OSRdyGrp这两个变量来查找OSMapTb1[]表完成的:

①进入就绪状态。

任务优先级的低3位用于确定任务在总就绪表OSRdyTb1[]中的位置。紧接着前面的3位用于确定是OSRclyTb1[]数组的第几个元素,两个变量都置1。

②脱离就绪状态。

代码将就绪任务表数组OSRdyTb1[]中相应元素的相应位清0,而只有当这一组中的所有任务都为脱离就绪态时,OSRdyGrp变量才会为0。

        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[]的定义如下所示:
[page]
找出进入就绪态的最高优先级任务的代码如下:

初看这张表感觉杂乱无章,实际是很有规律的。以“OSUnMapTb1[0]~OSUnMapTb1[15]:0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,/*0x00~0x0F*/”为例说明:

其他依次类推。

下面再以一个实例进行说明:假设变量OSRdyGrp=01011000B,表示变量OSRdyTb1[3]、OSRdyTb1[4]、OSRdyTb1[6]有任务处于就绪状态,任务调度是去查找最高优先级任务(y=OSUnMapTb1[0x58])。由于SRdyTb1[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的含义是计算前导零的个数。

假设在OSRdyTb1[]的低32位数据中,00000000000000000000000000001100B表示优先级为2的任务和优先级为3的任务处于就绪态,现在要通过指令RBIT和CLZ找出优先级为2的任务并调度运行。运行RBIT后数据变为:
00110000000000000000000000000000000000。运行CLZ后计算出前导零的个数为2,表明优先级为2的任务处于最高就绪态。

μC/OS-II中的任务调度是通过查两次表完成最高优先级任务的查找,方法如下:

上述代码在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的代码,提高了处理器的性能。

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

上一篇:基于嵌入式Linux的自助点菜终端设计
下一篇:一种ARM控制的逆变器的设计方案

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

记录仪实时多任务调度策略的研究
实时多任务系统应用极其广泛,几乎渗透到各行各业,系统分类也很复杂。虽然不同的应用在实现模式上不完全一样,但核心思想是一致的。在嵌入式系统中,实时多任务机制是依靠启动之后运行的一段后台任务管理程序实现的。应用程序运行在该管理器程序之上。后台根据各个任务的要求,进行资源管理、消息管理、任务调度、异常处理等工作。其首要目的是调度一切可利用的资源实现实时控制任务。 实时系统主要有两大类:软实时系统和硬实时系统。软实时系统的宗旨是使各个任务运行的越快越好,并不要求限定某一任务必须在多长时间内完成。在硬实时系统中,各任务不仅要执行无误而且要做到准时。大多数实时系统都是二者的结合。对于一个复杂任务系统,任务调度模式的选用是其系统架构的一个重点。无
[单片机]
记录仪实时多<font color='red'>任务</font><font color='red'>调度</font>策略的研究
μC/OS优先级调度机制在PowerPC上的优化
  μC/OS是Jean J.Labrosse开发的实时多任务内核,最初是为Motorola 8位处理器68HC11写的。在后来的相关著作中,作者将代码移植到了PC上,以便于更多的读者学习。μC/OSII继承了μC/OS的算法,有执行效率高、占用空间小、实时性强和可扩展性好等特点,被移植到几乎所有类型的CPU上,成为在嵌入式领域非常有影响力的RTOS。然而,由于该实时内核是为8位CPU设计的,对于那些具有优先级算法硬件指令的CPU,仅做移植是很不够的。    1  基于优先级的任务调度   一个基于优先级的实时多任务内核的任务调度机制需要实现下面三个核心的处理功能:   ◆ 将任务置于就绪态;   ◆ 将任务取消就
[嵌入式]
uC/OS-II的任务切换机理及中断调度优化
摘要:μC/OS-II是一种适用于嵌入式系统的抢占式实时多任务操作系统,开放源代码,便于学习和使用。介绍μC/OS-II在任务级和中断级的任务切换原理,以及这一操作系统基于嵌入式系统的对于中断的处理;相对于内存资源较少的单片机,着重讨论一种优化的实用堆栈格式和切换形式,以提高资源的利用率;结合MSP430单片机,做具体的分析。 关键词:实时多任务操作系统 μC/OS MSP430 中断 堆栈 引 言   在嵌入式操作系统领域,由Jean J. Labrosse开发的μC/OS,由于开放源代码和强大而稳定的功能,曾经一度在嵌入式系统领域引起强烈反响。而其本人也早已成为了嵌入式系统会议(美国)的顾问委员会的成员。   不管是对
[应用]
基于ARM芯片LPC2214和μCOS-II的家庭智能终端设计实现
  智能家居是指利用先进的计算机技术、网络通信技术、综合布线技术,将与家居生活有关的名种子系统有机地结合,通过统筹管理,使家居生活更加舒适、安全、有效。作为小区智能化的重要组成部分,智能家居平台是通过其核心——家庭智能终端实现家居智能化。智能家居终端可实现系统信息的采集、信息输入、逻辑处理、信息输出、联动控制等功能。早期的家庭智能终端网络是基于电话网实现远程监控和远程控制。由于电话网络的带宽限制以及较高的使用成本,使得家庭智能终端无法推广。随着计算机技术和通信技术的发展,基于IP技术的远程通信已经成为家庭智能终端开发的重点。目前,基于8位单片机和TCP/IP协议的远程通信设备已大量出现。但是由于8位单片机工作频率和存储量的限制,使
[单片机]
基于ARM芯片LPC2214和μ<font color='red'>COS-II</font>的家庭智能终端设计实现
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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