开关机操作
来源:互联网 发布:高处不胜寒读音知乎 编辑:程序博客网 时间:2024/05/04 18:42
开关机操作
本文使用的是JZ47xx的MIPS CPU,系统平台为公司内部的,因此有一定的局限性。
一.关机操作
关机操作分为两种,一种是睡眠,另一种是深度睡眠.深度睡眠是在进入睡眠之后的一段时间(由系统设置的时间)内执行的.
睡眠操作
1.调用SleepEnterRequest函数进入睡眠
SleepEnterRequest函数的操作流程如下
1)停止向当前窗口发送paint消息
2)清除所有paint消息队列中的消息
3)获取所有存在的进程的信息
4)把所有进程的主窗体插入sleeplist
4)向所有进程的主窗体发送睡眠消息
5)置上一个关机标志位bLogoPass
2.结着程序会跑到IdleSleep中完成
IdleSleep有如下操作
1)检测到bLogoPass,创建一个线程,运行睡眠的logo程序,并等待logo程序退出
2)logo程序退出后再创建一个线程,向所有设备驱动发送睡眠消息(设备驱动收到这个消息后会关闭设备或做其他动作)然后调用MachineStandby函数进入睡眠
注:进入睡眠只是把一些外围设备的电源时钟关掉,CPU还是正常运转.睡眠只是在MachineStandby里面循环执行,等待唤醒.如果长时间不被唤醒将进入深度睡眠模式(CPU断电).
当然此时也还没有退出IdleSleep函数.
深度睡眠
在睡眠的时候RTC时钟还在正常的跑,CPU不断的计数,当计数到达用户设置的深度睡眠时间时就调用MachiePowerOff进入深度睡眠模式
以下是MachinePowerOff的工作
1)等待串口输出完毕
2)设置闹铃唤醒
3)操作RTC,强制CPU掉电
二.开机操作
开机有两种情况对应着以上的睡眠模式和深度失眠模式.把从睡眠模式开机叫做唤醒开机,从深度睡眠模式开机叫做上电开机.
唤醒开机
机器进入睡眠模式,还未进入深度睡眠模式的时候,按下Power键,就是唤醒开机.
1)在睡眠模式下,CPU不停地检测Power键,如果发现Power键按下.立即向所有外设驱动发送唤醒消息.外设收到消息后立即重新初始化进入工作状态.
2)接着想SleepList中的进程的主窗体发送唤醒消息,,并从SleepList中删除之,恢复窗体的正常工作状态.
注:唤醒起始就是睡眠的反过程.唤醒之后程序才推出IdleSleep函数.
上电开机
机器进入深度睡眠模式,此时CPU已经掉电,此时按下Power键,外部电路会给外部设备控制器和CPU供电,上电开机的第一条指令是从固定的地址0x1FC00000处取并运行.此处的代码是固件(firmware),CPU出场时就固化好了.firmware的功能是把nand flash中的Boot程序载入SDRAM的0地址处(线性地址是0x80000000处).
1)BOOT
boot程序对GPIO,PLL,SDRAM,INAND,串口进行简单的初始化,然后从NAND中把loader程序载入SDRAM的0xA0600000处,并跳转到0xA0600000出运行
2)LOADER
loader先对cache,nand,键盘等初始化,然后检测当前电压,电压正常就开始把系统的IMG文件载入SDRAM中是0x80000000处,也就是SDRAM的起始位置.然后跳转到0x80000400处开始执行.
3)系统启动
系统的第一条指令从0x80000400出开始执行,初始化cache,初始化协处理器,初始化堆栈,初始化TLB,以上过程都在汇编程序中执行.接下来进入BootMain(C语言)
BootMain中调用KernelMain开始对内核进行初始化(内存,中断,设备驱动,MMU,GUI,进程管理,文件系统等)初始化最后是启动开机LOGO(LOGO结束前会启动桌面程序),形象的开机终于出现了.
注: 上电开机有几个地方要留意
1)Boot的第一条指令是在0x80000000的线性地址处开始执行的.因为0xA0000000~0xC0000000这段地址空间是uncache 和 unmaped的。
,此时代码中并没有对cache初始化。为什么不是0xA0000000处开始执行?
JZ47xx的MCU在0x1f7c00000处执行的代码,已经对cache,sdram,nand进行简单的初始化。
2)系统IMG的第一条指令为什么在0x80000400处?
因为前面的地址被CPU用来当做异常中断等的固定入口地址.
4)reset的行为和上电开机是一摸一样的,但是RTC的某个位会记录下当前的开机是reset开机还是上电开机.
- 开关机操作
- windows 实现自动开关机操作
- 开关机
- 某HPC集群开关机维护操作
- [Linux] 记录一次批量开关机操作
- Linux最基本的开关机操作和辅助操作
- 定时开关机
- 远程开关机
- linux开关机
- 开关机动画
- 远程开关机
- Windows开关机
- 定时开关机
- Mac OS X 键盘标志、快捷键、开关机操作键、抓图工具
- Xshell对服务器的基础操作(连接、开关机、传文档)
- MTK开关机动画与开关机铃声
- 计算机开关机故障诊断大全
- 服务器、磁盘阵列开关机顺序
- 算法题4 在字符串中删除特定的字符
- 关于IT小丑
- 隐藏StatusBar和更改应用程序名称
- 构建内核树
- 用gstreamer简化linux多媒体开发
- 开关机操作
- 一些函数总结(3)
- 测试小兵成长记:磨刀不误砍柴工
- C#的资源释放问题
- ril
- How to run JBoss (5.1) under debug mode
- 版本号格式及管理策略
- 点击子对话框的关闭按钮不起作用
- 微软一站式示例代码库(中文版)2011-05-13版本, 新添加Azure, WinForm等16个Sample。