在μC/OS—II上实现动态电压调节技术

最新更新时间:2009-05-13来源: 单片机与嵌入式系统应用关键字:DVS  移植 手机看文章 扫描二维码
随时随地手机看文章

  引 言

  现代社会中,便携式系统(如手机和个人媒体播放器)正在演变成综合性多媒体和通信系统。新的应用程序,如游戏、数字电视、高速Internet,已经成为终端用户产品中的一项普通功能。然而,复杂的功能需要功能强大的处理器,如智能手机中已集成了模拟基带、数字基带、图像处理器和CPU等多个分处理器,但这些分处理器并不是任何时刻都是满负载运转的,它们在很多时候都处于闲置状态。因此,对于依靠电池供电的便携式设备,如何根据系统的工作状态调整各个处理器的功耗水平从而节省电能便成了一个普遍关注的问题。

  μC/OS—II作为一个源码公开的嵌入式实时操作系统,可以支持64个任务,同时支持信号量、消息队列、邮箱等多种常用的进程间通信方式。该操作系统用ANSI C语言书写,程序可读性强,移植性好,可裁减,并已在通信、电子、自动化等领域的嵌入式设备中获得了广泛的应用,但是它的内核并不支持DVS(Dynamic Voltage Scaling)管理。本文在遵循可移植、可裁减的前提下,对其进行了改进,使其可以支持动态的离散电压管理,保证μC/OS—II在新要求下的应用,使嵌入式设备的电量能够得到充分的使用。

  1 DVS在μC/OS—II上应用的理论基础

  1.1 DVS应用的硬件基础

  动态电压调节技术(DVS)是这样一种技术:在保证系统任务完成的情况下,使处理器运行在尽可能低的电压上。它的基本思想是,当系统需要完成大量计算任务时,提高处理器的电压以增加其处理速度;而当系统任务较少或处于空闲状态时,降低处理器的电压,这样既可以保证系统任务的按时完成,同时又可降低处理器的能量消耗。该节能技术的理论依据来自于对处理器功耗的定义:

  其中:E为处理器的功耗,V为处理器的电压,fclk为处理器的频率,lLcak为漏电流;α和C为常数,分别表示门电路的电能转换效率和门电路在整个设备中所占的比例;tTask表示系统中任务的个数。根据式(1)可知,通过降低处理器的电压和频率,可以减少处理器对电能的消耗。由于在实际应用中,程序能够直接控制的是处理器的频率,处理器的电压会根据处理器频率的变化自动变化。一般来说,处理器的电压会随着频率的降低而降低,因此,动态电压技术实际上是对频率的调整。本文中如不作特别声明,调整频率即意味调整电压。

  1. 2 DVS应用的软件基础

  由于μC/OS—II是一个基于优先级的抢占式任务调度内核,为了保证低优先级任务能够得到处理器的执行,本文假定系统中用户定义的所有任务都遵循如下的结构:

  假设系统里有两个任务:一个任务的执行时间为0.5 s,周期为10 s;另一个任务的执行时间为1 s,周期为5 s。这两个任务的调度过程如图l所示,这时系统中存在大量的松弛时间。

  如果在程序运行过程中降低处理器的频率,处理器的运行电压也会因此变低。当处理器的频率变化为最高频率的1/4时,其任务调度过程如图2所示。

  由图2可以知道,当处理器的频率变化为正常的1/4时,系统任务仍然可以正常运行。这时,处理器的电压下降了,根据式(1),处理器的功耗也降低了。

  从上面的分析可以看出,正是由于μC/OS—II采用了基于优先级抢占的调度策略,每个任务执行一段时间之后,都会主动放弃CPU的使用,从而使低优先级的任务能够得到执行。同时,由于任务放弃CPU进行延时操作,任务间会因此而产生松弛时间,而DVS功能就是利用这段松弛时问,降低处理器的执行速度而完成任务的。本文研究的重点就是改进μC/OS—II,使它能够根据系统中任务运行产生的松弛时间的情况,自动设置处理器的频率,降低电压,从而降低处理器的功耗。

  2 DVS系统模型

  2.1 DVS任务调度模型

  由1.2可知,当系统中任务之间存在松弛时间的时候,降低处理器的频率可以缩短任务之间的松弛时间,同时由于频率下降导致电压下降,进而可以减少处理器的能量开销。然而,什么时候进行DVS的调度,处理器最低运行在哪个频率上都需要进一步分析,为此,需要了解每个任务的相关信息。本文用一个五元组表示一个任务,τi=(Si,PTi,ETi,LETi,NPTi)。其中,Si表示第i个任务的状态,是就绪还是阻塞;PTi表示第i个任务的执行周期;ETi表示第i个任务的执行时间,LETi表示第i个任务在当前周期内完成剩余指令所需要的时间;NPTi表示第i个任务距离下一个周期任务所需的时间。

  根据上述定义,系统处理器的利用率Uτ可以表示为:

  当且仅当Uτ<1时任务集可调度,任务间存在松弛时间。这是启用DVS功能的前提。

  2.2 判断是否需要进行DVS调度

  为了计算松弛时间存在时处理器最低可以运行在哪个频率上,引入“变压因子”这个概念。假设DVS模块被调用时所有就绪任务需要的执行时间为TAllReady,距离下一个等待任务恢复的时间为TleastWaiting,那么定义变压因子FlexibleRatio为:

  当FlexibleRatio>1时,表示当前就绪的任务可以在下一个任务从等待中恢复之前执行完毕,这时可以适当降低CPU的电压和频率,减慢任务的执行速度;当FlexibleRatio<1时,表示当前就绪的任务在下一个任务恢复之前都不能执行完毕,所以这个时候可以提高CPU的电压和频率,使当前就绪的任务尽快执行完毕,从而使下一个恢复的任务可以得到尽快的执行;当FlexibleRatio=1时,不需要调整电压和频率。

  2.3 计算可运行的最低频率

  处理器的频率厂是和完成任务需要的时间T成正比的。它们之间遵循如下关系:

  假设当前处理器的运行频率为fcur,完成已经就绪任务需要的时间为Tcur,使任务集可调度的最低频率为fnew,以及在新的频率下完成就绪任务的时间为Tnew,则它们有如下关系:

  即在某一时刻,满足系统任务可调度的情况下,处理器频率最低可以运行在FlexibleRatio·fcur。

  3 DVS在μC/OS—II上的详细实现

  3.1 DVS在μC/OS—II上实现的整体结构

  根据第2节的分析,一个完整的DVS模块应包括两大部分:一部分是更新DVS任务控制信息,另外一部分是可调度的最低频率的计算。其中,第二个部分又可以分为两个层次,即最低频率的计算和频率的硬件设置部分,这样分层之后有助于改进后μC/OS—II的移植。DVS功能在μC/0S—II的实现总体结构如图3所示,下面详细描述各个部分的实现过程。

