【发布时间】:2014-12-30 15:31:37
【问题描述】:
我正在使用具有 32.000 字节存储空间的 Arduino UNO。 在编写程序时,我创建了一个用随机数填充数组的小函数。 该函数使用我在脚本顶部定义的变量:
int mode1[100];
这是填充上面数组的函数。 RandomSeed 接受一个数字作为其种子,由analogRead(0) 提供,其中0 表示我的Arduino 板上的引脚0。
void fillArray(int aSize){
if (aSize == 100){
randomSeed(analogRead(0));
for (int i=0; i < aSize; i++){
mode1[i] = random(1, aSize);}
当我调用 fillArray(100) 之类的 fillArray 函数时;它将生成我的整数。然后我通过这段代码在我的电脑上阅读它们:
Serial.println("Filled array");
for (int i=0; i <= 99; i++){Serial.println((int)mode1[i]);}
一切似乎都运行良好,但我注意到我的函数将生成的前 10 个整数始终为 0。我的主要问题是我不知道如何解决这个问题,因为脚本没有给我任何错误。因此,我的问题是:该数组的前 10 个整数始终为 0 的原因是什么?
我对原因的可能解释是 AnalogRead 函数做了一些奇怪的事情(目前它在 A0 插槽中只有一个引脚,没有任何连接,这应该工作。我也知道它不是存储容量,因为 32.000 字节足以在数组中存储 100 个整数,而我的脚本只有 5000 字节。
我对此有点卡住,因为我不知道是什么导致了问题,对此问题的任何帮助将不胜感激。
【问题讨论】:
-
输出的其余部分是否始终相同?您还可以通过手动将 randomSeed 设置为 5000 并查看是否得到类似结果(前 10 个为 0)来测试它吗?我选择了 5000,因为它超出了 AnalogRead 将返回的范围。
-
0当random被这样调用时不能返回:random(1, aSize);... -
你有没有在数组被填充后运行的代码?我怀疑可能有什么东西正在破坏你的数组......
-
您可能还希望在生成每个随机数时打印出来。我怀疑是内存损坏了。如果生成随机数的循环总是生成正确的非零数,那么稍后您的数组似乎有 0,那么您可以确定您遇到了内存损坏的情况。
-
Minor:
for (int i=0; i < aSize; i++)比for (int i=0; i <= (aSize-1); i++)更容易混淆