7940|32

54

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

电源管理!请教! [复制链接]

各位兄弟:请教一下电源管理的一些问题
1、WINCE50的PM框架中,添加DEVICE支持电源管理
   第一项需要在注册表中加入ICLASS值:
   请问这个值是怎么规定的??
2、on   useidle   systemidel   suspend
  和 D0   D1       D2      D3    D4
  之间的区别和联系是什么呢??
  我的理解  on   useidle   systemidel   suspend 是PM所定义的WINCE设备电源的几种状态
        D0   D1       D2      D3    D4是设备驱动提供给PM的几种状态,可是他们是怎么联系到一起的呢?
   比如:D0状态当然是应该对应 ON
         D1状态又是对应的什么呢?
   是不是我理解有误?

谢谢各位!

最新回复

帮顶一下.  详情 回复 发表于 2010-5-10 22:40
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
3、D3状态有什么特别需要注意的地方??
   
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
4、我看到一篇博文(guopeixin郭大侠)
   上面说:
    1、(推荐)将PUBLIC下的PM的PDD层移植到BSP中,增加状态转换动作执行单元
    2、不修改PUBLIC下的代码,截获PBT_TRANSITION消息进行状态转换
       请教这两种方式到底是怎么实现的呢?状态转换是指哪些动作??
      我以前的电源管理就是busy->useidle->systemidle->suspend
     在useidle中直接调用寄存器关背光,在systemidle中直接调用寄存器关屏
      在suspend中直接调用GWESOEMPOWEROFF()函数,最终调用OEMPOWEROFF()函数挂起处理器
   请问状态转换是不是指的这些??
   
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
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电源管理的文章,另外微软也有详细说明。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢!
请问:系统电源状态和设备电源状态有什么联系和区别?
      也就是我的问题2中提到的
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 wangxin_801115 的回复:
谢谢!
请问:系统电源状态和设备电源状态有什么联系和区别?
? ? ? 也就是我的问题2中提到的


系统针对一些整体,通常和一些OEM接口函数有关系。设备针对某一个驱动。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
1、WINCE50的PM框架中,添加DEVICE支持电源管理
  第一项需要在注册表中加入ICLASS值:
  请问这个值是怎么规定的??

ICLASS 是根据驱动类型确定的,在www.armce.com/bbs有我一些帖子,讲明了这个。
PB帮助也有说明呢。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
谢谢!
请问:系统电源状态和设备电源状态有什么联系区别
      也就是我的问题2中提到的
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

9
 
ICLASS看郭大侠的博文已经理解了
现在还剩三个问题请教各位:
---------------------------------------------------------------------
1、on  useidle  systemidel  suspend (系统电源状态)
  和 D0  D1      D2      D3    D4    (设备电源状态)
  之间的区别联系是什么呢??
  就是他们是怎么关联到一起的呢??
----------------------------------------------------------------------
2、我看到一篇博文(guopeixin郭大侠)
  上面说:
    1、(推荐)将PUBLIC下的PM的PDD层移植到BSP中,增加状态转换动作执行单元
    2、不修改PUBLIC下的代码,截获PBT_TRANSITION消息进行状态转换
      请教这两种方式到底是怎么实现的呢?状态转换是指哪些动作??
      又如何通过截获消息进行状态转换呢?
      我以前的电源管理就是busy->useidle->systemidle->suspend
     在useidle中直接调用寄存器关背光,在systemidle中直接调用寄存器关屏
      在suspend中直接调用GWESOEMPOWEROFF()函数,最终调用OEMPOWEROFF()函数挂起处理器
      而busy->useidle->systemidle这个转换过程都是通过开一个线程在线程中读取注册表的
      设定超时时间,并通过waitfor(EVENT,TIMEOUT)来切换到下一个状态的
      请问状态转换是不是指的这些??
-----------------------------------------------------------------------------------
   3、设备电源状态D3状态有什么特别需要注意的地方??
————————————————————————————————————————————------
请做过电源管理的高手们帮忙解答一下,先谢谢啦!最好能举一些通俗易懂的例子!
谢谢谢谢!

 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

10
 
问题1已经解决,应该是通过注册表映射的

再请教上面的问题2、问题3、

