1

我习惯于使用高级语言对 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 以上的内存位置。

我可以换掉另一块板,但仍然会遇到类似的怪事。

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

4

1 回答 1

6

简而言之,您的代码是错误的。

逻辑地逐步完成它。您正在写入 address 的 EEPROM addr。然后等待 500 毫秒,递增addr,然后从新的addr. 因此,addr您读取的内容不是addr您写入的内容。

于 2013-01-23T23:09:10.667 回答