[page]

  3.2 更新DVS任务控制信息

  为了让系统知道每个任务的详细情况,实现过程中建立如下结构体保存任务的信息:

  该结构体作为任务控制块的一部分,在任务创建时,将μC/OS—II自身预留的任务扩展指针OSTCBExtPtr指向该结构体。这些信息必须在每一个时钟节拍之后都有变化,因此它们必须在每一个时钟节拍进行更新。更新这部分信息的代码被放在OSTimeTickHook()函数中。

  3.3 计算可运行的最低电压和频率

  计算可运行的最低电压和频率的算法是DVS功能的核心部分。算法的基本思想是,将所有任务产生的松弛时间给当前任务使用,使当前就绪的任务集以尽量低的电压和频率运行。系统最开始运行在最高频率和电压下。该算法的伪代码如下:

  //变量leastNxtSusTime表示距离最近一个任务就绪的时间

  //变量readyTaskRequireTime表示就绪任务共需要的执行时间获取任务TCB;

  根据FlexibleRatio设置处理器的频率

  由于系统并不是时刻都需要动态地去改变处理器的频率和电压,当且仅当系统中任务的就绪队列发生变化的时候才需要重新计算处理器的频率和电压。因此,这部分代码需要在任务的切换过程中和中断返回时执行。在本实验中,这部分代码写在μC/OS—II扩展文件os_cpu_c.c中的OSTaskSwHook()函数中,同时在OSIntCtxSw()中也用了这个函数。

  3.4 设置处理器的频率和电压

  由于设置处理器的频率和电压是与操作系统所运行的硬件平台相关的,不同的处理器设置处理器频率和电压的方法不尽相同,所以本实验在改进μC/OS—II的时候并没有将这部分代码写入内核,而是提供了扩展接口setCPUAtSpecifledVolAndFreq(voltage,frequency)供移植时使用。该函数用于设置处理器的电压和频率为指定的电压和频率。其中,参数voltage和frequency分别表示电压和频率。

  3.5 快速查询频率和电压

  因为目前大多数的处理器并不支持连续地设置处理器的频率,它们仅支持离散地设置处理器的频率,所以按照公式(8)计算出来的频率处理器可能并不支持。本实验在实现过程引入了频率查询表快速查询高于计算结果的,且处理器支持的最低频率。它的结构如下:

  根据计算出的FlexibleRatio,即可直接在查询表中查询到相应的频率值;但是计算出的FlexibleRatio多为小数,故在实际应用时常将该表设计得比实际大10倍。查询的时候先将FlexibleRatio乘以10后取整,然后再查表。

  3.6 可裁减设计

  为保持与μC/0S—II本身可裁减特性的一致,新加入的DVS功能可以在os_cfg.h中通过宏定义变量0S_PM_DVS_EN来启用和关闭。OS_PM_DVS_EN为1表示开启DVS功能,为O表示关闭。

  4 测试实验

  改进后的μC/0S—II使用ARM Develop Suit V1.2编译后,在华邦的W90P710开发板上测试运行。W90P710开发板支持4个等级的频率调整。有关μC/OS-II在这块板子上的移植请查阅参考文献。

  采用功率计HIOK13332测量改进前后μC/OS—II在板子上运行时的功耗。本测试案例创建了两个任务。这两个任务的属性如表1所列。

  实验结果表明,使用DVS功能与不使用DVS功能相比,调节处理器的功耗下降41%。

  5 结 论

  本文的创新之处在于提出了一个DVS的实现模型,并在保持μC/OS—II原有的基于抢占的静态优先级调度基础上,在遵循可裁减、可移植的前提下,在其内核中加入了支持动态电压管理的代码配置和函数接口。经测试,改进后的μC/OS—II可以在W90P710上顺利运行。虽然本实验是针对离散的频率和电压进行的,但改进的μC/0S—II仍然可以支持连续电压和频率下的动态管理。通过以上改进,μC/0S—II在实际应用中可以节省更多的能耗,设备的使用时间会更加长久。

