搜索
bottom↓
回复: 38

请问看门狗复位后,RAM 中的数据会清空吗?

[复制链接]

出0入0汤圆

发表于 2004-12-6 22:29:24 | 显示全部楼层 |阅读模式
是不是看门狗复位,和上电复位的效果是一样的呢? 我曾经听说有些人故意用看门狗复位来防止干扰,有这样的事吗?  各位大哥请指点

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2004-12-6 22:36:35 | 显示全部楼层
单片机本身不会清除RAM中的数据。

但C编译器在初始化程序中有执行清除RAM的指令,要通过特殊方法关闭。

出0入0汤圆

 楼主| 发表于 2004-12-6 23:05:46 | 显示全部楼层
HJJourAVR 大哥

            

             你说的是不是每个程序经过c编译器后,都会生成清除RAM 的代码呢?

特殊方法具体是什么呢?

出0入0汤圆

发表于 2004-12-6 23:17:06 | 显示全部楼层
一般都有清除RAM的初始化指令。

但如何去关闭我不清楚,每个编译器都不一样,我的程序暂时没这个必要。

出0入0汤圆

发表于 2004-12-7 00:14:41 | 显示全部楼层
noinit

出0入0汤圆

发表于 2004-12-7 11:54:04 | 显示全部楼层
It is only [gcc avr] can be use.

出0入0汤圆

发表于 2004-12-7 12:13:47 | 显示全部楼层
方法也有几个...
-----此内容被hotpower于2004-12-07,12:14:49编辑过

出0入0汤圆

发表于 2004-12-7 12:14:57 | 显示全部楼层
说说好吗?谢谢hotpower大侠。

出0入0汤圆

发表于 2004-12-7 12:17:36 | 显示全部楼层
好像这个主题不太明确,有点晕...

出0入0汤圆

发表于 2004-12-7 12:20:54 | 显示全部楼层
就是上电如何不清空ram内容,比如有电池保存数据的,上电之后reset代码重新运行岂不是ram要被清空

是这样么?【其实我不大清楚】嘿嘿。
-----此内容被8515于2004-12-07,12:23:24编辑过

出0入0汤圆

发表于 2004-12-7 12:32:30 | 显示全部楼层
这是各种MCU中的C编译器必须具备的条件之一,而且是"龙头老大".



若无此功能,那么该C编译器必须被人们扔入垃圾堆里!!!!!!!!!!!!



先想想吧...否则教主又要说我误人子弟了...



有时候教人等于是害人...听说过"笑里藏刀"吧...



我的回复就是灌水,不一定那会灌出一滴油来...必须要"话里听话"才对...



吃饭了...我的<WinAVR菜鸟笔记>里有解答...可它现在在梦里...



先看明白这个例子再说,可惜不是AVR的...但也会有帮助的,至少在思维上是一致的.







说实话,这个主题求助说出了好些人的心里话,非常具有代表性,它是每个进入C的人们必须遇到过的...


-----此内容被hotpower于2004-12-07,12:46:07编辑过

出0入0汤圆

发表于 2004-12-7 12:48:07 | 显示全部楼层
晕菜了。。我是汇编盲。。



哦,大致理解了,要修改c编译出来的目标汇编代码?!



找到。。【什么啊】

出0入0汤圆

发表于 2004-12-7 12:48:58 | 显示全部楼层
非要汇编么? 那个persistent是什么啊?

出0入0汤圆

发表于 2004-12-7 12:55:01 | 显示全部楼层
肯定不让你用汇编一句...



向楼上多看几层,我基本上已给了"方法",不过确实有点晕菜!!!



"晕菜"一词我上网后才有些明白,但还是不太清楚...



只要找到与persistent雷同的功能,就揭开此谜了...



教主他知道...

出0入0汤圆

发表于 2004-12-7 13:44:53 | 显示全部楼层
static  ?是吗



static int aa @0x60;



这样就不会冲掉内容了吗? 大侠我猜对了吗?

出0入0汤圆

发表于 2004-12-7 13:56:41 | 显示全部楼层
没试过,但绝对地址定义总不是C的原则...

出0入0汤圆

发表于 2004-12-28 02:05:03 | 显示全部楼层
现在告诉正解吧,楼主不知跑到那里去了???



#define __noinit__ __attribute__ ((section (".noinit"))) //变量不初始化宏(被定义在.bss子段.noinit)





#include <inttypes.h>

#include <avr/io.h>

#include <avr/interrupt.h>

#include <avr/signal.h>

#include <avr/wdt.h>

#include <avr/ina90.h>

#include <avr/eeprom.h>

__noinit__ unsigned int SystemRamTest;//SystemRamTest不初始化



int main(void)

{

//  wdt_enable(WDTO_1S);//Watchdog 定时器1 秒超时

//  wdt_reset();

  if (SystemRamTest != 0x55aa) {//内存被破坏

//...................................

    SystemRamTest = 0x55aa;

  }

  else {//内存未被破坏

//...................................

  }

//.................

  sei();

  for(;;) {

    _NOP();

  }

  return 0;

}



SIGNAL(SIG_XXXXXXXXXXX)

{

//............................

}

出0入0汤圆

发表于 2004-12-28 09:21:44 | 显示全部楼层
楼猪用什么编译器阿?修改启动文件啦

出0入0汤圆

 楼主| 发表于 2004-12-28 10:16:26 | 显示全部楼层
