3

请多多包涵,我是 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 ] );
}
4

3 回答 3

3

char类型用于存储单个char(一个字节)。

您的函数定义char assembleFrame指定该函数将仅返回一个char,因此当您尝试返回char[]/ char *char数组/指针)时,它会失败。

看起来Serial.print()可以处理 a 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 );
}
于 2012-04-09T18:58:02.527 回答
0

看这段代码:

char frame = assembleFrame();

鉴于您以后如何使用它,显然frame需要声明char *not char,并且assembleFrame需要声明为 Return char *

于 2012-04-09T18:56:51.837 回答
-1

assembleFrame返回char时返回char*。因为我不知道你在做什么,所以我不能建议如何解决这个问题。也许修复返回类型是正确的方法。

于 2012-04-09T18:54:09.380 回答