0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Windows Mobile的系统电源状态和电源管理策略

454398 来源:博客园 作者:Jason's Scribble 2020-10-05 17:35 次阅读

本篇将以Windows Mobile为例介绍Windows CE电源管理的实现,大体上,Windows Mobile分为Pocket PC和Smartphone两种版本。这两者之间的主要区别在于触摸屏和电源模型,Smartphone采用的是“Always On”模型。为了说清楚它们的区别,我们就先从系统电源状态说起吧(这里有些系统电源状态是从WM5开始才有的)。

1. Windows Mobile的系统电源状态

On:用户与系统交互时的状态;

BacklightOff:在一段时间内(默认15秒),如果一直没有用户操作(比如按下某个键或者触摸屏幕),就关闭背光,这时其他的设备都没变化。这个timeout值可以通过控制面板进行设置;

UserIdle:这个状态只在Smartphone中被使用。经过一段稍长的时间,如果一直没有用户操作,就关闭背光和LCD。这个timeout值可以通过控制面板进行设置;

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]。

现在我们知道,Smartphone没有真正的睡眠模式,即使它会在一段时间后关闭背光和屏幕,但它并没有睡着,只是休息一下眼睛罢了,它的大脑和四肢仍在正常工作。PocketPC所采用的模型比Smartphone要复杂的多,你可以按下电源键让系统睡眠,在必要时,也可以唤醒系统做一些工作然后再继续睡眠。如果你在Smartphone上运行一个桌面精灵之类的程序,她为了引起你的注意,长时间的蹦啊跳啊,不管白天还是黑夜,可想而知,你的待机时间将......

你可能会觉得PocketPC的“Sleep”模型比Smartphone的“Always On”模型要省电,其实恰恰相反。因为在系统睡眠的过程中,它需要通知所有的设备驱动,为了让它们保存一些重要的信息并关闭相应的硬件设备,在系统被唤醒时也需要通知它们恢复先前的工作。这个过程不仅耗时还可能会耗更多的电,因为一些设备在频繁的状态转换过程中会消耗比较多的能量。这也就是为什么当你收到一条短信时,睡眠状态的PocketPC要花3到6秒的时间来处理,而Smartphone只需要几个微秒:)

2. Windows Mobile的电源管理策略

我们可以用系统电源状态机来简单的描述Windows Mobile的电源管理策略,以PocketPC为例,系统电源状态机如下图所示:

系统内部的电源管理器负责协调电源状态的转换,电源状态的转换主要由一下几种方式触发:

计时器超时:SuspendTimeout和ResumingSuspendTimeout,分别对应于第一节介绍Suspend和Resuming状态时所提到的计时器。细说起来,它们每个又有两个值,分别对应着电源供电时和电池供电时的超时值,也就是注册表[HLM\System\CurrentControlSet\Control\Power\Timeout]中的ACSuspendTimeout、BattSuspendTimeout、ACResumingSuspendTimeout、BattResumingSuspendTimeout;

系统调用:驱动程序或应用程序通过相应的API,请求进入某种电源状态。这类API在前面的文章中已经有所介绍,如SetSystemPowerState、SetPowerRequirement、DevicePowerNotify等;

平台相关的系统调用:通过PowerPolicyNotify通知电源管理器发生了某个事件,它的实现比较灵活,驱动程序或应用程序可以通过相应的参数与电源管理器进行交互,比如PPN_POWERCHANGE、PPN_SUSPENDKEYPRESSED、PPN_UNATTENDEDMODE等,参见"pmpolicy.h";

直接访问内核对象:事件(Event)作为Windows CE系统的内核对象,可以通过事件名称在进程间共享,因此我们可以访问电源管理器中的两个事件,它们的名字分别是_T("PowerManager/ReloadActivityTimeouts")、_T("PowerManager/SystemIdleTimerReset")。如果你的程序需要动态修改那几个计时器的时间长度,可以通过第一个事件通知电源管理器重新读取注册表中计时器的值,而第二个事件与SystemIdleTimerReset功能一样,可以阻止系统进入睡眠状态。

