Suspend 状态是将 CPU 中,所有外围和cpu core的clock ,power 都停掉,只留下
•DRAM refresh
•RTC
•INT
三个部份还有动作,这样的目的是要减少电源消耗,同时尽量维持执行状态。
让装置回到正常状态的方式有
•外部中断
•RTC TimerUp (也是中断)
从PowerOff中恢复后,要尽量让系统回到当初power Off的状态。
Suspend/Recover的动作有一点像Task Switch,就是Stack Frame的操作:在断电前将StackFrame保存在固定的地方,Recover时到那个地方拿回Stack Frame回存,动作跟TaskSwitch一模一样。
CE 的Suspend/Resume 动作 需要driver的配合,所以所有Driver都要implement (and export) PowerUp/PowerDown function。另外GUI 的部份也要response to WM_XX 这个power state change message。
在PUBLIC/COMMON/OAK/DRIVERS/PM/MDD/pmresume.cpp 的comment中有说明:
Application (Drvier) 中不可以直接呼叫 PowerOffSystem( )来suspend system,要藉由 SetSystemPowerState ( ) 这个 Win32 funtion 来转换 power status 到 suspend/resume 状态才行。 因为 SetSystemPowerState( ) 在呼叫PowerOffSystem( ) 之前,还会呼叫PM 的function 一一呼叫所有Device 的 PowerOn/PowerDown function,还会post necessary message to GWES server,最后才呼叫PowerOffSystem( )将所有cpu core关闭。
SetSystemPowerState()是一个手套,会去呼叫PlatformSetSystemPowerState(),
•DRAM refresh
•RTC
•INT
三个部份还有动作,这样的目的是要减少电源消耗,同时尽量维持执行状态。
让装置回到正常状态的方式有
•外部中断
•RTC TimerUp (也是中断)
从PowerOff中恢复后,要尽量让系统回到当初power Off的状态。
Suspend/Recover的动作有一点像Task Switch,就是Stack Frame的操作:在断电前将StackFrame保存在固定的地方,Recover时到那个地方拿回Stack Frame回存,动作跟TaskSwitch一模一样。
CE 的Suspend/Resume 动作 需要driver的配合,所以所有Driver都要implement (and export) PowerUp/PowerDown function。另外GUI 的部份也要response to WM_XX 这个power state change message。
在PUBLIC/COMMON/OAK/DRIVERS/PM/MDD/pmresume.cpp 的comment中有说明:
Application (Drvier) 中不可以直接呼叫 PowerOffSystem( )来suspend system,要藉由 SetSystemPowerState ( ) 这个 Win32 funtion 来转换 power status 到 suspend/resume 状态才行。 因为 SetSystemPowerState( ) 在呼叫PowerOffSystem( ) 之前,还会呼叫PM 的function 一一呼叫所有Device 的 PowerOn/PowerDown function,还会post necessary message to GWES server,最后才呼叫PowerOffSystem( )将所有cpu core关闭。
SetSystemPowerState()是一个手套,会去呼叫PlatformSetSystemPowerState(),