Memory 什么';s EEPROM.read(地址)和EEPROM[地址]之间的差异

Memory 什么';s EEPROM.read(地址)和EEPROM[地址]之间的差异,memory,arduino,eeprom,Memory,Arduino,Eeprom,我在Arduino上使用EEPROM来存储一些大的常量数组。我注意到EEPROM.read(地址)和EEPROM[地址]都适用于我的阅读。但是关于EEPROM[地址]方法的文献很少。使用这种方法时,我偶尔也会遇到内存崩溃 EEPROM.read(地址)还没有经过长时间的完全测试。编译时确实会占用更多的存储空间。它在幕后的行为更安全吗 EEPROM[adress]将为您提供对EEPROM单元的引用,而EEPROM.read(adress)将为您提供该单元的无符号字符值 在这两种情况下,你都应该确保

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


EEPROM.read(地址)还没有经过长时间的完全测试。编译时确实会占用更多的存储空间。它在幕后的行为更安全吗

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

在这两种情况下,你都应该确保你的地址是有效的

确保地址>=0且 EEPROM.read(address)->读取EEPROM(从0开始的地址)并将其值作为无符号字符发送

EEPROM[ADRES]->带地址的参考EEPROM单元

要减小eeprom的大小,可以使用avr/eeprom库,该库具有用于eeprom的各种功能和宏。这是一个可靠的库,经过良好测试。

示例代码
#包括
#包括
void Eepromclr();
无效设置(){
Serial.begin(9600);
eeprom写入字节((void*)0,12);
int x=eeprom读取字节((void*)0)\
序列号println(x);
Eepromclr();
eeprom更新字节((void*)0,6);
int y=eeprom读取字节((void*)0);
序列号println(y);
}
void循环(){
}
void Eepromclr(){
对于(int i=0;i
#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");
}