伴随着移动嵌入式产品的遍及,电源办理已经成为重要技能指标和产品的有机组成。典型移动嵌入式设备对能耗越来越灵敏,电源办理技能正成为产品规划的要害所在。为了应对电源办理面对的应战,怎么规划出高效的嵌入式体系的电源办理已成为研讨热门。
典型移动嵌入式体系能耗首要部件包含嵌入式微处理器CPU、内存、LCD及背光、电源转化部件、DSP、外设操控器等。在这些元件中,有些元件能耗固定,有些元件可在不同时刻段作业并有多种可控的耗能状况,后者的有用运用成为嵌入式体系节能的要害所在。
1.什么是WinCE电源办理
(1)电源办理概念与办法
在电池供电的移动嵌入式体系中,一般选用高效率的电源芯片用于供电办理,或选用大容量的电池以处理能耗需求,但这两种技能的开展还无法满意移动嵌入式设备的动态功耗和静态功耗。有一种办法能够和谐高功用与低功耗之间的对立,便是依据体系负载进行功用调理,经过中止某些模块的时钟和电源供给将能耗降至最低。
嵌入式体系按功率耗费由小到大分为睡觉(sleep)、闲暇(idle)、运转(Run)等形式。大多时刻内,在运转态(Run)时设备悉数正常作业,而在睡觉与闲暇形式时处理器则能够依照特定的形式进行相应的节能。因而,电源办理的意图是节能,底子节能办法是使体系当令的进出休眠状况。在节能状况下处理器挂起,主存储器运转在节能的自改写形式,只要功耗办理电路、唤醒电路持续作业。比方用户按下On/Off按钮,或许监督用户活动的定时器超时,或许运用程序API都能够使得嵌入式体系休眠,当用户再次按下On/Off或许有其他唤醒中止产生时,体系就会退出休眠。因而,电源办理模块和用户活动状况密不可分,电源办理是用户活动所驱动的。
WinCE处理用户与体系交互的部分是GWES,所以前期电源办理作业也是由GWES来完成。但GWES供给的电源办理模块功用过于粗糙呆板,一切子设备只能有On和Suspend状况,运用程序无法得到任何状况转化告知。后来,WinCE引入了电源办理PM(Power Manager)模块,用以代替GWES中的电源办理功用,新的电源办理模块供给更完好和灵敏的功用,如子设备电源状况能够独自设定,运用能够获得电源告知等。因而,电源办理器担任办理设备电源,而且与不支撑电源办理功用的设备和运用兼容,在内核OAL层、设备驱动程序和运用程序之间充任中间人人物。
(2)电源办理器结构
在运用电池供电的WinCE体系中,正确规划电源办理非常要害。在功用上大致能够分为体系级电源办理、动态电源办理、设备电源办理等三类。一般,运用程序在大多数时刻都不需求重视WinCE 设备的电源损耗,可是在某些时分要注意这些损耗。WinCE电源办理器经过一个名为Pm.dll的动态链接库与设备办理器Device.exe链接。Pm.dll动态链接库支撑三类接口:一是驱动程序接口:为需求进行电源办理的设备的驱动程序运用;二是运用程序接口:为需求运用电源办理的运用程序运用;三是提示接口(Notification):为需求承受电源事情提示的运用程序运用。
例如,WinCE体系先查看使命负载状况,假如没有需求运转的使命,则一般进入闲暇节能状况等候唤醒,在闲暇一段时刻后进入深度睡觉,挂起到RAM中或许硬盘上。在运转使命期间,WinCE还能够运用硬件供给的电源办理功用动态调理芯片运转电压和频率,对体系进行愈加详尽的电源办理。
2.WinCE电源办理的分类
(1)体系电源状况
Win CE体系电源状况更多的是代表体系电源的一种装备计划,它是各个子设备电源装备的调集。它设定一种或许呈现的景象,事前拟定了此景象下电力分配战略(哪些子设备翻开,哪些子设备封闭)。WinCE支撑以下几种电源状况:①ON状况,用户在主动运用设备。②UserIdle状况,用户与设备中止交互,但仍有或许运用设备。③SystemIdle状况,在经过一段时刻的UserIdle后进入此状况,可是驱动和体系依然活动。④Suspend状况,当驱动程序和体系进程不再与体系交互时进入此状况。⑤ColdReboot和Reboot状况,冷启动后体系电源状况。
因而,在这个基础上技能人员能够依据自己的渠道特色,添加新的战略来满意不同移动嵌入式产品的需求。常见的做法是规划一个电源按键的流驱动,当检测到按键时分呼叫API将体系电源转化到Suspend,如On/Off按键。还有便是参加背灯操控,比方在On状况下恳求显现驱动翻开背灯,在UserIdle和SystemIdle状况下恳求显现驱动封闭背灯。
(2)设备电源办理
WinCE参加了高档的电源办理组件功用,它答应每个外设具有自己的电源状况,这有别于一般的体系电源状况(System Power State),故被称作设备电源状况(Device Power State)。现在的运用程序一般都有才能设置单个外设的电源状况,比方一个文件传输程序,在坚持串口或许蓝牙端口正常通讯时,能够封闭显现屏幕和背光,这就为完成更高档别的动态电源办理供给了或许。
电源办理器和支撑电源办理的设备之间的交互包含两种机制:一是电源办理器到驱动程序,电源办理器运用DeviceIoControl()函数向设备驱动程序发送I/O操控(IOCTLs),因而设备有必要能呼应电源办理器的查询、状况设置等IOCTLs。二是驱动程序到电源办理器,驱动程序运用DevicePower Notify()函数与电源办理器交互,例如恳求电源办理器把它的设备置于某种状况,假如电源办理器承受该恳求则经过发送IOCTL_POWER_SET等IOCTLS来进行设置。
(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负荷状况驱动,代表体系闲暇;后者是用户活动驱动,代表用户闲暇。
2.从运用程序交互剖析电源办理状况
当WinCE 体系被挂起,为了省电用户需求封闭处理器及大部分设备供电,然后在需求唤醒时再经过定时器或无线模块唤醒。一般来说,被唤醒后体系会回来到与体系挂起前相同的状况,因而运用程序底子不知道体系曾被挂起,除非它明确地恳求当体系挂起时告知它。因而从运用程序的视点看,电源办理有三种办法:查询电源状况、改动电源状况和避免电源状况改动。
(1)查询电源状况
对嵌入式体系来说,OEM厂商界说了体系的电源状况。例如,电源状况或许是翻开(On),闲暇(Idle)和挂起(Suspend),还有ScreenOff、InCradle和 OnBattery等。从运用程序的观念看,电源办理程序供给了告知电源状况改动的才能以及经过一系列的函数一致改动电源状况的才能。
因而,查询体系当时的电源状况是WinCE的一个重要功用,能够调用DWORD GetSystemPowerStatusEx2(PSYSTEM_POWER_STATUS_EX2,DWORD dwLen,BOOL fUpdate)来查询。函数用三个参数来告知WinCE体系查询电池驱动最终的信息或许直接回来电池缓存中的信息,体系大约每5秒查询一次电池状况。又由于WinCE不验证电池驱动回来的数据,因而不同的体系有不同的改动,这个函数回来来的数据是首要依赖于电池驱动。例如,许多体系在运用AC电源时不陈述准确的电源级数,另一些体系则相反。
(2)改动电源状况
运用程序能经过一系列的办法改动体系的电源状况,在WinCE中首选的办法是运用电源办理程序。电源办理程序供给函数来答应运用程序来操控电源状况,如运用程序经过调用函数SetSystemPowerState来恳求特定的电源状况。一般有两个办法来操控电源,第一个办法是运用程序给定一个电源设定;第二个办法是运用程序恳求电源状况不要低于给定的等级。
常见的例如:①封闭电源,运用程序经过调用GwesPowerOffSystem函数挂起体系,如函数void GwesPowerOffSystem(void)的调用就会挂起体系。② 封闭屏幕,假如体系是有色背光显现,那么首要的电源耗费不是CPU而是背光。在某一些环境下,一个运用程序运转时并不需求显现在屏幕上。例如音乐播放器运用程序,当用户听音乐的时分不重视屏幕,在这些景象下封闭背光将意味着进步电池寿数。当然,当用户想看屏幕时,任何封闭背光运用程序就需求一个简略的办法来从头翻开屏幕。显现操控是经过Ext-Escape函数完成,这个函数答应运用程序翻开或封闭显现。别的,WinCE没有一个一致的办法来操控背光的亮度,每个体系都有它自己的OEM特有办法来操控背光亮度。③翻开体系电源,意思是说当被挂起的运用程序要再次运转时,有必要要有一个办法来唤醒一个挂起的体系电源。办法能够是运用程序经过运用音讯API(Notification API)把体系唤醒。在一般状况下,OEM厂商会分配一些中止条件以便电源翻开或唤醒。
(3)避免体系封闭电源
另一方面,避免体系挂起也是一个重要的问题。WinCE体系一般被设置为当一段时刻没有用户输入就主动挂起。因而,假如定时器抵达预先的没有用户输入的距离,体系会主动挂起。当要避免主动挂起时,运用程序能够周期性地调用这个函数:void WINAPI SystemIdleTimerReset (void),这个函数能重设WinCE用来监督用户输入的定时器。所以当一个运用程序需求更改超时值时,就能够经过调用SystemIdleTimerReset把挂起超时值改动。一般来说,WinCE体系维护三个超时值,避免电源被主动挂起能够运用SystemParametersInfo来查询这三个值,并在最短时刻内回来调用SystemIdleTimerReset。假如超时值被设置为0,表明超时值被制止。
(4)电源告知
最终,电源办理程序还有一个非常受欢迎的特色,便是能够在体系电源状况改动时告知运用程序,这能够让运用程序从手动检测电源状况中摆脱出来。运用程序经过调用RequestPowerNotifications恳求电源办理程序当电源状况改动的时分,发送一个告知给运用程序,电源办理程序再经过一个由运用程序树立的音讯行列发送此告知。
总归,嵌入式电源办理在WinCE体系是一个快速开展的研讨课题。它对移动嵌入式产品的规划具有要害性影响,一个高效的电源办理规划能够协助移动嵌入式产品在市场竞争中锋芒毕露,旗开得胜。