2013-01-23 91 views
1

我习惯于使用高级语言编程PC和智能手机,微控制器对我来说是一个新领域。他们有些不同,更不可靠,需要不同的技术?下面是一些代码写入和读取到EEPROM上的Arduino巨型运行:(有一个以太网盾连接,这里不使用)Arduino EEPROM看起来很脆,应该写两遍吗?

​​

下面有什么出来:

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

哦,小子,如果电脑硬件如此不可靠,硬件甚至会如何运作? (也就是说,必须有更好的解释/修复。) – 2013-01-23 23:11:39

+1

硬件*有时*不可靠和片状。地狱,DRAM需要每隔几个周期刷新一次,否则会流失。硬盘驱动器加载了纠错逻辑来修复损坏的扇区。电压的轻微变化可能会产生完全不合格的结果。令人惊讶的数量非常脆弱,以至于控制器中有相当多的校正逻辑; – slugonamission

+0

毫无疑问,微控制器编程技术的传统是检查和校正传感器和逻辑。这是我想深入研究的部分原因。 Thnaks – mcktimo

回答

6

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

逻辑上通过它。您正在写入地址为addr的EEPROM。然后等待500ms,增量为addr,然后从新的addr中读取。您读取的addr因此不是您写信给的addr

+0

尽管至于位置1和位置2,我并没有一个令人遗憾的线索:( – slugonamission

+0

谢谢,就前几个位置而言,很容易跳过该区域的内存 – mcktimo

+1

我跑了你的确切代码无法解释的行为当新的硬件不是不可靠的,但可能是_now_。注意,你的代码将在11天内完成最大的写入周期,如果你在其他地方运行这个代码的其他修订版,只有在没有时间延迟,你可以很容易地烧毁存储位置100k写入不是那么大的数字 - 28小时超过100 kseconds – jdr5ca