Arduino等单片机运行时采集的数据大多在寄存器以及动态存储(“内存”)中, 掉电就会丢失. 为了保存这些数据, 需要将其保存到静态存储(“硬盘”/“SD卡”/…)中. Arduino Nano自带1kb的EEPROM, 掉电后其中数据不会丢失.
Arduino库中有头文件EEPROM.h, 其中定义了读写EEPROM的两个函数, 注意这两个函数只能对单字节数据进行读取, 而int占据了2个字节, long float double占据了4个字节乃至8个字节. 解决方法可以是直接读写每个字节的地址, 也可以使用共同体来进行转换.
#include<EEPROM.h>
EEPROM.begin(1024);
写操作
EEPROM.write(address,byte); // address取0~1023(与EEPROM.begin对应, 不要大于硬件中EEPROM的容量)
读操作
EEPROM.read(address); // address取0~1023(与EEPROM.begin对应, 不要大于硬件中EEPROM的容量)
字节数据转换示例
使用地址
long d;
uint8_t *p=(uint8_t*) &d; // 定义指针变量p, 指向d
for(i=0;i<sizeof(d);i++){
*(p+i)=EEPEOM.read(i);
}
for(i=0;i<sizeof(d);i++){
EEPEOM.write(i,*(p+i));
}
使用共同体
union{
long d;
uint8_t bytes[4];
} data;
for(i=0;i<sizeof(data);i++){
data.bytes[i]=EEPROM.read(i);
}
for(i=0;i<sizeof(data);i++){
EEPROM.write(i,data.bytes[i]);
}
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!