因此,根据我所知,SRAM是易失性的,EEPROM是非易失性的。如果SRAM是易失性的,那么当我使用* ptr时,我有时会得到值(随机和垃圾但仍然是值)。
例如对于ptr =& x,* ptr可能会给我一个值。难道我不会因为它是易失性而得到NULL而且每次断电都会擦除SRAM吗?
答案 0 :(得分:4)
就内存而言,易失性意味着在电源循环后不会保留值。鉴于RAM的性质,它可能包含上电时的任何垃圾值。硬件中没有任何内容将RAM初始化为零。
因此,如果需要,您必须手动将RAM初始化为零。
C标准实际上要求对具有静态存储持续时间的所有变量进行此类初始化 - 但仅限于那些。那"零出"某些固件在执行main()
之前执行初始化。但是本地C变量永远不会自动初始化。
请注意,C中的volatile
关键字与易失性内存无关。不要混淆这两个不同的术语。
答案 1 :(得分:0)
没有。你混合上下文。一件事是记忆波动,它涉及记忆物理结构。其他是你的代码读取随机存储器地址。
有时硬件可以在加电时擦除SRAM,有时候不会,你不能指望它。
如果您在代码中读取RAM的非占用地址,您将读取垃圾,无论是生成供电过程的位还是已处理且不再在同一电源循环中使用的旧数据。