我正在使用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
}
答案 0 :(得分:0)
您的标头变量是10个条目的固定长度数组。没关系。如果不是固定长度的字段,则将有一个单独的header_count
字段,您必须将其设置为实际的条目数。您可以查看内部生成的.pb.h
,仔细检查是否没有header_count
字段。
您的代码未显示您分配的缓冲区的长度。可能太短了吗?尽管该消息仅需要大约14个字节。
您还可以检查status
是否正确,即编码是否成功。如果不是,则可以从stream.errmsg
中找到更多信息。