关键字:DVS  移植 编辑:金海 引用地址:在μC/OS—II上实现动态电压调节技术

上一篇:安森美推出业界首款集成型双向保护器件
下一篇:ADI新推两款内置隔离电源转换器的收发器

推荐阅读最新更新时间:2023-10-18 14:46

python移植到arm平台
1. 交叉编译Python   见 Cross Compiling Python for Embedded Linux CC=arm-linux-gcc CXX=arm-linux-g++ AR=arm-linux-ar RANLIB=arm-linux-ranlib ./configure --host=arm-linux --build=x86_64-linux-gnu --prefix=/root/tftpboot/Python-2.7.3 make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED= arm-linux-gcc -sh
[单片机]
Linux2.6内核2410平台上的移植
一、准备必要的文件 1.首先去官方网站下载最新的llinux内核 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 2.因为linux2.6.14内核需要更新版本的编译器,所以需要下载交叉编译器 ftp://ftp.handhelds.org/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2 二、安装文件 1、把gcc解压到/usr/local/arm/3.4.1目录下 2、接下来需要解压linux内核,输入命令: # tar -jxvf linux-2.6.14.tar.bz2 将内核解压
[单片机]
在MOTOROLAA68K系列MCU上移植μC/OS-II
以下介绍如何将μC/OS-II移植到MOTOROLA MC68K系列CPU上。 一、MC68K CPU简介 MC68K及68020、68040等的著名的MOTOROLA32位微处理器,和与之兼容的68K、CPU32、CPU32+等CPU扩充定时处理单元TPU、队列串行模块QSM、系统控制模块和RAM等组成MC683xx系列单片机。 CPU32内部有8个32位通用数据寄存器,8个32位通用地址寄存器。8个通用数据寄存器可作为累加器使用,也可看成C语言中各种类型的变量;8个通用地址寄存器,可作为变址寄存器使用,也可看成C语言中的指针型变量。CPU32有独立的用户堆栈指针和系统堆栈指针,可区分程序区、数据区、系统
[嵌入式]
PPCBoot在MPC8250上的移植方法
1 引言 Boodoader(引导加载程序)是CPU复位后和进入操作系统之前执行的一段代码,主要用于完成由硬件启动到操作系统启动的过渡,为操作系统提供基本的运行环境,如初始化CPU、堆栈、存储器系统等。Bootloader代码与 CPU的内核结构、具体型号等因素有关,其功能类似于通用PC的BOIS程序。除了依赖CPU的体系结构外,Bootloader实际上还依赖于具体的嵌入式板级设备的配置。也就是说,对于二块不同的嵌入式板,即使它们使用相同的CPU构建,要想让运行在其中一块板上的Bootloader程序也能运行在另一块板上,通常也都需要修改Boofloader的源程序。因此,在嵌入式系统的开发中不可能有通用的Bootload
[单片机]
PPCBoot在MPC8250上的<font color='red'>移植</font>方法
第十三章、Tiny4412 U-BOOT移植十三 DDR3初始化源码分析
第一步、设置时钟 按上一章中步骤来说明: 1. DMC must assert and hold CKE to a logic lowlevel to provide stable power for memory device and then apply stable clock. 设置DMC,由于时钟已经在clock_init_mytiny4412.S中进行了设置,这里可以不用再做设置了。只要保持CKE为低电平。 第二步、设置Phycontrol_n寄存器 2. Set the PhyControl0.ctrl_start_point andPhyControl0.ctrl_inc bit-fields to a cor
[单片机]
第十三章、Tiny4412 U-BOOT<font color='red'>移植</font>十三 DDR3初始化源码分析
大脑芯片有望移植记忆
    美国国防部先进研究项目局(DARPA)目前正在开发一种新型的人脑芯片。据悉,这款芯片能够移植人脑记忆以及删除人脑中的某些特定记忆。这是一项令人感到兴奋的研究项目,因为对于我们大部分人来说,这种科技仅存在于科幻小说中。 想象一下,我们可以通过使用一种激光、药物和微芯片来对某个人大脑进行编程,从而创建一种虚拟的记忆。这种特殊的技术目前已经在老鼠身上进行了试验。从实验效果来看,似乎这种技术的研发进程正朝正确的方向发展。 DARPA大脑芯片工作原因很简单:首先备份某个人大脑已存储的数据,当这个人大脑受到损害,植入芯片就可以将已备份的数据传输至大脑,使其恢复记忆。目前,DARPA正在寻求与其他公司的合作,其中就包括Medtroni
