1

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

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

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

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

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

干杯! 菲利普

4

1 回答 1

2

你错过了事实清单中的一个关键点。

EEMEM宏确实可以导致变量被放入 EEPROM

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

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

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

于 2013-10-27T03:11:53.313 回答