将数组内容打印到Serial,给出意外值

时间:2015-12-05 07:31:45

标签: c++ c arrays arduino serial-port

我试图通过Serial发送数组内容。这是代码:

    #include <PCM.h>
    const unsigned char sample[] PROGMEM = {
    126, 127, 128, 128, 128, 128, 128, 127, 128, 128, 128, 129, 129, 128, 127, 128, 128, 127, 126, 127, 128, 129, 128, 127, 126, 127, 128, 128, 126, 126, 127, 127, 127, 127, 127, 127, 126, 127, 129, 130, 129, 128, 126, 126, 126, 126, 127, 129, 130, 129, 127, 127, 127, 127, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 130, 131, 129, 127, 126, 126, 126, 127, 127, 128, 128, 128, 128, 127, 128, 128, 127, 127};

void setup()
{
Serial.begin(115200);

delay(3000);
for (int i=0; i<sizeof(sample); i++)
{
delay(100);
Serial.println(sample[i]);
}
}

void loop()
{
}

当我开始监视串行端口时,它会提供非预期的输出,而不是数组内的原始值。 这是第一个代码的输出&#34;与Println&#34;:

0
0
6
0
0
0
1
0
0
6
6
6
6
6
6
6
0
0
135
0
0
6
0
0
1
3
0
6
171
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
6
1
4
45
0
0
6
0
6
0
248
254

这是&#34;写&#34;的输出: i could not paste the output of "write", i captured it as jpg

但是,当我这样做时,我得到了我想要的值,但我将失去FOR循环,

 #include <PCM.h>

 const unsigned char sample[] PROGMEM = {
 126, 127, 128, 128, 128, 128, 128, 127, 128, 128, 128, 129, 129, 128, 127, 128, 128, 127, 126, 127, 128, 129, 128, 127, 126, 127, 128};
 void setup()
 {
 Serial.begin(115200);
 delay(3000);
 //for (int i=0; i<sizeof(sample); i++)
// {
 delay(100);
 Serial.println(sample[0]);
 Serial.println(sample[1]);
 Serial.println(sample[2]);
 Serial.println(sample[3]);
 Serial.println(sample[4]);
// }
 }
 void loop()
 {
 }

有什么问题? 我无法理解。 任何帮助将不胜感激。

注意:两个代码对于数组中的前5个值应给出相同的结果,但它没有,第二个代码给出&#34; 126 127 128 128 128&#34;它很好,但第一个代码不会,它只有变量&#34; i&#34;而不是逐个列出数组的所有内容。

提前谢谢你,

1 个答案:

答案 0 :(得分:1)

我将程序存储器“PROGMEM”中的内存类型更改为普通或动态内存,并且在此代码中一切正常,我可以轻松地使用“for”循环进行迭代。

开发人员应该了解如何使用“for or while”或程序存储器“PROGMEM”中的任何循环指令进行迭代,而不仅仅是动态存储器(或告诉我们如何存在^ _ ^)

谢谢,