最近一直在看window mobile 5.0的电源管理,试图抓住他们的思想。终于发现光看文档是不会有什么感觉的,非要看代码,然后回来结合文档才知道是怎么回事。
所谓的电源管理(power management),就是让电池驱动的winCE嵌入式系统,能够有尽可能长的使用时间。这里主要想谈谈pocket PC。
系统中device.exe是加载大部分驱动程序的进程,wince5.0的电源管理核心代码在pm.dll中,而pm.dll也是device.exe加载的对象。所以这是集中管理的模式,pm.dll承载了绝大多数管理代码。
从软件层面看,电源管理中涉及两种状态:system power states和device power states。
System power states包括:On,Suspend,Backlight off,Resuming,Unattended,User idle。这是“系统”的状态,也可以理解为CPU的状态或者操作系统得状态。
Device power states包括几个等级:D0,D1,D2,D3,D4。这些是winCE管理的“设备”状态,如果你是某个设备的驱动程序员,每个设备都有自己的电源管理模式,最基本的是开和关两个状态,对应D0和D4。因此D1,D2,D3自然就是开与关之间的状态。就是这么简单,不要想复杂了。
“系统”状态和“设备”状态他们之间有系统默认的对应关系,就是说对于一个“系统状态”,系统中所有设备都默认被设置成某个“设备状态”(除非有特殊说明,某些设备可以对应不同的“设备状态”)。on对应D0,即系统在on状态时,所有的设备都是打开的。suspend对应D3,即系统在睡眠的时候,所有设备都被设置为D3。Backlight off对应D0,同理所有的设备打开,不过这个状态有特殊说明(要不它如何区别on和backlight off),bkl1:对应D4,即,背光灯关闭,因此backlight off就是其他所有设备打开,bkl1:关闭。同理可以理解其他的系统状态。Suspend对应D3,resuming对应D2等等。
整个wince系统就是一个状态机,每个状态现在都可以理解,但是有状态,就有状态转换,在特定条件下的转换。几个系统状态中只有一个状态suspend是比较稳定的,因为其他的几个状态都会经过timeout最后变成suspend。引用wince开发人员Mike Calligaro的话,装有wince的设备就像一个疲劳的看守坟场的保安在值夜班,正托着下垂的眼皮在看电视,偶尔拍他一下,他才醒过来。
2 条评论:
cpuwolf你好,
"bkl1:对应D4,即,背光灯关闭,因此backlight off就是其他所有设备打开,bkl1:关闭"
謝謝你在網路上分享的文章, 上述這段話讓我搞糊塗了, Backlight off是對應D0還是D4呢?
另外在SC3224B的Backlight驅動程式裡, D0是Backlight On, 所以你文章所描述的Backlight行為, 是在哪個Platform上呢?
backlight off是系统状态,D0、D4是设备状态,请区别对待
发表评论