我用的是icc 请大哥指点,如何修改启动文件?

出0入0汤圆

发表于 2004-12-28 10:16:43 | 显示全部楼层
如果用的是ICC AVR 的话,修改启动文件就是了.

出0入0汤圆

发表于 2004-12-28 11:57:37 | 显示全部楼层
给你链接



http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=182362&bbs_page_no=1&bbs_id=1000

出0入0汤圆

发表于 2004-12-28 11:59:04 | 显示全部楼层
还是给你内容吧



首先打开libsrc.avr目录的init.s文件,找到以下

; this loop zeros out all the data in the bss area

;

init_loop:

   cpi R30,<__bss_end

   cpc R31,R17

   breq init_done

   st Z+,R0

   rjmp init_loop

init_done:

这几句就是清ram的。把中间五行注释掉,标号不注释是为了防止别的调用找不到。然后打开crtavr.s文件,选择:file---compile file----startup file to object,然后把libsrc.lib目录里生成的crtavr.o拷贝到lib目录中覆盖原文件即可。

出0入0汤圆

发表于 2004-12-28 12:52:25 | 显示全部楼层
winavr在这方面做的非常出色...

出0入0汤圆

 楼主| 发表于 2004-12-28 14:00:28 | 显示全部楼层
hotpower 老是在说winavr好, 大哥你能不能写一篇范例,告诉我们初学者如何“如何设置,如何建立工程项目,如何编译,如何仿真”请指点~~~~

出0入0汤圆

 楼主| 发表于 2004-12-28 14:07:13 | 显示全部楼层
to: biansf2001 花溅泪

                     

                   大哥你说的第5行注释掉,是不是说把这句“rjmp init_loop  ”注释掉? 是用 “分号;” 还是用“//”来注释??  你说“然后打开crtavr.s” 是用avrstudio打开吗?
-----此内容被jackiezeng于2004-12-28,14:11:01编辑过

出0入0汤圆

 楼主| 发表于 2004-12-28 14:08:06 | 显示全部楼层
哦。 我看到了,是用分号      我太菜了

出0入0汤圆

发表于 2004-12-28 14:50:03 | 显示全部楼层
jackiezeng,我说的是五行都注释掉

   cpi R30,<__bss_end  

   cpc R31,R17  

   breq init_done  

   st Z+,R0  

   rjmp init_loop

这统统不要。

出0入0汤圆

发表于 2004-12-28 21:47:17 | 显示全部楼层
哈哈,ICCAVR要搞得如此复杂...看来不用ICCAVR这条路选对了...

出0入0汤圆

 楼主| 发表于 2004-12-29 09:18:28 | 显示全部楼层
to biansf2001 花溅泪



                   大哥,你说的打开crtavr.s 文件, 是用什么东西打开?

然后打开crtavr.s文件,选择:file---compile file----startup file to object,然后把libsrc.lib目录里生成的crtavr.o拷贝到lib目录中覆盖原文件即可。

出0入0汤圆

发表于 2004-12-29 11:24:31 | 显示全部楼层
用ICC AVR 打开修改后保存也可以.

出0入0汤圆

发表于 2004-12-29 12:06:09 | 显示全部楼层
用iccavr阿打开。我说的都是用iccavr

出0入0汤圆

发表于 2005-8-14 21:40:51 | 显示全部楼层
hotpower 能否说一下复位时winavr如何不使ram中数据清空

出0入0汤圆

发表于 2005-12-1 23:19:10 | 显示全部楼层
/*-------------------------------------------------------------------------------*/

#define __noinit__ __attribute__ ((section (".noinit"))) //变量不初始化

#define __eeprom__ __attribute__ ((section (".eeprom"))) //变量定义在eeprom中



#define __flash__  PROGMEM //变量定义在flash中(写法1)

//#define __flash__  __attribute__ ((section (".progmem"))) //变量定义在flash中(写法2)

//#define __flash__  __attribute__ ((progmem)) //变量定义在flash中(写法3)

//prg_uchar等



#define persistent  __noinit__ //变量不初始化,相当于PICC的persistent

#define code  PROGMEM //同__flash__,变量定义在flash中,相当于Keil C51的code

/*-------------------------------------------------------------------------------*/





__noinit__ unsigned int SystemRamTest;//RAM不初始化

出0入0汤圆

发表于 2005-12-30 17:16:34 | 显示全部楼层
这是各种MCU中的C编译器必须具备的条件之一,而且是"龙头老大".



若无此功能,那么该C编译器必须被人们扔入垃圾堆里!!!!!!!!!!!!  



不是吧老大!

HTC里面就没有这个功能!我感觉很好用的啊!其实一般RAM的我个人都感觉没有必要先清零!

出0入0汤圆

发表于 2005-12-30 17:33:22 | 显示全部楼层
"一般RAM的我个人都感觉没有必要先清零"??



所有变量在使用前,必须先赋值。

否则会产生不确定的状态!!----因为上电时,SRAM的内容是随机的。



HT C是合泰吗,他可算不上大型MCU厂商,C编译器自然不会太严谨了。

出0入0汤圆

发表于 2008-4-10 23:43:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-14 21:30:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2014-2-19 21:30:03 | 显示全部楼层
MARK  ,学习了

出0入0汤圆

发表于 2014-2-19 23:16:57 | 显示全部楼层
不管是啥复位都是复位,效果是一样的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表