Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino memcpy使串行输出失真_Arduino_Memcpy - Fatal编程技术网

Arduino memcpy使串行输出失真

Arduino memcpy使串行输出失真,arduino,memcpy,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

我正在为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);
}
但奇怪的是,它更像这样:(直接取自串行监视器)

删除
memcpy
命令后,它会像我预期的那样输出。 合乎逻辑的结论是我的
memcpy
正在腐蚀
i

但为什么呢
i
应该不会超过7,
cchar
有64个字节长,我只复制了8个字节,对吗?那么,我将如何在
cchar
之外进行复制呢?

问题在于指针算法
sizeof(*cchar)
是8,所以
cchar+1的地址是cchar地址后的8个字节

这很有效

字节cchar[8][8];
字节fbold[16][16];
无效设置(){
序列号开始(115200);
对于(int i=0;i<16;i++){
对于(int j=0;j<16;j++){
fbold[i][j]=j;
}
}
对于(int i=0;i<8;i++){
memcpy(cchar+i,fbold+i,8);
对于(int j=0;j<8;j++){
连续打印(cchar[i][j]);
连续打印(',');
}
Serial.println();
}
}
void循环(){
}

问题在于指针算法
sizeof(*cchar)
是8,所以
cchar+1的地址是cchar地址后的8个字节

这很有效

字节cchar[8][8];
字节fbold[16][16];
无效设置(){
序列号开始(115200);
对于(int i=0;i<16;i++){
对于(int j=0;j<16;j++){
fbold[i][j]=j;
}
}
对于(int i=0;i<8;i++){
memcpy(cchar+i,fbold+i,8);
对于(int j=0;j<8;j++){
连续打印(cchar[i][j]);
连续打印(',');
}
Serial.println();
}
}
void循环(){
}

没有
序列号
你是不是迷路了
ff
?@伙计,我不明白。没有
Serial
我怎么能有任何输出?此外,有时除了
ff
之外,还有不正确的输出,有时是
w
,有时是只显示为正方形的奇怪字符。还请注意,
println
出错时无法添加换行符。奇怪,是吗?@Buddy现在我再看一遍,这些特殊字符似乎在粘贴到这里时都没有出现,至少在chrome中是这样……为了进一步了解这个问题,如果根本没有输出,那么可能是
Serial
memcpy
一起出现的问题。如果有杂散的
ff
,那么它可能是
memcpy
单独的。您是否在串行监视器中设置了9600波特而没有
Serial
您是否有杂散的
ff
?@伙计,我不明白。没有
Serial
我怎么能有任何输出?此外,有时除了
ff
之外,还有不正确的输出,有时是
w
,有时是只显示为正方形的奇怪字符。还请注意,
println
出错时无法添加换行符。奇怪,是吗?@Buddy现在我再看一遍,这些特殊字符似乎在粘贴到这里时都没有出现,至少在chrome中是这样……为了进一步了解这个问题,如果根本没有输出,那么可能是
Serial
memcpy
一起出现的问题。如果有杂散的
ff
,则可能是
memcpy
单独存在。串行监视器中是否设置了9600波特
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