3. Windows Mobile电源管理相关API的应用

最后,通过几个应用场景简单介绍一下常用的电源管理相关的API的使用:

如果你在设计的是媒体播放器程序,不希望在播放电影时,系统自动转入Suspend状态,这时可以每隔30秒调用一次SystemIdleTimerReset,它会帮你重置那个计时器;如果你还想同时保持背光,那么可以调用SetPowerRequirement(TEXT("BKL1:"), D0, POWER_NAME, NULL, 0);如果你提供一个按钮允许用户关闭屏幕,那么调用SetSystemPowerState(NULL, POWER_STATE_IDLE, 0);

如果你在设计的是天气预报程序,需要每天早上6点在线更新天气信息,这时可以调用CeRunAppAtTime,系统到时会被RTC中断唤醒,还记得前面提到的那个15秒的计时器吗,这时你的程序应该在15秒内请求进入Unattended状态,否则系统将重新回到睡眠状态。在处理更新的过程中,还是应该每隔30秒调用一次SystemIdleTimerReset,在处理完更新后,应该再次调用CeRunAppAtTime,并放弃Unattended状态。请注意,在电源管理器的实现代码中,用了一个引用计数的变量(gdwUnattendedModeRequests)统计所有对Unattended状态的请求,所以PowerPolicyNotify(PPN_UNATTENDEDMODE, TRUE);和PowerPolicyNotify(PPN_UNATTENDEDMODE, FALSE);要成对出现,否则系统将无法回到睡眠状态。

如果你要开发一个监控电池状态的程序,首先应该创建一个接收状态通知的线程,在这个线程里调用RequestPowerNotifications,这个函数的第一个参数是一个消息队列的句柄,所以必须先创建一个消息队列(CreateMsgQueue),第二个参数是你希望得到的通知类型,这里要用到的是PBT_POWERSTATUSCHANGE|PBT_POWERINFOCHANGE,然后线程就可以等待通知了(WaitForSingleObject),一旦有通知到来,线程通过ReadMsgQueue读取消息的内容,再做些更新UI的工作。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电源管理
    +关注

    关注

    112

    文章

    6013

    浏览量

    141101
  • WINDOWS
    +关注

    关注

    3

    文章

    3439

    浏览量

    87142
  • 计时器
    +关注

    关注

    1

    文章

    395

    浏览量

    32156
收藏 人收藏

    评论

    相关推荐

    电源管理芯片怎么测好坏电源芯片内部结构

    电源管理芯片(PMIC)是在单片芯片内包括多种电源轨和电源管理功能的集成电路,主要功用为在存在多个电源
    的头像 发表于 03-29 15:59 596次阅读
    <b class='flag-5'>电源</b><b class='flag-5'>管理</b>芯片怎么测好坏<b class='flag-5'>电源</b>芯片内部结构

    锂离子供电系统电源管理集成电源管理芯片TPS65024x数据表

    电子发烧友网站提供《锂离子供电系统电源管理集成电源管理芯片TPS65024x数据表.pdf》资料免费下载
    发表于 03-07 09:34 0次下载
    锂离子供电<b class='flag-5'>系统</b>的<b class='flag-5'>电源</b><b class='flag-5'>管理</b>集成<b class='flag-5'>电源</b><b class='flag-5'>管理</b>芯片TPS65024x数据表

    WINDOWS系统有几个版本

    版本,如Windows Server、Windows MobileWindows CE等。因此, Windows
    发表于 02-29 16:40

    DC电源模块的节能与环保设计策略

    BOSHIDA DC电源模块的节能与环保设计策略 DC电源模块的节能与环保设计策略可以从以下几个方面考虑: DC电源模块的节能与环保设计
    的头像 发表于 02-18 14:23 96次阅读
    DC<b class='flag-5'>电源</b>模块的节能与环保设计<b class='flag-5'>策略</b>

    精密列头柜电源管理系统

    安科瑞 邹玉丽 安科瑞公司 AMC16Z 系列交流精密配电监控装置是专门针对于数据中心服务器电源管理设计的测量装置。 该装置设计小巧,能够对 A+B 两路进线和 96 路出线的全电参量参数、输入输出
    的头像 发表于 01-31 13:51 82次阅读
    精密列头柜<b class='flag-5'>电源</b><b class='flag-5'>管理</b><b class='flag-5'>系统</b>

    电源管理总线PMBus基础知识

    电源管理总线 PMBus 是一种完全开放的标准,其语言包含命令,可与电源转换器、稳压器或电源管理系统
    发表于 01-17 15:33 615次阅读
    <b class='flag-5'>电源</b><b class='flag-5'>管理</b>总线PMBus基础知识

    智能产品USB-C接口的不同电源策略

    基于USB-C接口的智能产品的不同电源策略呢? 首先,我们需要了解USB-C接口的电源管理机制。USB-C接口支持多种不同的电源
    的头像 发表于 11-27 09:18 216次阅读
    智能产品USB-C接口的不同<b class='flag-5'>电源</b><b class='flag-5'>策略</b>

    电源管理策略推动便携式设计发展

    电子发烧友网站提供《电源管理策略推动便携式设计发展.pdf》资料免费下载
    发表于 11-16 15:00 0次下载
    <b class='flag-5'>电源</b><b class='flag-5'>管理</b><b class='flag-5'>策略</b>推动便携式设计发展

    电源管理芯片的作用

    来保证设备正常运行。电源管理芯片通过监测电池电量的状态来准确控制电流和电压,从而实现对电池的充电、放电和状态监测。 故障保护:电源
    的头像 发表于 09-06 16:05 2493次阅读

    大型LITTLE系统电源管理的高级注意事项

    电源管理很重要,而且已经变得越来越复杂。 该应用笔记提供了有关Big.LITTLE系统电源管理的高级注意事项,旨在帮助您避免Big.LITT
    发表于 08-30 07:40

    电源设计中电感饱和的原因和避免策略

    电感饱和是电源设计中一个常见且具有挑战性的问题。本论文旨在深入研究电感饱和现象的成因、影响以及有效的避免策略。通过分析电感饱和的机制,探讨了如何优化电源电路的设计和参数选择,以确保电感在工作过程中不会饱和。通过合理的设计和应对
    的头像 发表于 08-19 10:25 1044次阅读

    PE和系统电源管理的标准接口介绍

    本文档定义了PE和系统电源管理的标准接口,操作系统供应商可将其用于在Arm设备上以不同权限级别工作的监控软件。在管理
    发表于 08-02 12:21

    汽车控制器的电源管理系统

    供电系统 为了实现对上述几种电子器件供电,汽车控制器需要一个供电管理系统,即电源管理系统,如下所
    的头像 发表于 07-19 10:52 995次阅读
    汽车控制器的<b class='flag-5'>电源</b><b class='flag-5'>管理</b><b class='flag-5'>系统</b>

    电源管理系统冗余原理,一种户外电源BMS中的冗余设计策略

    便携储能市场的快速增长带来了户外电源这一消费品类,并且随着消费者对用电需求增加,使得户外电源功率不断增大。为了保证户外电源的安全,电池管理系统
    的头像 发表于 07-06 17:36 2434次阅读
    <b class='flag-5'>电源</b><b class='flag-5'>管理</b><b class='flag-5'>系统</b>冗余原理,一种户外<b class='flag-5'>电源</b>BMS中的冗余设计<b class='flag-5'>策略</b>

    电源管理智能化之路

    电源管理技术作为电气化时代各行各业发展必不可少的一项技术,是提升终端设备能效的主要途径。从系统层面看,电源管理
    的头像 发表于 05-19 09:35 392次阅读
    <b class='flag-5'>电源</b><b class='flag-5'>管理</b>智能化之路