2016-12-08 11 views
1

私が読んだことから、SRAMは揮発性で、EEPROMは不揮発性です。 SRAMが揮発性である場合、私は* ptrを使用すると時には値(ランダムとゴミですが、それでも値)を得ることがあります。ATmega32 SRAMとEEPROMの違い

たとえば、ptr = & xの場合、* ptrは私に価値を与えるかもしれません。揮発性で、電源がオフになるたびにSRAMが消去されるため、NULLを取得してはいけませんか?

+0

SRAMとEEPROMは特定のメモリテクノロジを指しますが、この問題はすべてのメモリテクノロジに適用されます。これらのメモリテクノロジは、揮発性と不揮発性に大別できます。 – Clifford

答えて

4

揮発性とは、メモリの観点からは、電源を切っても値が保持されないことを意味します。 RAMの性質上、電源投入時にはゴミ値を含んでいる可能性があります。ハードウェアにRAMをゼロに初期化するものは何もありません。

これが必要な場合は、手動でRAMをゼロに初期化する必要があります。

C標準では、静的な記憶期間を持つすべての変数に対してこのような初期化を実行することが実際に要求されています。その "ゼロアウト"初期化は、main()が実行される前にファームウェアによって実行されます。しかし、ローカルのC変数は決して自動的に初期化されることはありません。

Cのキーワードvolatileは、揮発性メモリとはほとんど関係がありません。これらの2つの異なる用語を混同しないでください。

0

いいえ。コンテキストを混合しています。 1つはメモリーのボラティリティーです。これはメモリーの物理的構成に関係します。その他のコードは、ランダムなメモリアドレスを読み取るコードです。

電源投入時にハードウェアがSRAMを消去することがありますが、時にはそうではない場合もあります。

コード内のRAMの占有されていないアドレスを読み取った場合、処理のために生成されたビットまたは廃棄された古いデータは、同じ電源サイクルで使用されなくなります。