|
WIN CE电源管理
WinCE处理用户与系统交互的部分是GWES,所以早期电源管理工作也是由GWES来实现。但GWES提供的电源管理模块功能过于粗糙死板,所有子设备只能有On和Suspend状态,应用程序无法得到任何状态转换通知。后来,WinCE引入了电源管理PM(Power Manager)模块。
1.1电源管理器结构
在使用电池供电的WinCE系统中,在功能上大致可以分为系统级电源管理、动态电源管理、设备电源管理等三类。通常,应用程序在大多数时间都不需要关注WinCE 设备的电源损耗,但是在某些时候要注意这些损耗。
WinCE电源管理器通过一个名为Pm.dll的动态链接库与设备管理器Device.exe链接。Pm.dll动态链接库支持三类接口:一是驱动程序接口:为需要进行电源管理的设备的驱动程序使用;二是应用程序接口:为需要利用电源管理的应用程序使用;三是提醒接口(Notification):为需要接受电源事件提醒的应用程序使用。
例如,WinCE系统先检查任务负载情况,如果没有需要运行的任务,则一般进入空闲节能状态等待唤醒,在空闲一段时间后进入深度睡眠,挂起到RAM中或者硬盘上。在运行任务期间,WinCE还可以利用硬件提供的电源管理功能动态调节芯片运行电压和频率,对系统进行更加细致的电源管理。
1.2 WinCE电源管理的分类
(1)系统电源状态
Win CE系统电源状态更多的是代表系统电源的一种配置方案,它是各个子设备电源配置的集合。它设定一种可能出现的情景,事先拟定了此情景下电力分配策略(哪些子设备打开,哪些子设备关闭)。
WinCE支持以下几种系统电源状态:
? On:用户与系统交互时的状态;
? BacklightOff:在一段时间内(默认15秒),如果一直没有用户操作(比如按下某个键或者触摸屏幕),就关闭背光,这时其他的设备都没变化。这个timeout值可以通过控制面板进行设置;
? UserIdle: 代表用户停止输入,但可能仍然在使用的情景,比如阅读文件.
? SystemIdle: 代表用户停止使用设备,但处理器仍然工作的情景,比如,后台文件传输.
? ScreenOff:一般由某些程序指定,才进入这个状态。比如音乐播放器程序,当你听音乐时按下某个键可以将屏幕关闭。PocketPC和Smartphone都使用这个状态,它与UserIdle的不同在于,ScreenOff意味着“用户主动关闭了显示,只有当他按下电源键时才重新显示”,而UserIdle意味着“用户有段时间没操作了,那么我们可以关闭屏幕来省电”,所以在UserIdle时,随便按下Smartphone的哪个键都会启动显示;
? Suspend:这是PocketPC的睡眠模式,几乎所有设备都被关闭,直到某个硬件设备触发中断才将系统唤醒,这个timeout值可以通过控制面板进行设置(默认为3分钟);
? Resuming:这是PocketPC被唤醒后的状态,这时屏幕是关闭的,并启动一个15秒的计时器,在这段时间内决定接下来进入哪个状态,如果计时器超时则重新回到睡眠状态;
? Unattended:这个状态只在PocketPC中被使用,用户对其不会有所察觉。有些程序,如ActiveSync每5分钟会唤醒系统进行同步,同步完成后再让系统继续睡眠,这段时间不希望打扰用户,即程序在后台执行。
可以通过注册表查看系统电源状态对应的具体设备的电源状态:
[HLM\System\CurrentControlSet\Control\Power\State]。
(2)设备电源管理
WinCE加入了高级的电源管理组件功能,它允许每个外设具有自己的电源状态,这有别于一般的系统电源状态(System Power State),故被称作设备电源状态(Device Power State)。现在的应用程序一般都有能力设置个别外设的电源状态,比如一个文件传输程序,在保持串口或者蓝牙端口正常通讯时,可以关闭显示屏幕和背光,这就为实现更高级别的动态电源管理提供了可能。
设备电源状态 注册表键值 描述
Full on D0 此状态表示设备已开启或正在运行。设备将以系统允许的最大功耗及最高性能运行。
Low on D1 此状态表示设备已开启或正在运行,但以低于D0状态的功耗及性能运行。D1状态适用于设备已经被使用,但以较低的性能运行即可,没有必要以最大性能运行,会产生额外的功率消耗。
Standby D2 此状态表示设备被部分供电,保证设备在需要时能自动唤醒。
Sleep D3 睡眠状态。保证唤醒的最小供电,在需要时能自动唤醒并初始化。
Off D4 关闭状态,不供电。
曾经一位同事这么写的,你可以参考下,其实网上有很多wince电源管理的文章,另外微软也有详细说明。 |
|