伴随着移动嵌入式产品的普及,电源管理已经成为重要技术指标和产品的有机组成。典型移动嵌入式设备对能耗越来越敏感,电源管理技术正成为产品设计的关键所在。为了应对电源管理面临的挑战,如何设计出高效的嵌入式系统的电源管理已成为研究热点。
 
  典型移动嵌入式系统能耗主要部件包括嵌入式微处理器CPU、内存、LCD及背光、电源转换部件、DSP、外设控制器等。在这些元件中,有些元件能耗固定,有些元件可在不同时间段工作并有多种可控的耗能状态,后者的有效使用成为嵌入式系统节能的关键所在。

  1.什么是WinCE电源管理

(1)电源管理概念与方法
   在电池供电的移动嵌入式系统中,一般采用高效率的电源芯片用于供电管理,或采用大容量的电池以解决能耗需求,但这两种技术的发展还无法满足移动嵌入式设备的动态功耗和静态功耗。有一种方法可以协调高性能与低功耗之间的矛盾,就是根据系统负载进行性能调节,通过停止某些模块的时钟和电源供应将能耗降至最低。

嵌入式系统按功率消耗由小到大分为睡眠(sleep)、空闲(idle)、运行(Run)等模式。大多时间内,在运行态(Run)时设备全部正常工作,而在睡眠与空闲模式时处理器则可以按照特定的模式进行相应的节能。因此,电源管理的目的是节能,基本节能方法是使系统适时的进出休眠状态。在节能状态下处理器挂起,主存储器运行在节能的自刷新模式,只有功耗管理电路、唤醒电路继续工作。比如用户按下On/Off按钮,或者监视用户活动的定时器超时,或者应用程序API都可以使得嵌入式系统休眠,当用户再次按下On/Off或者有其他唤醒中断发生时,系统就会退出休眠。因此,电源管理模块和用户活动情况密不可分,电源管理是用户活动所驱动的。

WinCE处理用户与系统交互的部分是GWES,所以早期电源管理工作也是由GWES来实现。但GWES提供的电源管理模块功能过于粗糙死板,所有子设备只能有On和Suspend状态,应用程序无法得到任何状态转换通知。后来,WinCE引入了电源管理PM(Power Manager)模块,用以替代GWES中的电源管理功能,新的电源管理模块提供更完整和灵活的功能,如子设备电源状态可以单独设定,应用可以获得电源通知等。因此,电源管理器负责管理设备电源,并且与不支持电源管理功能的设备和应用兼容,在内核OAL层、设备驱动程序和应用程序之间充当中间人角色。

(2)电源管理器结构
     在使用电池供电的WinCE系统中,正确设计电源管理十分关键。在功能上大致可以分为系统级电源管理、动态电源管理、设备电源管理等三类。通常,应用程序在大多数时间都不需要关注WinCE 设备的电源损耗,但是在某些时候要注意这些损耗。WinCE电源管理器通过一个名为Pm.dll的动态链接库与设备管理器Device.exe链接。Pm.dll动态链接库支持三类接口:一是驱动程序接口:为需要进行电源管理的设备的驱动程序使用;二是应用程序接口:为需要利用电源管理的应用程序使用;三是提醒接口(Notification):为需要接受电源事件提醒的应用程序使用。

例如,WinCE系统先检查任务负载情况,如果没有需要运行的任务,则一般进入空闲节能状态等待唤醒,在空闲一段时间后进入深度睡眠,挂起到RAM中或者硬盘上。在运行任务期间,WinCE还可以利用硬件提供的电源管理功能动态调节芯片运行电压和频率,对系统进行更加细致的电源管理。

  2.WinCE电源管理的分类

(1)系统电源状态
  Win CE系统电源状态更多的是代表系统电源的一种配置方案,它是各个子设备电源配置的集合。它设定一种可能出现的情景,事先拟定了此情景下电力分配策略(哪些子设备打开,哪些子设备关闭)。WinCE支持以下几种电源状态:①ON状态,用户在主动使用设备。②UserIdle状态,用户与设备停止交互,但仍有可能使用设备。③SystemIdle状态,在经过一段时间的UserIdle后进入此状态,但是驱动和系统仍然活动。④Suspend状态,当驱动程序和系统进程不再与系统交互时进入此状态。⑤ColdReboot和Reboot状态,冷启动后系统电源状态。

