AVR XMEGA上的EEPROM内存管理



我在理解如何管理EEPROM地址空间时遇到了一些困难。事实是(据我所知):

    可以在
  • EEPROM上具有局部变量(例如,使用avr-gcc的EEMEM宏)
  • 可以有递归函数调用
  • 因此我可以具有递归函数,局部变量驻留在EEPROM内存空间中
  • 这意味着(在这种情况下)在编译时不知道我将使用多少EEPROM空间

那么,这是如何管理的呢?EEPROM上是否有类似堆栈的东西?

另外,如果有这样的东西:它如何处理用户强制的固定地址变量?假设我强制编译器在地址 0x0FFF 给我一个变量 x。如果EEPROM堆栈(假设有类似的东西)从0x000开始,它如何避免覆盖x?

可能这没什么人们通常担心的,但我只是好奇,想了解细节......

干杯!菲利普

您错过了事实列表中的一个关键点。

确实,EEMEM 宏会导致变量放置在 EEPROM 中

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

但是 section 属性仅适用于全局变量,不适用于递归函数中使用的局部变量。所以,不,EEPROM中没有堆栈。堆栈始终位于 SRAM 中。

由于EEPROM仅适用于全局变量,因此在编译时知道使用了多少。如果您还强制使用内存位置,则不会导致问题。编译器将确保它为其他全局变量选择的地址不会冲突。

相关内容

  • 没有找到相关文章

最新更新