计算机自动重启流程图,嵌入式系统快速重启

本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!

由于嵌入式系统在每次重启的时候都要执行一次代码的拷贝过程,这样会浪费很多时间。对于我们来说,只要内存没有断电,里面就有我们的代码,而没有必要重新拷贝一次。就这一点,对于嵌入式系统的快速重启做了充分研究,给出了具体实现过程,其应用甚是广泛,有一定的应用价值。

嵌入式系统快速重启嵌入式系统快速重启概述

编辑

语音

随着计算机技术的发展,工业技术也跟着迅猛发展起来了,而伴随着嵌入式的应用也很变得非常广泛。  arm芯片为了保证指令运行的实时性,指令没有直接在flash里面运行,而是先把flash里面的数据拷贝到读取速度比较快的sdram里面,然后运行,这样就提高了运行速度。但是由于程序的固定性,在我们重新启动的时候,会再次拷贝代码。我们知道sdram是掉电不保存数据的,但是,如果sdram没有掉电,里面的数据是不会丢失的。而我们重启的时候并没有给芯片断电,而这个时候系统又要重新拷贝一次代码,造成了时间的浪费。  当然在工业上,我们的系统启动起来之后,往往重新启动的可能性较少,这样每次启动浪费的时间也就可以忽略不计了。不过,在我们使用数码相机的时候,要抢拍一个镜头,这个时间可能就是毫秒级的,在每次开机的时候都需要几秒的启动时间,是无法忍耐的。而也不能一直开机,便携式的相机电池的电量太有限了。我们经常的一种解决办法是将系统切换到低功耗模式,而仅仅是低功耗模式还是要浪费电量。而我们想,如果只给sdram供电,作为待机模式,每次按下复位键的时候就直接跳到sdram中运行,而不必再次复制代码。这就实现了快速启动,电池的供电时间也相应的延长了。

嵌入式系统快速重启嵌入式系统快速重启流程

编辑

语音

① 上电,复位完成;② 嵌入式arm核自动把flash里面最低的4k启动代码复制到sram里面,并从sram的0x0000_0000地址开始执行;③ 完成一些必要的初始化工作,将flash中的代码拷贝到sdram中;④ 跳转到sdram中运行;通过以上步骤,就进入了我们的应用程序,或者是操作系统。  在我们需要复位的时候, 即nreset管脚出现一个向下的脉冲,即出现复位。当nreset信号为低电平时,arm处理器放弃任何指令的执行,并从增加的字地址处取指令;当nreset信号变为高电平时,arm处理器进行如下操作:1.将当前的pc值和cpsr值写入r14_svc和spsr_svc,已经保存的pc和spsr的值是未知的;2.强制m:0]为10011(超级用户模式),将cpsr中的“i”和“f”位设为1,并将t位清零;3.强制pc从0x00地址取下一条指令。4.恢复为arm状态开始执行。即程序会跳到0x0000_0000这个地址位置,开始执行上面所述的第三步和第四步。  我们知道从flash里面读取数据比起sdram是想当慢的,而这里又要进行一次代码的拷贝工作,这也是一个相当长的时间。不过这个时候我们可以发现,我们并没有断电,sdram里面放的数据还是我们代码,我们没有必要重新拷贝这些代码了,在下次启动的时候,只需直接跳转到sdram中运行,做一些初始化工作就可以了。这样重新启动速度就相当迅速了。

嵌入式系统快速重启嵌入式系统快速重启软件流程

编辑

语音

下面是系统自开机开始, 程序修改复位跳转指令的流程图,在修改0x0000_0000处的跳转指令可用如下数据替代:  使用ldr pc, =0x3000_0000指令,反汇编后得到的32位指令数据是0xe3a0_f5c0,将其放到0x0000_0000处即可。  而修改0x0000_0000处的数据,可用如下指令:  程序经过以上配置,就可以实现系统的快速重启。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值