2013-10-25 91 views
1

我在理解如何管理EEPROM地址空間方面遇到一些困難。 事實是(據我理解):AVR XMEGAs EEPROM存儲器管理

  • 所以能夠有本地變量在EEPROM(例如,使用AVR-GCC的EEMEM宏)
  • 所以能夠有遞歸函數呼籲
  • 所以我可以有居住在EEPROM內存空間
  • 這意味着它是(在這種情況下)在編譯時未知有多少EEPROM空間,我會使用局部變量的遞歸函數

那麼,這是如何管理的? EEPROM上是否有堆棧式的東西?

此外,如果有這樣的事情:它如何處理用戶強制的固定地址變量? 說我強迫編譯器給我一個地址爲0x0FFF的變量x。如果EEPROM堆棧(假設有這樣的東西)從0x000開始,它如何避免覆蓋x?

這大概沒什麼人常擔心,但我只是好奇,想了解詳細信息...

乾杯! Philipp

回答

2

您錯過了事實清單中的關鍵點。

這是事實,EEMEM宏可能會導致一個變量被放置在EEPROM

#define EEMEM __attribute__((section(".eeprom"))) 

section attribute僅適用於全局變量,而不是本地的像在遞歸函數中使用。所以,不,EEPROM中沒有堆棧。堆棧始終在SRAM中。

由於EEPROM僅用於全局變量,因此在編譯時已知使用了多少。如果您還強制記憶位置,那不會導致問題。編譯器將確保它爲其他全局變量選擇的地址不會衝突。

+0

非常感謝這個清晰簡潔的答案! – nandaloo