Arduino EEPROM看起来很脆弱,我应该写两次吗?

时间:2013-01-23 23:02:08

标签: c arduino eeprom

我习惯使用高级语言编写PC和智能手机,微控制器对我来说是一个新的领域。它们是不同的,更不值得信赖,需要不同的技术?这里有一些代码可以写入和读取运行在Arduino Mega上的EEPROM :(附加了以太网屏蔽,此处未使用)

#include <EEPROM.h>
int addr = 0;
int val;
byte value;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  val = 9;
  EEPROM.write(addr, val);
  delay(500);
  addr = addr + 1;
  if (addr == 20) addr = 0;
  value = EEPROM.read(addr);
  Serial.print(addr);
  Serial.print("\t");
  Serial.print(value);
  Serial.println();  
}

下面是什么:

1   91
2   91
3   9
4   9
5   9
6   9
7   9
8   9
9   9
10  9
11  9
12  202
13  202
14  202
15  202
16  202
17  202
18  202
19  202
0   9
1   89
2   91
3   9
4   9
5   9
6   9
7   9
8   9
9   9
10  9
11  9
12  9
13  9
14  9
15  9
16  9

..... 一般来说,地址1和2总是不稳定,需要两次写操作才能改变~10以上的存储位置。

我可以换掉另一块电路板,但仍然有类似的怪异。

如何使我的编程适应这种看似不稳定的表现?

1 个答案:

答案 0 :(得分:6)

简单地说,你的代码是错误的。

从逻辑上逐步执行。您正在写入地址为addr的EEPROM。然后等待500毫秒,增加addr,然后从新的addr中读取。因此,您读取的addr不是您写的addr