微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EEPROM.read() 和 EEPROM.get() 的区别

如何解决EEPROM.read() 和 EEPROM.get() 的区别

我在网上搜索并看到了此链接https://www.best-microcontroller-projects.com/arduino-eeprom.html#:~:text=Arduino%20EEPROM%20get%20vs%20read,bytes%20starting%20from%20an%20address”。但我仍然不明白 EEPROM.read(address) 和 EEPROM.get(address) 有何不同。

我创建了这段代码,以查看 EEPROM.get() 是否会从第一个地址到最后一个地址读取字节。

#include <EEPROM.h>

int address = 0;
int eeAddress = 0;
byte value;
float f = 0.00f;

void setup() {
    Serial.begin(9600);
  while (!Serial) {
         ;                    // wait for serial port to connect. Needed for native USB port only
  }
}

void loop() {
  //--------------------EEPROM.get()-----
    Serial.println("---Using EEPROM.get()----");
  EEPROM.get(eeAddress,f);
      Serial.print(".get() address: ");
  Serial.println(eeAddress);
  Serial.print(".get() value: ");
  Serial.println(f,3);

  //-------------------EEPROM.read()------
    Serial.println("---Using EEPROM.read()----");

  value = EEPROM.read(address);
    Serial.print(".read() address: ");
  Serial.println(address);
  Serial.print(".read() value: ");
  Serial.println(value,DEC);
  
}

我只得到“-0.000”作为 EEPROM.get() 的结果和“3”作为 EEPROM.read() 的结果。 我不明白它们之间的区别。

解决方法

所有信息都在语言参考中:

get()

从 EEPROM 中读取任何数据类型或对象。

read()

从 EEPROM 中读取一个字节。

如果您需要更多信息:

read() 对单个字节进行操作。 它从地址读取单个字节。

get() 从一个地址开始读取多个字节。读取的字节数就是类型的大小。

here所述。

,

好的...在我自己弄清楚之后...参考我对 Nino 回应的评论,问题是我事先使用了 EEPROM.write()。当我使用 EEPROM.get() 或 EEPROM.read() 时,这并不重要,因为我只向 EEPROM 写入了一个字节。回到 Nino 所说的内容或用于问题的链接,“https://www.best-microcontroller-projects.com/arduino-eeprom.html#:~:text=EEPROM%20Write%20Standard%20type%20or%20Structure&text=You%20can%20use%20this%20function,that%20use%20different%20type%20sizes”。,EEPROM.get() 从一个地址(超过 1 个字节)开始读取多个字节,所以如果我想存储259(2 个字节)到 EEPROM 我将不得不使用 EEPROM.put() 后跟 EEPROM.get() 和 not EEPROM.write() 后跟 EEPROM.get() 或 EEPROM。读()。

现在......解释我对这个话题的回答。我得到“ -0.000 ”的原因是因为这是我以前的结果。使用 EEPROM.put() 将使用更新语义。意思是如果你给地址一个整数 56 和你存储 56 的变量,通过使用 int x; EEPROM.get(addr,x);int x = EEPROM.read(addr); 是一个整数,你将得到整数值。但是,如果变量是另一种类型,例如 float x ; EEPROM.get(addr,x);,您将不会获得整数 56,但您将获得该声明(浮点数)中存储在该地址中的值。因此,我得到“ -0.000 ”和“ 3 ”的原因是因为浮点数的先前值和整数的先前值不同。对于“ 3 ”,它可能已经用 EEPROM.write() 存储了 259 个,或者只是用 EEPROM.write() 或 EEPROM.put() 存储了 3 个。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。