|
目的
测试和了解Arduino板载EEPROM的使用。
原文地址:
http://forum.godpub.com/thread-90-1-1.html
(转载请注明出处)
正文
QQ群里一朋友问Arduino上如何使用EEPROM存储字符型数据,其实无论是字符型数据还是其它类型数据,或者类似文件、图片这样的对象,都是作为二进制数据存在的。
Arduino官方的有三个EEPROM的例子,分别是清空EEPROM、 写入EEPROM、读取EEPROM。而清空EEPROM,其本质就是把整个EEPROM的空间写入0。而读写的语法分别是:EEPROM.read(address)、EEPROM.write(address, value),是不是很简单?
下面是一个简单的例子,写入一组字符串到EEPROM中,然后读出来,通过串口监视器显示出来。
- #include <EEPROM.h>
-
- void setup()
- {
- //Test Clear
- for (int i =0; i< 1024; i++)
- {
- EEPROM.write(i, 0);
- }
-
- Serial.begin(9600);
- }
-
- void loop()
- {
- //Test Write
- char buf_input[]="Hello, World!";
- for (int i =0; i< strlen(buf_input); i++)
- {
- EEPROM.write(i, buf_input[i]);
- }
- delay(2000);
-
- //Test Read
- char buf_output[20];
- for(int j=0; j<20; j++)
- {
- buf_output[j] = EEPROM.read(j);
- }
-
- //Output to Serial Monitor
- Serial.println(buf_output);
- delay(3000);
- }
复制代码
这个例子中,我对0至1023地址中写入0,来清空EEPROM,这是因为Arduino不同的微控制器有不同大小的EEPROM。对于Arduino UNO R3而言,微控制器是ATmega328,空间大小是1024字节。
The microcontrollers on the various Arduino boards have different amounts of EEPROM: 1024 bytes on the ATmega328, 512 bytes on the ATmega168 and ATmega8, 4 KB (4096 bytes) on the ATmega1280 and ATmega2560.
另外,需要注意的是EEPROM写入寿命的问题,这个很容易被忽略。
An EEPROM write takes 3.3 ms to complete. The EEPROM memory has a specified life of 100,000 write/erase cycles, so you may need to be careful about how often you write to it.
当写这个例子的时候,想到一个有意思的问题,就是对于1024个字节长度的EEPROM,我们如果在第1024、1025、1026处分别写入内容,那么会写到哪里去,读出又会读出哪些内容?通过测试,我们发现在1024、1025、1026处写入和读出内容,等同于在0、1、2处操作。感兴趣的读者可以自己修改代码测试。
结论
Arduino的EEPROM库提供了很方便的存储和读取功能,对EEPROM的操作简单直接。
文成仓促,错漏难免,如有发现,烦请赐教。
|
|