因此,在这个基础上技术人员可以根据自己的平台特点,增加新的策略来满足不同移动嵌入式产品的需要。常见的做法是设计一个电源按键的流驱动,当检测到按键时候呼叫API将系统电源转换到Suspend,

如On/Off按键。还有就是加入背灯控制,比如在On状态下请求显示驱动打开背灯,在UserIdle和SystemIdle状态下请求显示驱动关闭背灯。

(2)设备电源管理
  WinCE加入了高级的电源管理组件功能,它允许每个外设具有自己的电源状态,这有别于一般的系统电源状态(System Power State),故被称作设备电源状态(Device Power State)。现在的应用程序一般都有能力设置个别外设的电源状态,比如一个文件传输程序,在保持串口或者蓝牙端口正常通讯时,可以关闭显示屏幕和背光,这就为实现更高级别的动态电源管理提供了可能。

电源管理器和支持电源管理的设备之间的交互包括两种机制:一是电源管理器到驱动程序,电源管理器使用DeviceIoControl()函数向设备驱动程序发送I/O控制(IOCTLs),因此设备必须能响应电源管理器的查询、状态设置等IOCTLs。二是驱动程序到电源管理器,驱动程序使用DevicePower Notify()函数与电源管理器交互,例如请求电源管理器把它的设备置于某种状态,如果电源管理器接受该请求则通过发送IOCTL_POWER_SET等IOCTLS来进行设置。

(3)应用程序与电源管理器交互
  Win CE应用程序与电源管理器有两种交互机制:一是应用程序接口,用以获取当前系统和设备的电源状态。应用程序通过SetSystemPowerState()来设置系统电源状态,通过SetDevicePower来设置子设备电源状态,通过SetPowerRequirement通知电源管理器将子设备设置在特殊电源状态下,不随系统电源改变。二是电源事件提醒接口。为了实现提醒接口,应用程序还可通过CreateMsgqueue()函数建立消息队列,将其句柄传给电源管理器,电源管理器再把提醒发送到消息队列中,调用者可选择可用提醒的一个子集进行响应。

(4)OAL层电源管理的实现
    OEM Adaptation Layer(OAL)是一层与硬件平台相关的代码,它在电源状态转换中扮演着重要的角色。在WinCE中,OAL层电源管理通过OEMIdle()和OEMPowerOff()函数实现。其中OEMInit是初次上电时(或在冷启后)被调用,如初始化系统内存,建立调试环境,设置系统中断等;当系统中没有任何可调度的线程时,内核就调用OEMIdle()以实现降低处理器的频率来达到省电目的,这个函数在BSP中可以由OEM修改定制。

当有外部中断时,CPU可从其中恢复,如当用户按下OFF按钮或者应用调用API进入suspend状态时候,内核会调用OEMPowerOff()函数,在系统唤醒后继续从OEMPowerOff()被挂起处执行。OEMPowerOff函数是基于硬件平台来实现的,它能进行CPU寄存器保存、设置及唤醒恢复等功能。系统Idle状态和前面说的UserIdle状态是不同概念,前者是CPU负荷情况驱动,代表系统空闲;后者是用户活动驱动,代表用户空闲。

  2.从应用程序交互分析电源管理状态

当WinCE 系统被挂起,为了省电用户需要关闭处理器及大部分设备供电,然后在需要唤醒时再通过定时器或无线模块唤醒。一般来说,被唤醒后系统会返回到与系统挂起前一样的状态,因此应用程序根本不知道系统曾被挂起,除非它明确地请求当系统挂起时通知它。因此从应用程序的角度看,电源管理有三种方式:查询电源状态、改变电源状态和防止电源状态改变。

(1)查询电源状态
   对嵌入式系统来说,OEM厂商定义了系统的电源状态。例如,电源状态可能是打开(On),空闲(Idle)和挂起(Suspend),还有ScreenOff、InCradle和 OnBattery等。从应用程序的观点看,电源管理程序提供了通知电源状态改变的能力以及通过一系列的函数统一改变电源状态的能力。

因此,查询系统当前的电源状态是WinCE的一个重要功能,可以调用DWORD GetSystemPowerStatusEx2(PSYSTEM_POWER_STATUS_EX2,DWORD dwLen,BOOL fUpdate)来查询。函数用三个参数来告诉WinCE系统查询电池驱动最后的信息或者直接返回电池缓存中的信息,系统大约每5秒查询一次电池状态。又因为WinCE不验证电池驱动返回的数据,因此不同的系统有不同的变化,这个函数返回来的数据是主要依赖于电池驱动。例如,许多系统在使用AC电源时不报告精确的电源级数,另一些系统则相反。

(2)改变电源状态
   应用程序能通过一系列的方式改变系统的电源状态,在WinCE中首选的方式是使用电源管理程序。电源管理程序提供函数来允许应用程序来控制电源状态,如应用程序通过调用函数SetSystemPowerState来请求特定的电源状态。一般有两个方式来控制电源,第一个方式是应用程序给定一个电源设定;

第二个方式是应用程序请求电源状态不要低于给定的级别。

常见的例如:①关闭电源,应用程序通过调用GwesPowerOffSystem函数挂起系统,如函数void GwesPowerOffSystem(void)的调用就会挂起系统。② 关闭屏幕,如果系统是有色背光显示,那么主要的电源消耗不是CPU而是背光。在某一些环境下,一个应用程序运行时并不需要显示在屏幕上。例如音乐播放器应用程序,当用户听音乐的时候不关注屏幕,在这些情形下关闭背光将意味着提高电池寿命。当然,当用户想看屏幕时,任何关闭背光应用程序就需要一个简单的方式来重新打开屏幕。显示控制是通过Ext-Escape函数实现,这个函数允许应用程序打开或关闭显示。另外,WinCE没有一个统一的方式来控制背光的亮度,每个系统都有它自己的OEM特有方式来控制背光亮度。③打开系统电源,意思是说当被挂起的应用程序要再次运行时,必须要有一个方式来唤醒一个挂起的系统电源。方法可以是应用程序通过使用消息API(Notification API)把系统唤醒。在一般情况下,OEM厂商会分配一些中断条件以便电源打开或唤醒。

(3)防止系统关闭电源
   另一方面,防止系统挂起也是一个重要的问题。WinCE系统通常被设置为当一段时间没有用户输入就自动挂起。因此,如果定时器到达预先的没有用户输入的间隔,系统会自动挂起。当要防止自动挂起时,应用程序可以周期性地调用这个函数:void WINAPI SystemIdleTimerReset (void),这个函数能重设WinCE用来监视用户输入的定时器。所以当一个应用程序需要更改超时值时,就可以通过调用SystemIdleTimerReset把挂起超时值改变。一般来说,WinCE系统维护三个超时值,防止电源被自动挂起可以使用SystemParametersInfo来查询这三个值,并在最短时间内返回调用SystemIdleTimerReset。如果超时值被设置为0,表示超时值被禁止。

(4)电源通知
    最后,电源管理程序还有一个十分受欢迎的特点,就是可以在系统电源状态改变时通知应用程序,这可以让应用程序从手动检测电源状态中解脱出来。应用程序通过调用RequestPowerNotifications请求电源管理程序当电源状态改变的时候,发送一个通知给应用程序,电源管理程序再通过一个由应用程序建立的消息队列发送此通知。

总之,嵌入式电源管理在WinCE系统是一个快速发展的研究课题。它对移动嵌入式产品的设计具有关键性影响,一个高效的电源管理设计可以帮助移动嵌入式产品在市场竞争中脱颖而出,克敌制胜。

WinCE电源管理应对移动嵌入式能耗瓶颈相关推荐

  1. WinCE电源管理的简单介绍

    电源管理的目的是节能,基本的节能方法是使系统适时的进出休眠状态.比如用户按下On/Off按钮,或者监视用户活动的定时器超时,或者应用呼叫api都可以使得系统休眠,用户再次按下On/Off或者其他唤醒中 ...

  2. WinCE电源管理----驱动增加电源管理属性

    原文地址::http://www.cnblogs.com/we-hjb/archive/2010/01/27/1657973.html 对于移动设备来说,电源管理是比较重要的.为了让设备有更长的待机和 ...

  3. 嵌入式系统实用电源管理技术应该如何选择?

    1800今年,人类历史中第一款伏打电池的诞生了.从此电源管理是一个永远都不会过时的话题.一直发展到如今的物联网时代.伴随着消费电子产品的普及.传感器网络需要一种小型化.有极高能耗管理能力的网络小型操作 ...

  4. 嵌入式系统中的电源管理

    电源管理一直是一个热门话题,是近年来的嵌入式开发人员遇到的"一个很酷的话题".其重要性在很大程度上取决于延长手持设备电池寿命的要求,但环境危害,散热等引起了人们的关注. 嵌入式软件 ...

  5. 嵌入式linux系统电源管理器,嵌入式Linux系统的动态电源管理技 - 嵌入式操作系统 - 电子发烧友网...

    嵌入式Linux系统的动态电源管理技术 通过用户层制定策略与内核提供管理功能交互,实时调整电源参数而同时满足系统实时应用的需求,允许电源管理参数在短时间的空闲或任务运行在低电源需求时,可以被频繁地.低 ...

  6. 7.嵌入式控制器EC实战 ACPI规范中的电源管理通道PMC(Power Management Channel)

    文章目录 前言 一.电源管理通道PMC概述 二.通过电源管理通道PMC完成EC和BIOS或操作系统通信 操作系统或BIOS通过PMC通道与EC通信 如果PMSTS的BIT2为1时,代表发送过来的信息是 ...

  7. 智驾系统的设计瓶颈之:电源管理和功耗分配

    作者 | Orchid 知圈 | 进"滑板底盘群"请加微yanzhi-6,备注底盘 高阶自动驾驶系统在进行架构设计时,其域控内部的架构通常涉及主控芯片MCU.计算芯片SOC.电源管 ...

  8. Windows CE的电源管理

    Windows CE的基本电源管理功能 在所有版本的Windows CE操作系统中,图形.视窗和事件子系统(GWES)在电源管理方面都发挥了关键作用.这是因为早期版本的电源管理功能是由用户的活动所驱动 ...

  9. 从Var Tick角度来对CE电源管理

    从Var Tick角度来对CE电源管理 一.相关的基础知识如下 1.OAL中Timer相关函数说明 1> OALTimerInit 参数: msecPerSysTick: 每个系统调度Tick对 ...

最新文章

  1. linux引导过程简述6,CentOS 6系统启动引导过程讲解
  2. 一直都想总结一下自己遇到过的web安全方面的问题--2015-03-31
  3. Optimize Search Results
  4. Matlab非线性方程求解
  5. @ConfigurationProperties与@Value注解
  6. c#异常处理_C#异常处理能力问题和解答 套装2
  7. 小程序[渲染层网络层错误] failed to load image_游戏中水的渲染技术
  8. 分区表学习三:分区表实际操作心得
  9. asp.net的几种页面间的传值方法
  10. 通过new创建xml文件_C#通过SharpZipLib库创建压缩文件
  11. 12.15daily_scrum
  12. FreeBSD portsnap方法更新ports
  13. 实战爬虫:python爬虫之爬取虎扑湖人专区新闻中科比相关新闻
  14. 机器学习- 吴恩达Andrew Ng 编程作业技巧 for Week5 Neural Networks Learning
  15. docker客户端和服务端
  16. 复合梯形公式C语言程序,C语言复合梯形公式实现定积分
  17. 冒险岛079单机/小范围联机游戏搭建
  18. DataGear 数据可视化看板整合前端框架Vue
  19. 多线程学习-基础( 十)一个synchronized(){/*代码块*/}简单案例分析
  20. 冒险岛左右移动攻击,定时加血加蓝加BUFF JAVA实现

热门文章

  1. 数据完整性采取哪些技术实现_接线端子插针插孔的焊接方法是通过哪些技术来实现的?...
  2. FANUC Robot编程技巧一
  3. 2022 年人工智能全球最具影响力学者榜单——AI 2000 发布,中国占据两大榜首
  4. 1526:宗教信仰——简单并查集
  5. 复杂网络建模的实现(哈工大深圳复杂网络建模课程Project)
  6. AI时代已来,我们该如何培养创造力
  7. 好业绩与好心态爱相随
  8. TFN MIX5 500 手持式光谱仪 合金分析仪 便携式X荧光光谱仪 合金手持式光谱仪
  9. 比较器Comparator
  10. 网页上的声音如何在线录制,电脑音频录制软件哪个好 1