kevinCK的个人空间 https://blog.eetop.cn/158558 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

看门狗复位后RAM数据会清空

已有 3638 次阅读| 2007-10-29 12:54

天气: 晴朗
心情: 平静

转载

  这个问题问的很含糊,关键是你要做什么?

  首先看RAM的工作原理和用途。RAM储存数据的基本原理是电容(荷)冲电,冲满电状态表示“1”,放掉电表示“0”。它在MCU中的基本功能作为临时工作数据的存储器。(太简单了,这是学校学的最基本的理论了,可是大家为什么不从这个简单的原理入手分析呢?)

  OK!当系统长时间断电后,一旦上电启动,RAM中的数据自然为“0”。再看其它情况,AVR的复位还可能由WDTBOD造成,前者,通常是用于用户程序的BUG或程序跑非造成,而后者是由于系统电压降落到一定的值(4.0v/2.7v)造成的,只要系统电压没有完全跌到2.7v下,理论上RAM中的数据是保存的。但实际情况不是这样的,因为由WDTBOD造成的复位是随机的,你知道你的程序跑飞后,没有改写RAM?或在复位前的一刻,你的程序正在更新一个INT型(2字节)变量,或一组相关的变量,当它没有更新完成,复位了。你RAM中的数据可靠吗?

  是的,单片机本身不会自己清除RAM中的数据的。但是MCU复位以后,应该做初始化工作,一般也包括将定义的变量初始化,所以正常情况下都将要将变量附初值,如果不附初值,一般习惯认为是“0”。所以,大部分(几乎全部)的高级语言平台,在编译用户程序前要增加自己的初始化代码,其中包括内存以及相关指针的分配和RAM的清另。RAM清另,保证了用户定义的变量初始为另,程序能可靠的从头执行。

  这些高级语言平台在编译时嵌入的初始化程序可以不用,他们在使用手册中都有说明的。但一般用户不建议这样使用(包括我都不这样做),因为你必须具备了相当的能力以及对编译器有深入的了解后,才能保证不使用它的初始化程序,使用自己的初始化程序而不出现问题。

  考虑RAM数据保护,一般用于掉电处理,要保护重要的数据,使系统再次运行时,能接前次状态继续。这是个有深度的功能设计,它包括硬件和软件两方面的配合。我认为,不管何种方式复位,MCURAM的数据都是不可靠的。一般采用的方法有:

1. 扩展外接采用带电池保护的RAM
2.
扩展外接铁电
RAM
3.
利用EEPROM(有写入次数的限制,一般10万次,因此仅在必要前,如掉电前写入)

  不管使用以上何种器件,还是不能安全的保护数据,如正在写入要保护的数据,是一组相关的,程序没写完整,掉电了,此时你的保护数据根本是无效的,不完整的!因此,还需要掉电予警电路(类似UPS),在我的“AVR串口多机通讯模式的问题中的主机电路中,就是这样的设计。当然软件上还要有相应的处理方法配合。《M128》中也给出设计参考和思路。

  不要认为我的电路、问题提的很,其实是有深度的,一般人忽视,或者根本没想到。甚至有些单片机高手,包括教这些内容的教师都不理解我在问什么,什么意思。

  我给计算机专业的学生上课,问什么是纯文本文件,回答“TXT文件。我说“OK!这个问题满分10分,你得1分。那么.C文件是不是?,将一个TXT文件改名成EXE文件后还是不是?你能不能给我一个专业的回答和说明?。有人能全面回答这个问题,达到我10分的标准吗?

  这就是我的教学、学习、工作理念。电子工程师:“0就是01就是1”。错一位,就给你好看。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 1

    评论
  • 130

    访问数
关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-8 22:31 , Processed in 0.012092 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部