所以從我讀取的SRAM是易失性的,EEPROM是非易失性的。如果SRAM是易失性的,當我使用* ptr時,如何獲得值(隨機和垃圾但仍然是值)。ATmega32 SRAM和EEPROM的區別
例如,對於PTR = & X,* PTR會給我一個值。我不應該得到NULL,因爲它是易失性的,每次關閉電源時都會擦除SRAM。
所以從我讀取的SRAM是易失性的,EEPROM是非易失性的。如果SRAM是易失性的,當我使用* ptr時,如何獲得值(隨機和垃圾但仍然是值)。ATmega32 SRAM和EEPROM的區別
例如,對於PTR = & X,* PTR會給我一個值。我不應該得到NULL,因爲它是易失性的,每次關閉電源時都會擦除SRAM。
揮發性,在記憶的條款,意味着值不會得到一個電源週期後保留。鑑於RAM的特性,它可能包含任何上電時的垃圾值。硬件中沒有任何東西將RAM初始化爲零。
所以如果需要的話,你將不得不手動將RAM初始化爲零。
C標準實際上強制要求,這樣的初始化與靜態存儲的所有變量做 - 但這些只。在執行main()
之前,「零輸出」初始化由某個固件執行。但是本地C變量永遠不會自動初始化。
請注意,在C volatile
關鍵字有一點做與非易失性存儲器。不要混淆這兩個不同的術語。
不,你混合上下文。有一點是內存的波動性,它涉及內存的物理結構。其他的是你的代碼讀取隨機存儲器地址。
有時硬件可以擦上電了SRAM,有時沒有,你不能指望它。
如果你讀不佔據在你的代碼的RAM,你會讀出垃圾的地址,是位產生動力的過程,或者是設置,並不再在相同功率下循環中使用舊數據。
SRAM和EEPROM是指特定的存儲技術,但這個問題適用於所有的存儲技術,它們大致可分爲易失性和非易失性。 – Clifford