【问题标题】:ATmega32 SRAM and EEPROM differenceATmega32 SRAM和EEPROM的区别
【发布时间】:2016-12-08 09:47:35
【问题描述】:

所以从我读到的内容来看,SRAM 是易失性的,而 EEPROM 是非易失性的。如果 SRAM 是易失性的,为什么我在使用 *ptr 时有时会得到值(随机和垃圾但仍然是值)。

例如对于 ptr=&x,*ptr 可能会给我一个值。我不应该得到NULL,因为它是易失性的,每次断电时SRAM都会被清除吗?

【问题讨论】:

  • SRAM和EEPROM是指特定的内存技术,但这个问题适用于所有内存技术,大致可以分为易失性和非易失性。

标签: memory embedded microcontroller ram non-volatile


【解决方案1】:

就内存而言,易失性意味着值在重新启动后不会被保留。鉴于 RAM 的性质,它可能在上电时包含任何垃圾值。硬件中没有任何东西可以将 RAM 初始化为零。

因此,如果需要,您必须手动将 RAM 初始化为零。

C 标准实际上要求对所有具有静态存储持续时间的变量进行此类初始化 - 但仅限于这些变量。在执行main() 之前,某些固件会执行“归零”初始化。但是局部 C 变量永远不会自动初始化。

请注意,C 中的volatile 关键字与易失性存储器几乎没有关系。不要混淆这两个不同的术语。

【讨论】:

    【解决方案2】:

    没有。你混合上下文。一件事是内存波动,它与内存物理结构有关。其他是你的代码读取随机内存地址。

    有时硬件可以在通电时擦除 SRAM,有时不能,你不能指望它。

    如果您在代码中读取 RAM 的非占用地址,您将读取垃圾,无论是在供电过程中生成的位还是在同一个电源周期中被处理且不再使用的旧数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 2010-12-30
      • 2014-09-29
      • 2013-03-28
      • 2013-08-07
      • 2011-10-20
      • 2020-01-23
      相关资源
      最近更新 更多