为什么当我使用max_count对nanopb中的重复字段进行编码时,另一方面,bytes.write为零(空)却无法对其进行编码

时间:2019-08-18 03:30:31

标签: nanopb

我正在使用arduino对消息进行编码,我尝试了编码和解码回传的要求和成功,但是为了重复,在对它进行编码之后,缓冲区的大小为0,因此我无法将缓冲区发送给其他人arduino

这是我的代码

file.ino

  {

   for(int i=0;i<7;i++)
    message.header[i]=i+1;

//this is my variabel, i declare in .proto = repeated int32 header = 4  [(nanopb).max_count = 10, (nanopb).fixed_length = true];

  stream = pb_ostream_from_buffer(buffer, sizeof(buffer));

  bool status = pb_encode(&stream, Message_fields, &message);

 Serial.println(stream.bytes_written); 

//when i print this after encode, the data is loss, but when the field type is required, it will show some data bytes

}

1 个答案:

答案 0 :(得分:0)

您的标头变量是10个条目的固定长度数组。没关系。如果不是固定长度的字段,则将有一个单独的header_count字段,您必须将其设置为实际的条目数。您可以查看内部生成的.pb.h,仔细检查是否没有header_count字段。

您的代码未显示您分配的缓冲区的长度。可能太短了吗?尽管该消息仅需要大约14个字节。

您还可以检查status是否正确,即编码是否成功。如果不是,则可以从stream.errmsg中找到更多信息。