百家乐官网|WinCE电源管理的实现

发布时间:2021-03-20    来源:百家乐官网 nbsp;   浏览:41908次

电源管理的目的是节能,节能的基本方法是让系统主动进入和退出休眠状态。例如,用户按下开/关按钮,或者用于监控用户活动的定时器到期,或者可以用来调用api使系统睡眠,用户再次按下开/关或其他苏醒中断将使系统解除睡眠状态。由此可见,电源管理模块与用户活动密不可分,电源管理是由用户活动驱动的。

在WinCE中,处理用户和系统之间交互的部分是GWES,所以早期的电源管理是由GWES建立的。(GWES:Graphics,WindowsandEventsSubsystem。图形、窗口和事件子系统。

主要负责管理图形输入和用户交互)。但是GWES获得的电源管理模块的功能过于死板和死板:所有的子设备不能有on和Suspend状态,应用程序不能得到任何状态切换通知等等,直到WinCE4.0才引入电源管理模块来代替GWES的电源管理功能。(此外,为了便于电源管理模块的集中管理,必须重新开放原来的GWES电源管理功能。方法是注册表hklm \ system \ current controlset \ control \ power设置DisableGwesPowerOff=1以禁止GWES干预电源管理。

该系统被配置文件禁止。此外,一些用户活动仍然依赖GWES获得。在注册表HKLM \系统\GWE中设置activityestevent=power manager/activity timer/user activity,以便告诉GWES,当鼠标、键盘和触摸屏的输出再次出现时,GWES将设置全局事件通知电源管理模块。

)新的电源管理模块获得了更原始、更灵活的功能,系统电源可以灵活的原创,子设备电源状态可以与原分离,应用可以获得电源通知等。[系统电源]]原始设备制造商可以根据给定的条件定义系统电源状态,如开、关、用户空闲、系统运行、暂停等。系统功率状态是表示系统功率的更好的分配方案,系统功率是每个子设备的功率分配的子集。

是一个可能频繁发生的原始场景,这个场景下的配电策略(关闭哪些子设备,重新打开哪些子设备)已经提前制定好了。比如,也许On可以代表正常工作的情况,代表所有子设备都关闭的状态;ScreenOff可以代表用户催促LCD重新打开的场景,LCD背光电源重新打开;UserIdle可以表示用户在一段时间内没有操作员,cpu/soc会变成低功耗状态的情况;Suspend可以表示设备闲置,幸运的是可以暂停,所有不必要的子设备重新供电;等等,对系统的功率状态的定义是灵活而正确的。您可以在注册表中定义系统电源状态。

示例:[HKEY _本地_机器\系统\当前控制集\控制\电源\状态\开]默认值=dword :0D0Flags=dword:10000On状态在上面由POWER_STATE_ON定义,Flags是可选的状态信息(提示),对应于pm.h中power _ state _ on.default的宏定义,它响应处于该状态的所有子设备的配置文件状态。电源管理模块的一个关键点是制定系统电源管理策略,其中还包括定义系统电源状态和状态间切换的条件。以配置文件的versiOn为例,非常简单的图如下:On:用户与系统交互时的状态。

UserIdle:代表用户的输出被挂起,但它仍然可以被使用的场景,例如阅读器文件。SystemIdle:指用户停止使用设备,但处理器仍然工作的情况,例如后台文件传输。Suspend:代表休眠状态。用户使用时,系统处于开启状态,用户暂停输出,系统自动转为用户空闲状态。

无输出时间持续后转为SystemIdle状态,一段时间后系统自动转为Suspend状态。应用程序还可以调用SetSystemPowerState()来扩展状态转换。在此基础上,根据自身平台特点,减少新策略基本可以满足常规产品的需求。1.On/Off巴顿。

(一). 电源管理模块早就反对电源按钮功能,最必要的方式就是减少pdd中电源按钮的定义,按钮io的初始化和检测,(b)。从外部向电源管理模块发送消息,报告按键事件。(三).api的必要开关状态。

百家乐官网

即不用于电源管理模块获取的关键功能,需要调用SetSystemPowerState使系统变成Suspend状态。这是一种罕见的做法。我们为电源按钮设计了一个流驱动程序。当检测到按钮时,我们调用api将系统电源切换到挂起。

2 .例如,在打开状态下关闭驱动关闭背光的驱动装置,在用户空闲和系统空闲状态下关闭驱动返回背光的驱动装置。【设备电源】针对电源管理的设备驱动程序建设的例子不多。

很简单的解释如下:不需要内置电源管理模块来控制子设备的电源开关,子设备的电源控制由各个设备驱动控制。电源管理模块使用设备驱动的IOCTLs来促使设备控制自己的电源。系统电源状态是灵活性权限的原始状态,而设备电源状态是相同的,至少有五种状态:D0、D1、D2、D3和D4,分别代表全开启、低开启、待机、睡眠和关闭。

