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 を超えるメモリ位置を変更するには 2 回の書き込みが必要です。

別のボードに切り替えても、同様の奇妙なことが起こります。

この一見不安定なパフォーマンスにプログラミングを適応させるにはどうすればよいでしょうか?

4

1 に答える 1

6

簡単に言うと、コードが間違っています。

論理的にステップスルーします。アドレス の EEPROM に書き込んでいますaddr。次に、500 ミリ秒待機し、 をインクリメントaddrしてから、新しい から読み取りますaddr。したがってaddr、あなたが読むものは、addrあなたが書くものではありません。

于 2013-01-23T23:09:10.667 に答える