【发布时间】:2019-07-07 23:55:16
【问题描述】:
我正在为 Arduino Uno 编写一些涉及复制部分数组的代码。使用memcpy 会导致一个完全不相关的变量偶尔在串行输出中出现损坏。这是显示问题所需的代码。
byte cchar[8][8];
byte fbold[16][16];
void setup() {
Serial.begin(9600);
}
void loop() {
for (byte i = 0; i < 8; i++) {
memcpy(cchar + i*8, fbold + 16 * i , 8);
Serial.println(i);
Serial.println(i);
}
delay(500);
}
我相信这应该重复输出以下内容:
1
1
2
2
3
3
4
4
5
5
6
6
7
7
但奇怪的是,它更像这样:(直接取自串行监视器)
0
0
1
1
2
2ff
4
5
4
4
5
5
6
6
7
7
0
0
1
1
2
2
3
3
4
4
5
5ff
7
07
7
删除memcpy 命令后,它会按我的预期输出。
合乎逻辑的结论是我的memcpy 正在破坏i。
但为什么呢? i 应该永远不会超过 7,cchar 是 64 字节长,我只复制 8 字节,对吧?那么我将如何在cchar 之外进行复制?
【问题讨论】:
-
如果没有
Serial,你会迷路ff吗? -
@Buddy 我不明白。没有
Serial我怎么有任何输出?此外,有时输出不正确,而不是ff,有时是w,有时只是显示为正方形的奇怪字符。另请注意println在出现问题时无法添加换行符。很奇怪,对吧? -
@Buddy 现在再看一遍,好像那些特殊字符在粘贴到这里的时候都没有出现,至少在chrome中...
-
要详细了解问题,如果根本没有输出,那么可能是
Serial和memcpy一起出现的问题。如果有流浪的ff,那么它可能只有memcpy。 -
你在串行监视器中设置了 9600 波特