完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
引言
现代社会中,便携式系统(如手机和个人媒体播放器)正在演变成综合性多媒体和通信系统。新的应用程序,如游戏、数字电视、高速Internet,已经成为终端用户产品中的一项普通功能。然而,复杂的功能需要功能强大的处理器,如智能手机中已集成了模拟基带、数字基带、图像处理器和CPU等多个分处理器,但这些分处理器并不是任何时刻都是满负载运转的,它们在很多时候都处于闲置状态。因此,对于依靠电池供电的便携式设备,如何根据系统的工作状态调整各个处理器的功耗水平从而节省电能便成了一个普遍关注的问题。 μC/OS—Ⅱ作为一个源码公开的嵌入式实时操作系统,可以支持64个任务,同时支持信号量、消息队列、邮箱等多种常用的进程间通信方式。该操作系统用ANSI C语言书写,程序可读性强,移植性好,可裁减,并已在通信、电子、自动化等领域的嵌入式设备中获得了广泛的应用,但是它的内核并不支持DVS(Dynamic Voltage Scaling)管理。本文在遵循可移植、可裁减的前提下,对其进行了改进,使其可以支持动态的离散电压管理,保证μC/0S—Ⅱ在新要求下的应用,使嵌入式设备的电量能够得到充分的使用。 |
|
相关推荐
5个回答
|
|
|
|
|
|
2DVS系统模型
2.1DVS任务调度模型 由1.2可知,当系统中任务之间存在松弛时间的时候,降低处理器的频率可以缩短任务之间的松弛时间,同时由于频率下降导致电压下降,进而可以减少处理器的能量开销。然而,什么时候进行DVS的调度,处理器最低运行在哪个频率上都需要进一步分析,为此,需要了解每个任务的相关信息。本文用一个五元组表示一个任务[3.6],ti=(Si,PTi,ETi,LETi,NPTi)。其中,Si表示第i个任务的状态,是就绪还是阻塞;PTi表示第i个任务的执行周期;ETi表示第i个任务的执行时间,LETi表示第i个任务在当前周期内完成剩余指令所需要的时间;NPTi表示第i个任务距离下一个周期任务所需的时间。 根据上述定义,系统处理器的利用率Ur可以表示为: 当且仅当Ui<1时任务集可调度,任务间存在松弛时间。这是启用DVS功能的前提。 2.2判断是否需要进行DVS调度 为了计算松弛时间存在时处理器最低可以运行在哪个频率上,引入“变压因子”这个概念。假设DVS模块被调用时所有就绪任务需要的执行时间为T。。。。距离下一个等待任务恢复的时间为T。。。。,那么定义变压因子F1exibleRatio为: 当FlexibleRatio>1时,表示当前就绪的任务可以在下一个任务从等待中恢复之前执行完毕,这时可以适当降低CPU的电压和频率,减慢任务的执行速度;当Flexi-bleRatio<1时,表示当前就绪的任务在下一个任务恢复之前都不能执行完毕,所以这个时候可以提高CPU的电压和频率,使当前就绪的任务尽快执行完毕,从而使下一个恢复的任务可以得到尽快的执行;当FlexibleRatio=1时,不需要调整电压和频率。 2.3计算可运行的最低频率 处理器的频率f是和完成任务需要的时间T成正比的。它们之间遵循如下关系: 假设当前处理器的运行频率为,c。完成已经就绪任务需要的时间为■。使任务集可调度的最低频率为_厂n。以及在新的频率下完成就绪任务的时间为T…,则它们有如下关系: 即在某一时刻,满足系统任务可调度的情况下,处理器频率最低可以运行在FlexibleRatio·fcur |
|
|
|
3DVS在μC/OS—Ⅱ上的详细实现
3.1DVS在μC/OS—Ⅱ上实现的整体结构 根据第2节的分析,一个完整的DVS模块应包括两大部分:一部分是更新DVS任务控制信息,另外一部分是可调度的最低频率的计算。其中,第二个部分又可以分为两个层次,即最低频率的计算和频率的硬件设置部分,这样分层之后有助于改进后μC/oS—Ⅱ的移植。DVS功能在μC/OS—Ⅱ的实现总体结构如图3所示,下面详细描述各个部分的实现过程。 3.2更新DVS任务控制信息 为了让系统知道每个任务的详细情况,实现过程中建立如下结构体保存任务的信息: 该结构体作为任务控制块的一部分,在任务创建时,将μC/OS—Ⅱ自身预留的任务扩展指针OSTCBExtPtr指向该结构体。这些信息必须在每一个时钟节拍之后都有变化,因此它们必须在每一个时钟节拍进行更新。更新这部分信息的代码被放在OSTimeTickHtook()函数中。 3.3计算可运行的最低电压和频率 计算可运行的最低电压和频率的算法是DVs功能的核心部分。算法的基本思想是,将所有任务产生的松弛时间给当前任务使用,使当前就绪的任务集以尽量低的电压和频率运行。系统最开始运行在最高频率和电压下。该算法的伪代码如下: 根据FlexibleRatio设置处理器的频率 由于系统并不是时刻都需要动态地去改变处理器的频率和电压,当且仅当系统中任务的就绪队列发生变化的时候才需要重新计算处理器的频率和电压。因此,这部分代码需要在任务的切换过程中和中断返回时执行。在本实验中,这部分代码写在μC/OS—Ⅱ扩展文件Os_cpu_c.c中的OSTaskSwHook()函数中,同时在OSIntCtxSw()中也用了这个函数。 3.4设置处理器的频率和电压 由于设置处理器的频率和电压是与操作系统所运行的硬件平台相关的,不同的处理器设置处理器频率和电压的方法不尽相同,所以本实验在改进μC/OS—Ⅱ的时候并没有将这部分代码写入内核,而是提供了扩展接口setCPUAtSpecifiedVolAndFreq(voltage,frequency)供移植时使用。该函数用于设置处理器的电压和频率为指定的电压和频率。其中,参数voltage和freqtlency分别表示电压和频率。 3.5快速查询频率和电压 因为目前大多数的处理器并不支持连续地设置处理器的频率,它们仅支持离散地设置处理器的频率,所以按照公式(8)计算出来的频率处理器可能并不支持。本实验在实现过程引入了频率查询表快速查询高于计算结果的,且处理器支持的最低频率。它的结构如下: 根据计算出的FlexibleRatio,即可直接在查询表中查询到相应的频率值;但是计算出的FlexibleRatio多为小数,故在实际应用时常将该表设计得比实际大10倍。查询的时候先将FlexibleRatio乘以10后取整,然后再查表。 3.6可裁减设计 为保持与μC/OS—Ⅱ本身可裁减特性的一致,新加入的DVS功能可以在os_cfg.h中通过宏定义变量OS_PM_DVS_EN来启用和关闭。OS_PM_DVS_EN为1表示开启DVS功能,为0表示关闭。 |
|
|
|
4测试实验
改进后的μC/OS—Ⅱ使用ARM Develop Suit V1.2编译后,在华邦的W90P710开发板上测试运行。W90P710开发板支持4个等级的频率调整。有关μC/OS—Ⅱ在这块板子上的移植请查阅参考文献[4,5]。 采用功率计HIOKl3332测量改进前后μc/Os—Ⅱ在板子上运行时的功耗。本测试案例创建了两个任务。这两个任务的属性如表1所列。 实验结果表明,使用DVS功能与不使用DVS功能相比,调节处理器的功耗下降4l%。 |
|
|
|
5结论
本文的创新之处在于提出了一个DVS的实现模型,并在保持μC/OS—Ⅱ原有的基于抢占的静态优先级调度基础上,在遵循可裁减、可移植的前提下,在其内核中加入了支持动态电压管理的代码配置和函数接口。经测试,改进后的μC/OS—Ⅱ可以在W90P710上顺利运行。虽然本实验是针对离散的频率和电压进行的,但改进的μC/OS—Ⅱ仍然可以支持连续电压和频率下的动态管理。通过以上改进,μC/OS—Ⅱ在实际应用中可以节省更多的能耗,设备的使用时间会更加长久。 |
|
|
|
只有小组成员才能发言,加入小组>>
387 浏览 0 评论
976 浏览 1 评论
2361 浏览 5 评论
2681 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2499 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
536浏览 9评论
540浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
644浏览 6评论
516浏览 5评论
556浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-16 09:21 , Processed in 0.971338 second(s), Total 61, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号