繁体   English   中英

将数组内容打印到序列号,给出意外的值

[英]Printing array contents to Serial, Giving unexpected values

我正在尝试通过串行发送数组内容。 这是代码:

    #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()
{
}

当我开始监视串口时,它给出了非预期的输出,而不是数组中的原始值。 这是第一个代码“with Println”的输出:

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

这是“写入”的输出:我无法粘贴“写入”的输出,我将其捕获为 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 个值,这两个代码应该给出相同的结果,但事实并非如此,第二个代码给出“126 127 128 128 128”,这很好,但第一个代码不会,它只有一个区别使用变量“i”而不是一一列出数组的所有内容。

先感谢您,

我将程序类型“ PROGMEM”的内存类型更改为普通或动态内存,此代码中的所有内容均正常运行,我可以轻松地使用“ for”循环进行迭代,而不会出现问题。

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

谢谢,

Sizeof 返回系统为您的变量保留的字节数。 因为它是一个数组,所以 sizeof 不知道正在使用什么类型的变量。 要获得可变数组大小并且您想遍历数组,您应该检查数组的大小以及数组一侧变量的大小。

int array[] = {1,2,3,4}
size_t arraySize = sizeOf(array) / sizeOf(array[0])

这将按方面返回 4。 你明确地告诉函数它正在处理一个 int 因为它是在数组的第一个索引中定义的。 请查看此主题以获取更多信息1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM