新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 移动嵌入式WinCE电源管理应对有技巧

移动嵌入式WinCE电源管理应对有技巧

作者:时间:2011-03-16来源:网络收藏

伴随着移动嵌入式产品的普及,电源管理已经成为重要技术指标和产品的有机组成。典型移动嵌入式设备对能耗越来越敏感,电源管理技术正成为产品设计的关键所在。为了应对电源管理面临的挑战,如何设计出高效的嵌入式系统的电源管理已成为研究热点。

典型移动嵌入式系统能耗主要部件包括嵌入式微处理器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)。现在的应用程序一般都有能力设置个别外设的电源状态,比如一个文件传输程序,在保持串口或者蓝牙端口正常通讯时,可以关闭led/' target='_blank'>显示屏幕和背光,这就为实现更高级别的动态电源管理提供了可能。

电源管理器和支持电源管理的设备之间的交互包括两种机制:一是电源管理器到驱动程序,电源管理器使用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负荷情况驱动,代表系统空闲;后者是用户活动驱动,代表用户空闲。

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

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

(1)查询电源状态

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

因此,查询系统当前的电源状态是WinCE的一个重要功能,可以调用DWORD GetSystemPowerStatusEx2(PSYSTEM_


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