Compiler errors 错误:从‘;字符*’;至‘;char’;
请耐心听我说,我是C的新手,我正在尝试编写一个Arduino。我想写一个程序,输出一个特定长度的数据帧,字节值在0-255之间。再现错误的最小代码在下面的代码块中。编译时,我收到以下错误: 现在我的印象是,我正在虐待“返回帧”,但我就是不知道出了什么问题Compiler errors 错误:从‘;字符*’;至‘;char’;,compiler-errors,arduino,Compiler Errors,Arduino,请耐心听我说,我是C的新手,我正在尝试编写一个Arduino。我想写一个程序,输出一个特定长度的数据帧,字节值在0-255之间。再现错误的最小代码在下面的代码块中。编译时,我收到以下错误: 现在我的印象是,我正在虐待“返回帧”,但我就是不知道出了什么问题 char assembleFrame() { char frame[] = { 0x61 , 0x62 , 0x63 }; return frame; } void setup() { Serial.begin( 1
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 ] );
}
assembleFrame
返回char
,同时返回char*
。因为我不知道你在做什么,我无法建议如何解决这个问题。也许修复返回类型是正确的方法。查看以下代码:
char frame = assembleFrame();
考虑到您以后如何使用它,显然需要声明
frame
而不是char
,并且assembleeframe
需要声明为返回char*
char
类型用于存储单个char
(一个字节)
您的函数定义char assembleFrame
指定函数将只返回单个char
,因此当您尝试返回char[]
/char*
(char
数组/指针)时,它将失败
看起来Serial.print()
可以处理char*
,这可能需要以null结尾(因为它不要求长度说明符)
这段代码经过编译,我知道我做错了什么,thnx。我输入的是
char*assembleFrame()
,而不是char*assembleFrame()
。但是我现在有一个新问题:我不能使用以null结尾的字符串,因为有效负载可能包含null字节。固定大小没有问题。这容易解决吗?(在评论您的回复时,我还没有机会这样做,但现在就去做)。您可以一次向Serial.write()
发送一个字节,这应该允许为空。可能需要assembleFrame
将帧写入缓冲区(指向字符串的指针),并返回一个长度-然后您可以迭代缓冲区并Serial.write()
每个char
。是的,我在1秒前就找到了:)实际上您可以使用Serial.write(buf,len 0)传递一个长度参数
char frame = assembleFrame();
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 );
}