arduino - Arduino memcpy 扭曲串行输出
问题描述
我正在为涉及复制部分数组的 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
预期输出。合乎逻辑的结论是 mymemcpy
正在破坏i
。但为什么呢?i
据说永远不会超过 7 个,cchar
长度为 64 个字节,而我只复制 8 个字节,对吧?那么我将如何在外部复制cchar
?
解决方案
the problems is pointer arithmetic. sizeof(*cchar)
is 8 so address of cchar + 1
is 8 bytes after address of cchar
this works
byte cchar[8][8];
byte fbold[16][16];
void setup() {
Serial.begin(115200);
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 16; j++) {
fbold[i][j] = j;
}
}
for (int i = 0; i < 8; i++) {
memcpy(cchar + i, fbold + i, 8);
for (int j = 0; j < 8; j++) {
Serial.print(cchar[i][j]);
Serial.print(',');
}
Serial.println();
}
}
void loop() {
}