不是所有的设备驱动都反对电源管理(至少早期的设备驱动会在电源管理经常出现之前就反对)。电源管理模块明确提出了设备驱动的规范和架构,符合规范的驱动归为电源管理。对于由流驱动程序控制的设备,反向电源管理需要满足的条件如下:1 .声明你反对电源管理(Iclass值);2.在驱动程序中构造被电源管理模块拒绝的IOCTLs.33.读取驱动程序时,报告相对电源状态和相关特性;4.* * * _断电和* * * _通电模块接管系统睡眠状态和苏醒通知。另外,设计驱动也要明白,设备可能不具备全部五种状态,但至少可以在D0工作;电源管理模块可以拒绝设备进入任何设备电源状态,并且在某种程度上,设备报告它所反对的;如果被拒绝变成不反对的状态,就应该变成它反对的另一种功耗更高的状态;当前状态不必重复设置;设备的电源状态可能与系统的电源状态不实时。

除了流驱动,还有许多内部驱动必须与电源管理功能相对立。很简单的总结:1。指示驱动器通过外部代码模块(设定电源管理命令,类似于IOCTLs)控制指示驱动器的电源,还控制背光。

2键盘驱动程序键盘驱动程序。3.触摸屏的触摸面板电源处理器。

4.内置网络的微型端口驱动程序是微型端口重置模块。5.PCMCIA驱动程序通电和断电。还有一些内置的驱动比如打印机,红外线。[[OAL反对电源管理][系统空闲状态]当没有线程打算操作时,内核调用OEMIdle()。

该功能在bsp中,可由OEM更改定制。一般来说,在这个功能中,我们不会拒绝cpu进入低功耗状态来节省功耗。

通用cpu/soc已经获得了对应于空闲的睡眠模式。当中断再次发生或苏醒事件再次发生时,有必要确保cpu缓慢地离开空闲状态并返回到操作状态。系统空闲状态不同于上面提到的用户空闲状态。前者由cpu负载驱动,表示系统空闲;后者是用户活动驱动的,也就是用户闲置。

百家乐官网

一个OEMIdle()的转介过程:根据dwReschedTime变量,计算下一个苏醒时间判别睡眠类型,如果需要,调整苏醒时间空闲处理器,时钟中断再次发生,判别苏星元修改CurMSec,Idle计数值。【系统挂起状态】当用户按下OFF按钮或者调用api进入挂起状态时,内核不会调用OEMPowerOff()函数。

在OEMPowerOff()函数中,构建系统挂起,系统苏醒后,从OEMPowerOff()被挂起的地方继续执行。OEM关机时转入睡眠模式(),可以根据cpu芯片的睡眠模式和功耗最低的模式自由选择。 如果cpu芯片获得的最低功耗模式是PowerDown模式,那么处理工作就比较复杂,因为苏醒之后,就意味着在复位时继续执行,应该完全恢复暂停时的环境,这样应用程序就不会告诉自己暂停了。一般要按照以下流程处理:关闭屏幕,清除帧缓冲区,将必要的寄存器保存到内存中,设置io,保存通用寄存器,保存唤醒地址,惯性中断,清除缓存,启用苏醒源中断,设置sdram自己创建,cpu转为掉电后忽略该流程。

苏醒。对于掉电模式以外的其他模式,如快速时钟模式,处理要简单得多。

最重要的是设置苏醒源(通常任何中断都可以是苏醒),sdram会变成自创状态。【sdram的控制】SDRAM耗电很大。

一般来说,除了液晶背光,SDRAM在系统中仅次于耗电设备。Mobilesdram和normalsdram比较少见。与normalsdram相比,mobilesdram减少了温度补偿自创建、本地阵列自创建和深度睡眠状态的特性,更适合于功耗容忍设备。(但是mobilesdram工作在较低的电压(1.8~2.5v),所以我觉得可能不适合一些3.3v总线的cpu,因为总线不会减少很多电平切换电路。

)在OEMPowerOff()功能中,将当前环境保存到sdram中,然后让sdram转入自创状态,cpu就可以转入功耗最低的睡眠模式。继苏醒之后,我们必须解散这个自创的国家。【电源管理中的应用层】电源管理模块还获取应用层模块,这样应用程序也可以参与电源管理。

应用层可以通过SetSystemPowerState()设置系统电源状态,通过SetDevicePower设置子设备电源状态,并通过SetPowerRequirement通知电源管理模块将子设备设置为类似的电源状态,而不随系统电源变化。此外,电源管理还获取消息队列,应用层还可以通过RequestPowerNotifications功能促使电源管理模块发送相关消息(PBT_RESUME、PBT_POWERSTATUSCHANGE、PBT_TRANSITION、PBT_POWERINFOCHANGE)。在设计应用程序时可能会有一些考虑:不要不必要地闲置cpu,尽可能慢地把它交给cpu。

例如,即使一个小动画只占1%的cpu,也不会导致一些系统无法切换到低功耗。这里有两个建议:(1)当应用不在前台时,挂起空闲的cpu(2)当用户不与应用程序交互时,暂停应用程序以闲置CPU。

其他应用程序可能会被忽略,当播放媒体文件时,当开始播放时,预计不会自动切换到暂停模式。您可以(1)每隔一段时间重置一次计时器。(2)或者将所有计时器设置为0以暂停电源管理(tcpmp就是这种情况)。

【电源管理系统构建】电源管理模块的实体由pm.dll的一个动态链接库构建。您可以在pb的目录窗口中自由选择电源管理组件,并将其添加到操作系统中。如下图所示,微软公司获得了两个自由选择(二选一)。

第一个表示原函数,所有API都是用全函数构建的,第二个表示空构建(形式上获取模块,但是空函数)。电源管理模块的代码结构是分层的,MDDPDD。

MDD是一个抽象的公共图书馆,不需要改变。平台涉及PDD,主要变化在PDD。根据平台特点,微软获得了两种类型的PDD实例。

一个是默认的,另一个是pda版本。在cOnfiguration文件的情况下,它被用作默认值。如果要用于pda版本,必须在系统中记录环境变量sysgen _ pm _ pda。

默认版本和PDA版本的主要区别在于,默认版本定义了四种状态:on、UserIdle、SystemIdle、SuspendPDA版本定义了一个关于开、关、无人值守、继续、挂起的非常简单的描述。默认版本:用户空闲状态描述用户正在使用但没有操作符,如阅读器。SystemIdle状态描述用户停止使用,但系统仍然工作,如文件传输。

PDA版很简单的描述:ScreenOff状态描述的是用户催促重启屏幕上的背光。 是用户主动重新打开的情况,和UserIdle不一样。用户空闲是自动的。无人值守状态即响应后台工作,用户会意识到这种情况,如ActiveSync,苏醒系统每5分钟实时一次,然后暂停;“恢复”状态描述的是苏醒之后的情况,例如,在苏醒之后的登录时间内需要并转移到哪个状态,否则将被挂起。

百家乐官网

【事后。【定制电源管理模块的方法】Pm.dll是device.exe读的,首先device.exe当然是必须的,检查pb目录中的DeviceManager组件,或者检查SYSGEN_DEVICE变量。其次,我们仍然应该自由选择电源管理组件powermanagementfull。右图方案一(引用方案):在bsp驱动程序目录中创建新的pm目录,其中已经构建了电源管理模块的PDD部分,链接MDD最终分解一个pm.dll而不是原系统的pm.dll.PDD,参考微软公司获得的code platform.cpp。

主要变化是减少状态切换的动作,继续执行单元。方案二:电源管理部分几乎不变,因为配置文件的PDD在状态切换时没有动作,而是广播PBT_TRANSITION消息,可以用于状态切换。这不像选项1那样必要。

如果是流程建设,也会浪费宝贵的流程资源。[考虑影响系统功耗的所有方面] 1。系统时钟周期典型的WinCE系统时钟周期为1ms,减少时钟周期有助于进一步降低设备功耗。

在OEMInit()OALTimerInit()更改系统时钟。2.在星型系统时钟节奏可变时钟调度器(VariableTickScheduler)的典型设计中,wince每毫秒产生一次系统时钟中断,因此1毫秒的间隔会使空闲解散。如果发现没有线程准备好,就会发现空闲。对于允许功耗的设计,可以考虑改变系统时钟节奏后转为空闲状态。

这样,在预期的时间段内,空闲状态会被不必要的系统时钟打断。3.3 .调整策略。LCD背光。

早期的设计是在一个独立的国家使用来构建背光的控制和调节策略。很简单的解释一下背光驱动的原理:背光驱动启动一个监控工作线程,时不时的等待三个事件:1。

背光变化事件2.PowerChangedEvent(电源变化,例如涉及交流电源,此事件将不被获取)3.PowerManager/ActivityTimer/UserActivity(用户输出事件)从注册表加载超强时间值,当超时事件再次发生时,系统背景灯将重新启动。当背光重新打开时,在用户的新活动期间再次发生第三个事件时,关闭背光。

注册表的超级时间值需要背光的工作时间。类似于在电脑上设置屏幕维护时间。此外,背光驱动器还必须获得对系统电源状态转换的反对意见。

断电时背光应该重新打开,通电时背光应该关闭。电源管理模块可以定义一种系统电源状态来描述背光重启时的场景(例如,当用户空闲或屏幕关闭时,背光打开时关闭),因此背光驱动可以暂停。4.IO口漏电流三组IO防设置减为输出口,考虑暂停输出导致门电路供电,导致电流消耗。

阻抗IO根据原来的情况,一般设置输入低。5.电池驱动电池驱动的主要功能是监控系统电源。它获取其他模块,并用于搜索系统的电源状态,无论是交流电源还是电池电源、电池电源等。

:百家乐官网。

本文来源:百家乐官网-www.f360media.com