问题4
当进入useidle 或者systemidle时,唤醒是通过什么方式唤醒的呢?
是否是通过同名事件??
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
这两天也在调试电源管理的驱动。我的理解,进入useridle和systemidle时是不需要唤醒的,一般在这两种状态下是关闭了LCD背光而已。只有进入Sleep或者Suspend时,系统才真正进入休眠,也才需要被唤醒。唤醒一般是通过外部按键实现的,应该不会是事件。
 
 
 

回复

98

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 sunrain_hjb 的回复:
这两天也在调试电源管理的驱动。我的理解,进入useridle和systemidle时是不需要唤醒的,一般在这两种状态下是关闭了LCD背光而已。只有进入Sleep或者Suspend时,系统才真正进入休眠,也才需要被唤醒。唤醒一般是通过外部按键实现的,应该不会是事件。


对,useridle和systemidle这个概念蛮模糊的,我看了好久才知道怎么回事。在里面只是做一些适当的处理,休眠唤醒就不必了。
其实微软会经常进入OEMIdle函数,这样会省电。
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 10 楼 sunrain_hjb 的回复:
这两天也在调试电源管理的驱动。我的理解,进入useridle和systemidle时是不需要唤醒的,一般在这两种状态下是关闭了LCD背光而已。只有进入Sleep或者Suspend时,系统才真正进入休眠,也才需要被唤醒。唤醒一般是通过外部按键实现的,应该不会是事件。

我这里说的唤醒并不是指将CPU从DEEP SLEEP中唤醒
我是说关掉背光、关掉LCD后
当我按TOUCH或者KEYBOARD PRESS DOWN 或者USB insert 或者SDCARD insert 再重新点亮屏的这一过程
是怎么做的
是通过事件通知系统进入busy状态的吗??
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

14
 
ding!
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

15
 
mark!
王工的问题总是那么细致!
期待解决!
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 12 楼 wangxin_801115 的回复:
引用 10 楼 sunrain_hjb 的回复:
这两天也在调试电源管理的驱动。我的理解,进入useridle和systemidle时是不需要唤醒的,一般在这两种状态下是关闭了LCD背光而已。只有进入Sleep或者Suspend时,系统才真正进入休眠,也才需要被唤醒。唤醒一般是通过外部按键实现的,应该不会是事件。

我这里说的唤醒并不是指将CPU从DEEP SLEEP中唤醒
我是说关掉背光、关掉LCD后
当我按TOUCH或者KEYBOARD PRESS DOWN 或者USB insert 或者SDCARD insert 再重新点亮屏的这一过程
是怎么做的
是通过事件通知系统进入busy状态的吗??

这个只要在背光驱动里处理IOCTL_POWER_SET即可,D0时背光全亮,D1时背光微亮,D2时关闭背光,D3就是休眠了。
从D2、D1到D0,不需要程序通知系统,有触屏或者其他交互操作,系统会自动进入D0状态的。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

17
 
从D2、D1到D0,不需要程序通知系统,有触屏或者其他交互操作,系统会自动进入D0状态的

不需要程序通知系统??????

不理解这里!!!

我看到common.reg中有ACtiveEvent事件

这个事件就是PM中Create的

我想正常情况下应该在TOUCHPAND驱动中把这个注册表中的事件读出来然后
setEvent
才可以在D1/D2状态下 切换到D0状态
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

18
 
建议楼主再看看相关帮助和参考代码。
我最近也在搞电源管理这一块,确定不需要在触屏或者其他驱动里Set这个Event,这个Event是做其他用途的。在没有用户交互的情况下,你可以通过程序设置相应的Event来阻止系统进入休眠状态。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 17 楼 sunrain_hjb 的回复:
建议楼主再看看相关帮助和参考代码。
我最近也在搞电源管理这一块,确定不需要在触屏或者其他驱动里Set这个Event,这个Event是做其他用途的。在没有用户交互的情况下,你可以通过程序设置相应的Event来阻止系统进入休眠状态。

费解,不知道是怎么实现这个地方的
目前我还没有板子看不到现象......

请问sunrain_hjb :
    您的电源管理是个什么样的模式呢?状态是怎么切换的呢?
我先说一下我目前的电源管理吧:
    我是在usedle中关背光,在systemidle中关LCD
唤醒useidle和systemidle的条件有keyboard 、TOUCH 、USB 、SDCARD insert
   在suspend中让CPU深度睡眠,唤醒是通过把GPIO0设置成唤醒中断唤醒深度睡眠
您现在唤醒useidle和systemidle的条件都有哪几个呢???
     
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

20
 
ding!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表