睡眠过程:
1.调用SetSystemPowerState进入睡眠状态.
2.电源管理驱动里设置设备的电源状态;
3.调用PowerOffSystem()进入内核处理;
4.调用各设备驱动的PowerDown();
5.调用OEMPowerOff():
(1).保存芯片所有的寄存器值到一个静态数组(就是堆栈中);
(2).先进行平台相关的动作,比如清屏,设置AD,USB等;
(3).设置IO,关闭kitl等;
(4).呼叫OALCPUPowerOff()进行挂起.

OALCPUPowerOff()是一个位于Startup.s中的汇编函数,它按照下面的流程实现挂起功能:
a.保存通用寄存器R4-R12,LR到堆栈;
b. 保存WakeUp后的地址,MMU寄存器,进入各模式将SP和LR寄存器保存到内存RAM的某一个位置,这个位置是由config.bib指定保留的.为什么不象之前一样保存到堆栈呢?因为系统唤醒后跳转到Reset开始执行,这时候堆栈还没有初始化.这也是PowerOff过程复杂的原因;
c.计算刚才保存的数据块的检验和并保存到GSTATUS3寄存器.(GSTATUS3和GSTATUS4是状态寄存器,挂起直到唤醒过程都会保存里面的值);
d.禁止中断;
e.清Cache;
f.使能唤醒中断,能唤醒可以是外部中断0,1,2,或者RTC中断;
g.设置SDRAM进入自刷新模式,最终CPU进入PowerOff状态.

唤醒过程:
   CPU的PowerOff模式和其他睡眠模式不同,其他的睡眠模式唤醒后会从睡眠处继续运行,而PowerOff模式唤醒后是从Reset处执行.Reset有3种可能情况:
(1).正常的上电冷启动,包括Reset信号线有效造成的Reset.
(2).看门狗失效造成的Reset.
(3).PowerOff之后被外部中断或者RTC 中断唤醒的Reset.
在Reset之后可以根据GSTATUS2寄存器来判断是否从PowerOff唤醒.还有一个问题,不论何种方式Reset,都是先执行BootLoader的代码,所以唤醒过程需要BootLoader的参与配合.具体流程:
1.外部中断或者RTC中断唤醒CPU进入BootLoader
2.BootLoader中停止SDRAM的自刷新模式,然后跳到内核开始地址.有些BootLoader会做的更多,因为前面我们把数据都保存到了RAM中的某处,事实上只要知道这个RAM地址就可以取得数据进入唤醒过程.所以有些BootLoader会直接去唤醒.我认为这并不好,增加了BootLoader的依赖性,层次间的耦合性也高了.
3.检查CheckSum,因为之前设置SDRAM处于自刷新状态,在PowerOff期间SDRAM里面的数据会保持,增加CheckSum是有必要的安全措施.
4.从RAM取得之前保存的参数,其中包含了唤醒后应该跳转的地址,和MMU的配置数据以及各个模式的SP和LR.
5.启动MMU
6.跳到唤醒后的新地址.
7.进入各个模式恢复SP和LR.
8.恢复R4-R12,LR
9.跳转到LR,即相当于OALCPUPowerOff()返回,返回到OEMPowerOff()中.
10.打开kitl,恢复所有寄存器,恢复平台之前状态.
11.调用各设备驱动的PowerUp();
12.回到电源管理驱动中,更新各设备驱动的电源状态;
13.电源管理驱动发出系统状态变迁的消息通知;
14.恢复正常。

唤醒过程实际是一个挂起的逆过程.如此,系统成功唤醒,所有运行的应用程序不知道自己被系统挂起过而继续运行.