[手机便携]
STM32F4 开发笔记7:定时器驱动程序的移植
本文讲述移植STM32CubeMX生成的驱动程序到自己的项目中,以定时器为例。为什么要写这篇文章呢?是因为定时器移植这件事情耗费了我整整2天的时间,只因为一个特殊的地方没有注意到。把整个移植过程用文字记录下来,以利于自身其它程序的移植,并对本文的读者提供一些技术上的参考。 1、如果仅完成计时功能,在STM32CubeMX中设置比较简单,如下图所示,只需指定其时钟源即可。 2、对时钟进行进一步设置,这个在先前的日志中已经描述过,将分频系数与MCU的主频系数设置成一致,例如我现在MCU的主频是72M,则进行72分频即可,这样单位计数周期是1us,按照下图所示,我在Counter Period中设置为1000,则定时器
[单片机]
实时操作系统μC/OS-II在MCF5272上的移植
摘要:介绍了实时操作系统μC/OS-II的特点和内核结构,并首次实现μC/OS-II在Motorola嵌入式处理器MCF5272上的移值。 关键词:μC/OS-II MCF5272 移植 GNU工具链 作为一个实时内核,μC/OS从1992年开始为人们熟悉,到现在已经发展为μC/OS-II。ΜC/OS-II最多支持56个任务,其内核为占先式,总是执行就绪态的优先级最高的任务,并支持Semaphore(信号量)、Mailbox(邮箱)、Message Queue(消息队列)等多种常用的进程间通信机制。与大多商用RTOS不同的是,μC/OS-II公开所有的源代码,并可以免费获得,对商业应用收取少量License费用。一般商用操作系
[应用]
小广播
最新电源管理文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved