请耐心等待我,我是C的新人,我正在尝试编写一个Arduino。我想编写一个程序,该程序吐出一个特定长度的数据帧,字节值范围为0-255。重现错误的最小代码位于下面的代码块中。编译时收到以下错误:
sketch_apr09b.cpp: In function ‘char assembleFrame()’: sketch_apr09b.cpp:9:10: error: invalid conversion from ‘char*’ to ‘char’
现在我的印象是,我正在虐待“回归框架”,但我无法弄清楚出了什么问题。
char assembleFrame() {
char frame[] = {
0x61 , 0x62 , 0x63
};
return frame;
}
void setup() {
Serial.begin( 115200 );
};
void loop() {
char frame = assembleFrame();
Serial.print( frame );
}
当我在接收PC上运行hexdump时,我想看到:
00000000 61 62 63 |abc|
00000003
我发现了很多类似的问题,但却无法弄清楚我做错了什么。
修改: 这是我到目前为止提出的,但接收到错误的数据。我想我正在发送指向实际数据的指针。
byte *assembleFrame() {
byte frame[] = { 4 , 'a' , 'b' , 'c' };
return frame;
}
void setup() {
Serial.begin( 115200 );
};
void loop() {
byte *frame = assembleFrame();
Serial.write( frame , frame[ 0 ] );
}
答案 0 :(得分:3)
char
类型用于存储单个char
(一个字节)。
您的函数定义char assembleFrame
指定该函数只返回一个char
,因此当您尝试返回char[]
/ char *
时char
数组/指针),它失败了。
看起来Serial.print()
可以处理char *
,它可能需要以空值终止(因为它要求没有长度说明符)。
char *assembleFrame() {
char frame[] = {
0x61, 0x62, 0x63, 0x00 // null byte to signify end of string
};
return frame;
}
void setup() {
Serial.begin( 115200 );
};
void loop() {
char *frame = assembleFrame();
Serial.print( frame );
}
答案 1 :(得分:0)
查看此代码:
char frame = assembleFrame();
鉴于您以后如何使用它,显然frame
需要声明char *
而不是char
,并且assembleFrame
需要声明为返回char *
}。
答案 2 :(得分:-1)
assembleFrame
时, char
会返回char*
。由于我不知道你在做什么,我不能建议如何解决这个问题。也许修复返回类型是正确的方法。