如何在单片机复位前保存数据?

[复制链接]
 楼主| mei326 发表于 2010-6-25 16:06 | 显示全部楼层 |阅读模式
复位的原因有:
1、RST引脚的高电平;2、看门狗;3、软件指令复位;4、片内电源监控复位;5、IAP复位。
如何在复位之前保存重要数据呢?
HWM 发表于 2010-6-25 16:13 | 显示全部楼层
除了“软件指令复位”,“片内电源监控复位”外,其他没辙。

软件指令复位——自己知道大难临头了,自然可以预先防范啦

片内电源监控复位——检测电源(注意:检测点越向前越好)
chunyang 发表于 2010-6-25 16:19 | 显示全部楼层
复位而不掉电不会改变内存,如果当前需要保存的数据量不大,可在指定地址的内存段中放置需保存的数据同时设置一标志,注意该标志不能过于简单避免和随机数大量重合(可用多字节做标志),正常的数据备份后复位该标志,否则在系统重新启动后如果该标志有效则先进行数据备份或数据恢复。
HWM 发表于 2010-6-25 16:23 | 显示全部楼层
“复位而不掉电不会改变内存”,但通常会被初始化。
chunyang 发表于 2010-6-25 16:27 | 显示全部楼层
所以要在初始化指令前先判断标志。有的MCU的部份寄存器会被内部系统初始化,标志和数据区要避免这些地址。
HWM 发表于 2010-6-25 16:31 | 显示全部楼层
呵呵,如果MCU内配置有标识复位来源的标志,则就不成其为问题了。
 楼主| mei326 发表于 2010-6-25 16:32 | 显示全部楼层
复位后属于热启动,不能修改热启动的程序运行的启示地址?检测电源有什么好的办法呢?
HWM 发表于 2010-6-25 16:37 | 显示全部楼层
方法很多,主要是检测电源的电压值是否在正常范围,超出范围则中断系统。

检测点要靠前,必须在片内电源监控复位前起作用。
 楼主| mei326 发表于 2010-6-25 16:47 | 显示全部楼层
由于我要保存的只有一个长整型数据,所以先接受春阳的方法!只是现在还没个思路,不知道如何设置内存...感觉在做这个项目的过程中学到了很多...
 楼主| mei326 发表于 2010-6-25 16:49 | 显示全部楼层
所以要在初始化指令前先判断标志。有的MCU的部份寄存器会被内部系统初始化,标志和数据区要避免这些地址。
chunyang 发表于 2010-6-25 16:27
我用的STC的MCU
chengfei21 发表于 2010-6-25 19:14 | 显示全部楼层
一般单片机都会有导致相应“异常”的标志位,在初始化时判断一下就OK了

评分

参与人数 1威望 +1 收起 理由
szshawn2010 + 1 正解

查看全部评分

liaojihua2010 发表于 2010-6-25 20:21 | 显示全部楼层
10楼,你的CPU就带这样的功能啊
 楼主| mei326 发表于 2010-6-25 20:40 | 显示全部楼层
楼上的知道怎么写不?可以Q聊不?我的443762747
yh21ic 发表于 2010-6-25 23:07 | 显示全部楼层
初始化要注意,C可能会清除所有的RAM的
xcs_1211 发表于 2010-6-26 10:27 | 显示全部楼层
可以加一个EEPROM,在复位前,使用中断,用中断程序来保存你想保存的数据。
lirunze 发表于 2010-6-26 18:35 | 显示全部楼层
大电容实现掉电保护就ok了
zjh006 发表于 2010-6-27 11:38 | 显示全部楼层
我采用的是类似chunyang的方法,标志位是需要保存数据的CHECKSUM,不管何种原因导致复位,程序一开始就检查标志位是否正常。
 楼主| mei326 发表于 2010-6-29 09:23 | 显示全部楼层
我的程序只用到了data而没有用到xdata ,我把重要数据放在xdata里,而在启动文件里把那段清零xdata 的程序去掉而其它的保留,这样就不会对其他的造成影响了.实验证明这种方法可行,但它有一个缺点就是不管是冷启动还是热启动xdata内存都不会清零!为了解决这个问题,我在初始化程序里就判断上电复位标志位,如果是冷启动我就把xdata内存清理,如果是热启动我就把数据读出来!现请大家分析下这种方法的优缺点,是否会对系统有影响...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| mei326 发表于 2010-6-30 18:27 | 显示全部楼层
楼上是高人...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:与其等待机会,不如主动出击...

117

主题

763

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部