移动嵌入式 WinCE 电源管理应对有技巧
2010-04-01 01:00:00 来源:WEB开发网(3)应用程序与电源管理器交互
Win CE应用程序与电源管理器有两种交互机制:一是应用程序接口,用以获取当前系统和设备的电源状态。应用程序通过 SetSystemPowerState()来设置系统电源状态,通过SetDevicePower来设置子设备电源状态,通过 SetPowerRequirement通知电源管理器将子设备设置在特殊电源状态下,不随系统电源改变。二是电源事件提醒接口。为了实现提醒接口,应用程序还可通过CreateMsgqueue()函数建立消息队列,将其句柄传给电源管理器,电源管理器再把提醒发送到消息队列中,调用者可选择可用提醒的一个子集进行响应。
(4)OAL层电源管理的实现
OEM Adaptation Layer(OAL)是一层与硬件平台相关的代码,它在电源状态转换中扮演着重要的角色。在WinCE中,OAL层电源管理通过OEMIdle()和 OEMPowerOff()函数实现。其中OEMInit是初次上电时(或在冷启后)被调用,如初始化系统内存,建立调试环境,设置系统中断等;当系统中没有任何可调度的线程时,内核就调用OEMIdle()以实现降低处理器的频率来达到省电目的,这个函数在BSP中可以由OEM修改定制。
当有外部中断时,CPU可从其中恢复,如当用户按下OFF按钮或者应用调用API进入suspend状态时候,内核会调用 OEMPowerOff()函数,在系统唤醒后继续从OEMPowerOff()被挂起处执行。OEMPowerOff函数是基于硬件平台来实现的,它能进行CPU寄存器保存、设置及唤醒恢复等功能。系统Idle状态和前面说的UserIdle状态是不同概念,前者是CPU负荷情况驱动,代表系统空闲;后者是用户活动驱动,代表用户空闲。
3.从应用程序交互分析电源管理状态
当WinCE 系统被挂起,为了省电用户需要关闭处理器及大部分设备供电,然后在需要唤醒时再通过定时器或无线模块唤醒。一般来说,被唤醒后系统会返回到与系统挂起前一样的状态,因此应用程序根本不知道系统曾被挂起,除非它明确地请求当系统挂起时通知它。因此从应用程序的角度看,电源管理有三种方式:查询电源状态、改变电源状态和防止电源状态改变。
(1)查询电源状态
对嵌入式系统来说,OEM厂商定义了系统的电源状态。例如,电源状态可能是打开(On),空闲(Idle)和挂起(Suspend),还有
更多精彩
赞助商链接