EEPROM.read(地址)和EEPROM[地址]有什么区别

What's the difference between EEPROM.read(address) and EEPROM[address]

我在 Arduino 上使用 EEPROM 来存储一些大的常量数组。我注意到 EEPROM.read(address) 和 EEPROM[address] 都适用于我的阅读。但是关于 EEPROM[address] 方法的文档很少。我也遇到过这种方法偶尔会导致内存崩溃。

EEPROM.read(地址) 长时间 运行 还没有完全测试。编译时确实需要更多存储空间 space。它在幕后的行为是否更安全?

EEPROM[地址] 将为您提供对 eeprom 单元格的引用,而 EEPROM.read(地址) 将为您提供该单元格的无符号字符值。

在这两种情况下,您都应确保您的地址有效。

确保地址 >= 0 且 < EEPROM.length()。

EEPROM.read(adress) ->Read the EEPROM (address starting form 0)and send its value as unsigned char.

EEPROM[adress] -> reference eeprom cell with address

要减小文件的大小,您可以使用 avr/eeprom 库,它具有用于 eeprom 使用的各种函数和宏。这是一个可靠的库并且经过了良好的测试。 avr/eeprom.h

示例代码

#include <EEPROM.h>
#include <avr/eeprom.h>

void Eepromclr();

void setup() {

  Serial.begin(9600);

  eeprom_write_byte((void*)0,12);
  int x = eeprom_read_byte((void*)0);\
  Serial.println(x);

  Eepromclr();

  eeprom_update_byte((void*)0,6);
  int y = eeprom_read_byte((void*)0);
  Serial.println(y);

}
void loop() {

}

void Eepromclr() {
  for (int i = 0 ; i < EEPROM.length() ; i++) {
  EEPROM.write(i, 0);
}
Serial.println("Eeprom is cleared");
}