嵌入式linux热启动和冷启动,使用keil判断ARM的冷启动和热启动的方法
微处理器:LPC2114
编译环境:Keil MDK V4.10
思路:
常把单片机系统的复位分为冷启动和热启动。所谓冷启动,也就是一般所说的上电复位,冷启动后片内外RAM的内容是随机的,通常是0x00或0xFF;单片机的热启动是通过外部电路给运行中的单片机的复位端一复位电平而实现的,也就是所说的按键复位或看门狗复位。复位后,RAM的内容都没有改变。在某些场合,必须区分出设备的重启是热重启还是冷重启。常用的方法是:确定某内存单位为标志位(如0x40003FF4~0x40003FF7 RAM单元),启动时首先读该内存单元的内容,如果它等于一个特定的值(例如为0xAA55AA55),就认为是热启动,否则就是冷启动。
根据以上的设计思路思路定义一个变量:
uint32 unStartFlag;
在程序启动时判断:
if(unStartFlag==0xAA55AA55)
{
//热启动处理
}
else
{
//冷启动处理
unStartFlag=0xAA55AA55;
}
然而实际调试中发现,无论是热启动还是冷启动,开机后所有内存单元的值都被复位为0,当然也实现不了热启动的要求。通过看keil MDK自带的启动代码Startup.s,在这个启动代码中也并没有发现将整个RAM区域清零的语句。反汇编程序,发现从启动代码执行结束到跳转到main函数过程中,编译器还执行了很多库函数,其中__scatterload_zeroinit函数将所有W/R RAM都初始化为0(默认设置下)。为了判断冷、热启动,必须人为控制某些特定RAM在复位时不被编译器初始化为0。通过查找编译器手册,在为处理器的RAM中分出一块小片RAM,设置为NoInit格式(不对其初始化为0),如下图:
然后使用__at关键字将冷、热启动标志位定位到这个NoInit区域:
uint32 unStartFlag __at (0x40003FF4);
这样,当热启动时,变量unStartFlag所在的内存区域就不会被初始化为0,也实现了冷热启动的判断。
定义铁电0xFF7~0xFF8区域存储冷启动次数
0xFF9~0xFFA区域存储热启动次数
0xFFB~0xFFC区域存储总启动次数
嵌入式linux热启动和冷启动,使用keil判断ARM的冷启动和热启动的方法相关推荐
- 使用keil判断ARM的冷启动和热启动的方法
使用keil判断ARM的冷启动和热启动的方法 转载于:https://www.cnblogs.com/LittleTiger/p/4812617.html
- linux嵌入式面试题合集,嵌入式linux面试题解析(一)——ARM部分二
嵌入式linux面试题解析(一)--ARM部分二1.描述一下嵌入式基于ROM的运行方式基于RAM的运行方式有什么区别.基于RAM的运行方式:需要把硬盘和其他介质的代码先加载到ram中,加载过程中一般有 ...
- arm嵌入式linux应用实例开发pdf,零点起步——ARM嵌入式Linux应用开发入门一书的源代码...
代码片段和文件信息 属性 大小 日期 时间 名称 ----------- --------- ---------- ----- ---- 文件 2 ...
- Linux 怎么看端口通不通,判断端口通不通的几种方法
1.使用telnet判断 telnet是windows标准服务,可以直接用:如果是linux机器,需要安装telnet. 用法:telnet ip port 1)先用telnet连接不存在的端口[ro ...
- 嵌入式linux 实现mdev SD卡和U盘自动挂载和卸载的方法 mdev.conf
首先先参考这些博客做一些了解:http://linux.chinaunix.net/techdoc/install/2009/11/18/1144936.shtml http://www.cnblog ...
- linux u盘分区 mdev 卸载问题,嵌入式linux 实现mdev SD卡和U盘自动挂载和卸载的方法 mdev.conf...
首先先参考这些博客做一些了解:http://linux.chinaunix.net/techdoc/install/2009/11/18/1144936.shtml http://www.cnblog ...
- 嵌入式linux移植ssh,将SSH移植到arm soc上
由于用的SOC没有内置ssh,产品投放市场之后可能会有安全隐患,因此决定自己移植ssh,参考了网上的博文,将过程记录如下 参考的博文:http://blog.csdn.net/ctbinzi/arti ...
- 嵌入式linux 不识别sata,sata硬盘识别不了的常见问题和解决方法
sata硬盘也叫串口硬盘,因为支持热插拔.传输速度快等优点被广泛应用.但是使用过程中由于供电和兼容性问题,经常会碰到sata硬盘识别不了的情况,应该如何解决呢? 下面我们以西数sata硬盘和绿联外置易 ...
- 嵌入式linux操作系统
2. 怎么学习嵌入式Linux操作系统 本文假设您是零基础,以实用为主,用最快的时间让你入门:后面也会附上想深入学习时可以参考的资料. 在实际工作中,我们从事的是"操作系统"周边的 ...
最新文章
- linux gcc编译参数顺序问题
- Core篇——初探Core的认证,授权机制
- tgz文件linux打开,tgz文件扩展名,tgz文件怎么打开?
- android jni jbyteArray转char*
- 贪心——买卖股票的最佳时机(Leetcode 122)
- Linux安装redis和部署
- OpenCV安装与第一个程序
- 小强源码分析系列-Spring Boot2-源码分析1---调试环境搭建
- hhkb java_为什么知乎上这么多人推荐 HHKB,却不反复强调说该键盘不适合大多数程序员?...
- DirextX Training笔记
- 实战 | 一键导出微信阅读记录和笔记
- 视频去水印在线网站?
- superset:自定义标签乱码解决
- facebookdownload_downloadfacebook
- 《WEB开发-HEXO博客搭建》第3章 Hexo博客域名添加
- 【网络技术题库梳理8】网络系统结构与设计的基本原则
- 【windows版本】 db2数据库安装与使用
- 2017年BEC剑桥商务英语考试指南
- PDF能编辑吗,怎样去掉PDF上的水印
- 实现私有DNS搭建(正向解析+反向解析+主从同步+安全措施+配置转发服务器+基于ACL实现智能DNS)
热门文章
- [201206][UML 精粹][标准对象建模语言简明指南][第3版][Martin Fowler][著]
- MySQL评估索引合理性字段---Cardinality
- 省选专练APIO2012派遣
- 华为鸿蒙手机终于要来了!App生态已解决
- 大学生体测管理系统开发实战
- A - TOYS(POJ - 2318) 计算几何的一道基础题
- 汽车三滤是什么 汽车三滤的使用注意事项
- 消费者在选购和为婴幼儿食用此类产品时应注意
- 多线程的作用以及什么地方用到多线程?
- Xcode添加多个Targets