我在网上搜索过,看到了这个链接“https://www.best-microcontroller-projects.com/arduino-eeprom.html#:~:text=Arduino%20EEPROM%20get%20vs%20read,bytes%20starting%20from%20an%20address”。但是我仍然不明白EEPROM.read(地址)和EEPROM.get(地址)有什么不同。
我创建了这段代码,以查看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);
}对于EEPROM.get(),我只得到了"-0.000“,对于EEPROM.read(),我得到了"3”。我不明白他们之间的区别。
发布于 2021-04-22 03:14:57
发布于 2021-04-22 09:43:27
好的..。在我自己弄清楚这件事之后...关于我对尼诺响应的评论,问题是我事先使用了EEPROM.write()。当我使用EEPROM.get()或EEPROM.read()时,这并不重要,因为我只向EEPROM中写入了一个字节。回到尼诺所说的话或问题中使用的链接“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()和,而不是 EEPROM.write(),然后是EEPROM.get()或EEPROM.read()。
现在……解释我对这个话题的回答。我得到“-0.000”的原因,是因为它是我之前拥有的结果。使用EEPROM.put()将使用更新语义。意思是,如果你给地址一个56的整数,并且你存储56的变量,通过使用int x; EEPROM.get(addr, x);或int x = EEPROM.read(addr);是一个整数,你将会得到整数值。但是,如果变量是另一种类型,比如浮点数,您将不会得到整数56,但是使用该声明( float x ; EEPROM.get(addr, x); )存储在该地址中的值就是您将获得的值。因此,我得到“-0.000”和“3”的原因是因为之前的浮点值和整数的前值不同。对于“3”,它可以用EEPROM.write()存储为259,也可以简单地用EEPROM.write()或EEPROM.put()存储为3。
https://stackoverflow.com/questions/67201612
复制相似问题