WINCE 睡眠与唤醒相关推荐

  1. WINCE6.0+S3C2443睡眠和唤醒(sleep and wake up)的实现

    1. 系统进入睡眠状态的过程 1.1 硬件相关电路 我们的产品使用GPF0/EINT0作为系统进入睡眠和从睡眠中唤醒的唤醒源,如下图所示: EINT0作为唤醒源,而EINT0在S3C2443的data ...

  2. java 进程睡眠_Linux进程的睡眠和唤醒简析

    1.Linux进程的睡眠和唤醒 在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为TASK_RUNNING.一旦一个运行中的进程时间片用完, ...

  3. 黑苹果睡眠无法唤醒_电脑睡眠后无法唤醒怎么办?

    有过电脑睡眠后不能开机情况的小可爱,请在评论区打卡,S姐好想知道,有多少人跟我一样啊! 作为一个懒癌晚期且不想抢救的人,每天下班电脑是绝对不会选择关机的!我浏览器里那么多资料窗口,文章刚写了一半,表格 ...

  4. windows睡眠(休眠)唤醒助手_一劳永逸解决WIN10所有睡眠问题

    1.初级阶段,解决因硬件的唤醒事件 powercfg -lastwake 查看上次唤醒电脑的设备 哪些硬件能唤醒电脑? powercfg /devicequery wake_armed 列出现在可以唤 ...

  5. linux查看睡眠进程,关于 Linux 进程的睡眠和唤醒 ,来看这篇就够了~

    1 Linux 进程的睡眠和唤醒 在 Linux 中,仅等待 CPU 时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状 态标志位为 TASK_RUNNING.一旦一个运行中的进程时 ...

  6. 联想thinkpad待机怎么唤醒_笔记本睡眠怎么唤醒【步骤介绍】

    相信很多人都会遇到这么一种情况,电脑用到一半突然有事情被朋友叫去或者有什么事情需要出去一下,又不想关机,想着回来又得重新开机嫌麻烦.这时候就会选择给电脑休眠.也有些亲忘记了电脑就会自动进入到睡眠状态. ...

  7. 联想thinkpad待机怎么唤醒_联想电脑睡眠无法唤醒_联想电脑睡眠怎么唤醒

    2016-12-22 16:31:07 你好,你这现象看着像电脑过热,电脑用了多久了,如果久的话就去清理下机箱的灰尘,因为机箱风扇狂转只能是温度过高,你下个鲁大师看看平时电脑温度在多少,一般电脑自我保 ...

  8. 笔记本合上盖子不能从睡眠中唤醒解决办法

    一.命令 管理员身份运行cmd后: powercfg -h off //这个是关闭休眠,关闭重启后hiberfil.sys会删除,节省空间 睡眠是在内存中,休眠是在硬盘中. 因为电源设置里,没接电源是 ...

  9. WIN10系统从睡眠状态唤醒后电脑变卡顿

    设备:hp光影精灵5笔记本 描述:某次电脑从睡眠状态唤醒后就突然变卡顿,连打个字都有延迟,显然不是电脑用久了的那种卡,而是有力使不出的那种卡,似乎叫系统假死,并且伴随蓝屏,重启几次后都没有改善.网上查 ...

最新文章

  1. 单片机异常复位后如何保存变量数据
  2. crontab FAQ
  3. dataframe在groupby之后,选其中的某列作为画图的新index
  4. python中创建对象的七种方式
  5. 饼图的引导线怎么加_第0004期,复工了,这个Excel渠道分析(矩阵)图送给大家...
  6. 【转】 嵌入式C语言编程中Inline函数的应用
  7. 常用的字符串加密解密工具类
  8. 机器学习---分类、回归、聚类、降维的区别
  9. 随手记--关于K-近邻算法
  10. Android Verified Boot
  11. 云存储云计算选择开源还是商业版
  12. 在Microsoft Office 2007中检测和修复应用程序
  13. JVM垃圾回收机制详解
  14. android 获取声音资源,Android从视频中提取出音频
  15. 笔记本计算机硬盘如何分盘,笔记本分盘,小编教你笔记本硬盘如何分区
  16. 如何把微信删除的聊天记录恢复?试试这两个简单有效的方法
  17. 拼音解析搜索--自动解析拼音汉子组合(包含多音字,拼音缩写)
  18. 2022-2028全球与中国长曲棍球装备市场现状及未来发展趋势
  19. extjs6 异步树
  20. CreateProcess函数 详细使用

热门文章

  1. 手把手教你学51单片机-点亮你的LED
  2. C#:(角度)前方交会(VS2010窗体+代码)
  3. 低电压检测IC(复位IC)
  4. java序列化指的是什么,java的序列化是什么
  5. 【时间管理】 -- 顺应人性的时间管理法
  6. dubbo学习过程、使用经验分享及实现原理简单介绍,dubbo经验分享
  7. 安搭Share:让人体免疫系统摧毁癌症的新型药物
  8. C++ —— 到底还能做什么?
  9. 个人作品设计展示官网源码
  10. HTML标签及效果大全