问题描述
我在网上搜索并看到了此链接“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() 的结果。 我不明白它们之间的区别。
解决方法
所有信息都在语言参考中:
从 EEPROM 中读取任何数据类型或对象。
从 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 个。