论文部分内容阅读
摘要:随着手机等便携式设备在生活中普及,如何使设备耗电量更小、使用时间更长就成为一个迫切需要解决的问题。本文首先对PM(电源管理)简单介绍,列出三种电源状态,并指出在电源管理起决定作用的是用户操作;其次,给出PM APIs一系列函数,并对函数的作用作了说明。最后,谈了对电源管理的一些看法。
关键词:Windows CE;PM
中图分类号:TP303 文献标识码:A文章编号:1009-3044(2008)33-1519-03
The Research on Power Manager in Windows CE
XIA Xu-Chao1,HUANG Dong-ping2,ZHU Li-li2
(1.Postgraduate Team 3 ICE,PLAUST,Nanjing 210007,China;2.Postgraduate Team 1 ICE,PLAUST,Nanjing 210007,China)
Abstract: Today,Cellular Equip ment is widely used in life.How to reduce the quantity of electric charge and longer the standby time is a big problem.Firstly,this paper introduces PM,lists three power states and point out that the most important in PM is User abilities.Secondly,it lists some APIs about PM and gives the explanations about the APIs.Finally,it talks about Application PM Considerations.
Key words:Windows CE;PM
1 Power Manager简介
Power Manager第一次出现是在2003年Windows Mobile中。在Power Manager发展初期的时候,只是有几个简单的功能。随着人们需求的提高和更多硬件设备的支持,越来越多的电源管理功能移植于其中。这就使得目前我们所见到的Power Managers是一个功能完善,实现方法多样,管理复杂的软件。
Power manager的主要作用是用来管理那些无法对自身进行控制的驱动。举个例子,USB设备能够自己识别是否有设备插入,如果没有设备插入,可以自行断电。但是对于LED来说,它并不知道用户是否在看它,也不知道何时应该断电。对于这些无法对自身进行控制的设备来说,Power manager能够有效地对其进行电源管理。
Power manager是如何实现它的管理得了?它是通过“System Power States”这个概念来实现的。Power manager有其所有控制驱动的列表。对每个状态,都有与之相对应的驱动设置列表。比如说,对某一状态,系统设置为正常运行,对另一个状态,系统则关闭屏幕和背景灯,但其他一切正常运行。下面将对三种电源状态进行介绍。
2 电源状态
电源状态按类型分为CPU、系统和设备电源状态。每种电源状态都不尽相同,下面将对每种类型各种状态进行详细的介绍。
2.1 CPU 电源状态(下面以PXA270为例,讲一下CPU的五种电源模式)
1) RunCPU完全工作状态;
2) Idle给CPU 时钟停止,外设照常运行,可以通过中断来恢复,特别是在13M模式下,称为deep-idle;
3) StandbyCPU、外设为低的电压状态或停止,SRAM可选择停止,LCD停止 当然比以上状态恢复时间长;
4) Sleep睡眠,CPU、外设停止;
5) Deep-sleep基本等同断电,只有RTC 和相关的I/O指针有电(RTC能量来自从备用电池输入);
需要说明的是,Sleep 和deep-sleep 唤醒后需要从boot loader重新启动,而Idle和Standby可以从原先保存的状态接着向下运行。上面所给出的五种状态是根据空闲时间的长短来决定的。时间越长,设备就会从Run到Deep-sleep不断的过渡。
2.2 系统电源状态
1) Off 直接给系统断电
2) On 系统正常工作
3) Userldle 系统在运行,但用户没有跟其进行交互
4) Systemldle 更长的时间没有跟设备作交互,进程仍然运行。比如说:显示、声卡和触摸屏等都断电,但是CPU正常运行。
5) Suspend CPU睡眠、RAM自动更新、所有的驱动都不可用。
不同的操作系统具有不同的系统状态,上面所给出的五种系统状态并不是所有的系统都具有的。其只具有普遍性但不具有特殊性。
2.3 设备电源状态
1) Full On (D0) 在这个状态下,设备正常运行,为用户实现其所以功能。
2) Low On(D1)在这个状态下,设备不需要完全的使用,工作于低电压状态。
3) Standby(D2)在这个状态下,设备能够有效地停止并能被请求自动唤醒。
4) Sleep(D3)在这个状态下,设备是比Standby更低的被使用,而且唤醒的时间更长。
5) Off(D4)设备停止使用。
上面所给出的五种设备状态并不是所有的设备都具有。当然,设备都支持D0、D1这两个状态,是否支持其他三种的状态,需要查看设备说明书。
图2User Activity在系统状态改变中的作用
图4OEMIdle操作流程
2.4 PM 与三种电源状态的关系
图1显示Power Manger 与三种状态的相互关系。PM并不直接对CPU电源状态直接操作,通过管理系统电源和设备电源状态来实现整个系统的电源管理。需要特别强调的是,真正决定整个系统电源的状态是User Activity。通过图2,可以直观的发现User activity在系统状态改变时的作用。
3 Power Manger APIs
在介绍Power manger APIs之前,我们先介绍Power manger APIs在整个系统中的作用。
如图3所示,Power Manager为Applications和Drives提供PM APIs接口。这样,Applications和Drives就可以分别利用Applications APIs和Drives APIs来实现对PM APIs接口的访问。由此可见,PM APIs是完成Power Manager与外界交互的重要部分。下面将介绍三种级别的PM APIs[1]。
3.1 Kernel-level APIs
Kernel-level APIs是最重要的APIs。系统PW通过调用Kernel-level APIs管理CPU的状态。下面介绍两个重要的Kernel-level APIs:OEMIdle和OEMPowerOff
1) OEMIdle
OEMIdle为无线程运行状态.在这个状态下,CPU被置于能快速恢复的低消耗电源状态。
2) OEMPowerOff
OEMPowerOff 为挂起或关闭系统状态。在这个状态下(以挂起为例),系统被设置为最低电源状态。CPU停止运行、DROM自我更新、中断不可用(唤醒系统中断可用)、当收到唤醒中断时,系统重新启动。
3.2 Device-level APIs[]
PM通过IOCTL(I/O Control Codes)代码来与设备驱动交互(设备必须支持IOCTL)。设备驱动则通过DevicePowerNotify来要求PM调整合适的设备状态。下面列举了一下Device-level APIs,并作出解释。
1) IOCTL_POWER_CAPABILITIES设备通知PM其所支持的电源状态和相应的一些参数。
2) IOCTL_POWER_QUERY检查设备是否进入一个新的电源状态。
3) IOCTL_POWER_SET要求设备更新电源信息
4) IOCTL_POWER_GET要求设备告知PM当前电源状态
5) IOCTL_REGISTER_POWER_RELATIONSHIP列出子设备和父设备的相互关系
3.3 Application APIs
Application APIs主要有Power Manager APIs和Power Notification APIs两种。
3.3.1 Power Manager APIs
Power Manager APIs是用来设定和询问系统或设备电源状态的APIs。其中函数主要有:
1) GetSystemPowerState返回当前系统电源状态名称
2) SetSystemPowerState要求PM改变当前电源状态
3) SetPowerRequirement要求PM设定当前电源状态到最低标准
4) ReleasePowerRequirement通知PM释放SetPowerRequirement中设定的最低电源状态
5) GetDevicePower返回某一设备当前电源状态
6) SetDevicePower设定某一设备的电源状态
3.3.2 Power Notification APIs
Power Notification APIs用来接收Power Manager或设备驱动产生的电源触发事件。其主要应用函数有:
1) PBT_RESUME系统从挂起状态恢复时的信号
2) PBT_POWERSTATUSCHANGE系统从交流电、直流电之间改变的信号
3) PBT_TRANSITION系统电源状态发生改变时产生的信号
4) PBT_POWERINFOCHANGE电池信息或交流电状态发生改变时的产生的信号
4 对PM设计的一些个人看法
在文章的结尾,我想谈谈对PM 设计的一些个人看法。
1) 需要“我”改变系统和设备电源状态吗?
一般情况下,应用程序已经为其设定好了最佳的电源状态。比如说:当你使用media player时,如果你用来观看视频,那么音频器件、背景灯和显示屏都要使用。而如果你仅仅是用来听歌,那么只有音频器件会被用到。
2) 一些很小的垃圾应用程序能给整个电源管理带来“毁灭”。
举个例子来说明:用户给系统装了一些很小的应用程序。当用户停止与系统交互时,这些程序仍然在后台运行。我们知道CPU是很耗电的,这些小程序会导致电池很快就被耗尽。
3) 那些设备是比较耗电的?
背景灯、CPU、Cell Radio、蓝牙、LED都是比较耗电的,我们可以在不需要的时候关闭这些设备来延长系统使用时间。
参考文献:
[1] 何宗键.Windows CE嵌入式系统[M].北京:北京航空航天大学出版社,2006.
[2] 刘彦博,胡砚,马骐.Windows Mobile平台应用与开发[M].北京:人民邮电出版社,2006.
关键词:Windows CE;PM
中图分类号:TP303 文献标识码:A文章编号:1009-3044(2008)33-1519-03
The Research on Power Manager in Windows CE
XIA Xu-Chao1,HUANG Dong-ping2,ZHU Li-li2
(1.Postgraduate Team 3 ICE,PLAUST,Nanjing 210007,China;2.Postgraduate Team 1 ICE,PLAUST,Nanjing 210007,China)
Abstract: Today,Cellular Equip ment is widely used in life.How to reduce the quantity of electric charge and longer the standby time is a big problem.Firstly,this paper introduces PM,lists three power states and point out that the most important in PM is User abilities.Secondly,it lists some APIs about PM and gives the explanations about the APIs.Finally,it talks about Application PM Considerations.
Key words:Windows CE;PM
1 Power Manager简介
Power Manager第一次出现是在2003年Windows Mobile中。在Power Manager发展初期的时候,只是有几个简单的功能。随着人们需求的提高和更多硬件设备的支持,越来越多的电源管理功能移植于其中。这就使得目前我们所见到的Power Managers是一个功能完善,实现方法多样,管理复杂的软件。
Power manager的主要作用是用来管理那些无法对自身进行控制的驱动。举个例子,USB设备能够自己识别是否有设备插入,如果没有设备插入,可以自行断电。但是对于LED来说,它并不知道用户是否在看它,也不知道何时应该断电。对于这些无法对自身进行控制的设备来说,Power manager能够有效地对其进行电源管理。
Power manager是如何实现它的管理得了?它是通过“System Power States”这个概念来实现的。Power manager有其所有控制驱动的列表。对每个状态,都有与之相对应的驱动设置列表。比如说,对某一状态,系统设置为正常运行,对另一个状态,系统则关闭屏幕和背景灯,但其他一切正常运行。下面将对三种电源状态进行介绍。
2 电源状态
电源状态按类型分为CPU、系统和设备电源状态。每种电源状态都不尽相同,下面将对每种类型各种状态进行详细的介绍。
2.1 CPU 电源状态(下面以PXA270为例,讲一下CPU的五种电源模式)
1) RunCPU完全工作状态;
2) Idle给CPU 时钟停止,外设照常运行,可以通过中断来恢复,特别是在13M模式下,称为deep-idle;
3) StandbyCPU、外设为低的电压状态或停止,SRAM可选择停止,LCD停止 当然比以上状态恢复时间长;
4) Sleep睡眠,CPU、外设停止;
5) Deep-sleep基本等同断电,只有RTC 和相关的I/O指针有电(RTC能量来自从备用电池输入);
需要说明的是,Sleep 和deep-sleep 唤醒后需要从boot loader重新启动,而Idle和Standby可以从原先保存的状态接着向下运行。上面所给出的五种状态是根据空闲时间的长短来决定的。时间越长,设备就会从Run到Deep-sleep不断的过渡。
2.2 系统电源状态
1) Off 直接给系统断电
2) On 系统正常工作
3) Userldle 系统在运行,但用户没有跟其进行交互
4) Systemldle 更长的时间没有跟设备作交互,进程仍然运行。比如说:显示、声卡和触摸屏等都断电,但是CPU正常运行。
5) Suspend CPU睡眠、RAM自动更新、所有的驱动都不可用。
不同的操作系统具有不同的系统状态,上面所给出的五种系统状态并不是所有的系统都具有的。其只具有普遍性但不具有特殊性。
2.3 设备电源状态
1) Full On (D0) 在这个状态下,设备正常运行,为用户实现其所以功能。
2) Low On(D1)在这个状态下,设备不需要完全的使用,工作于低电压状态。
3) Standby(D2)在这个状态下,设备能够有效地停止并能被请求自动唤醒。
4) Sleep(D3)在这个状态下,设备是比Standby更低的被使用,而且唤醒的时间更长。
5) Off(D4)设备停止使用。
上面所给出的五种设备状态并不是所有的设备都具有。当然,设备都支持D0、D1这两个状态,是否支持其他三种的状态,需要查看设备说明书。
图2User Activity在系统状态改变中的作用
图4OEMIdle操作流程
2.4 PM 与三种电源状态的关系
图1显示Power Manger 与三种状态的相互关系。PM并不直接对CPU电源状态直接操作,通过管理系统电源和设备电源状态来实现整个系统的电源管理。需要特别强调的是,真正决定整个系统电源的状态是User Activity。通过图2,可以直观的发现User activity在系统状态改变时的作用。
3 Power Manger APIs
在介绍Power manger APIs之前,我们先介绍Power manger APIs在整个系统中的作用。
如图3所示,Power Manager为Applications和Drives提供PM APIs接口。这样,Applications和Drives就可以分别利用Applications APIs和Drives APIs来实现对PM APIs接口的访问。由此可见,PM APIs是完成Power Manager与外界交互的重要部分。下面将介绍三种级别的PM APIs[1]。
3.1 Kernel-level APIs
Kernel-level APIs是最重要的APIs。系统PW通过调用Kernel-level APIs管理CPU的状态。下面介绍两个重要的Kernel-level APIs:OEMIdle和OEMPowerOff
1) OEMIdle
OEMIdle为无线程运行状态.在这个状态下,CPU被置于能快速恢复的低消耗电源状态。
2) OEMPowerOff
OEMPowerOff 为挂起或关闭系统状态。在这个状态下(以挂起为例),系统被设置为最低电源状态。CPU停止运行、DROM自我更新、中断不可用(唤醒系统中断可用)、当收到唤醒中断时,系统重新启动。
3.2 Device-level APIs[]
PM通过IOCTL(I/O Control Codes)代码来与设备驱动交互(设备必须支持IOCTL)。设备驱动则通过DevicePowerNotify来要求PM调整合适的设备状态。下面列举了一下Device-level APIs,并作出解释。
1) IOCTL_POWER_CAPABILITIES设备通知PM其所支持的电源状态和相应的一些参数。
2) IOCTL_POWER_QUERY检查设备是否进入一个新的电源状态。
3) IOCTL_POWER_SET要求设备更新电源信息
4) IOCTL_POWER_GET要求设备告知PM当前电源状态
5) IOCTL_REGISTER_POWER_RELATIONSHIP列出子设备和父设备的相互关系
3.3 Application APIs
Application APIs主要有Power Manager APIs和Power Notification APIs两种。
3.3.1 Power Manager APIs
Power Manager APIs是用来设定和询问系统或设备电源状态的APIs。其中函数主要有:
1) GetSystemPowerState返回当前系统电源状态名称
2) SetSystemPowerState要求PM改变当前电源状态
3) SetPowerRequirement要求PM设定当前电源状态到最低标准
4) ReleasePowerRequirement通知PM释放SetPowerRequirement中设定的最低电源状态
5) GetDevicePower返回某一设备当前电源状态
6) SetDevicePower设定某一设备的电源状态
3.3.2 Power Notification APIs
Power Notification APIs用来接收Power Manager或设备驱动产生的电源触发事件。其主要应用函数有:
1) PBT_RESUME系统从挂起状态恢复时的信号
2) PBT_POWERSTATUSCHANGE系统从交流电、直流电之间改变的信号
3) PBT_TRANSITION系统电源状态发生改变时产生的信号
4) PBT_POWERINFOCHANGE电池信息或交流电状态发生改变时的产生的信号
4 对PM设计的一些个人看法
在文章的结尾,我想谈谈对PM 设计的一些个人看法。
1) 需要“我”改变系统和设备电源状态吗?
一般情况下,应用程序已经为其设定好了最佳的电源状态。比如说:当你使用media player时,如果你用来观看视频,那么音频器件、背景灯和显示屏都要使用。而如果你仅仅是用来听歌,那么只有音频器件会被用到。
2) 一些很小的垃圾应用程序能给整个电源管理带来“毁灭”。
举个例子来说明:用户给系统装了一些很小的应用程序。当用户停止与系统交互时,这些程序仍然在后台运行。我们知道CPU是很耗电的,这些小程序会导致电池很快就被耗尽。
3) 那些设备是比较耗电的?
背景灯、CPU、Cell Radio、蓝牙、LED都是比较耗电的,我们可以在不需要的时候关闭这些设备来延长系统使用时间。
参考文献:
[1] 何宗键.Windows CE嵌入式系统[M].北京:北京航空航天大学出版社,2006.
[2] 刘彦博,胡砚,马骐.Windows Mobile平台应用与开发[M].北京:人民邮电出版社,2006.