Nanob-解码失败:零标记



这是我第一次在这里写作,如果我做错了什么,请原谅。

我需要关于"解码失败:零标记"状态的帮助。

我想使用ESP-NOW发送数组这是我的编码端:

epostavke.baterija[0]=razina_baterije[0];
postavke.baterija[1]=razina_baterije[1];
postavke.baterija[2]=razina_baterije[2];
postavke.baterija[03]=razina_baterije[3]; 
postavke.baterija[4]=razina_baterije[4];
postavke.baterija[5]=razina_baterije[5];
pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
pb_encode(&stream, Postavke_fields, &postavke);
esp_now_send(NULL, (uint8_t *) &buffer, sizeof(buffer));

在编码后打印:

Serial.println(postavke.baterija[0]);
Serial.println(postavke.baterija[1]);

它向我显示了正确的值-这意味着postavke.baterija[0]具有与postavke.baterija[1]类似的值,例如,它向我展示了87,85,这取决于它。

但问题是当我想解码它的时候。它告诉我:"解码失败:零标记"这是代码:

enter cod stream = pb_istream_from_buffer(buffer,sizeof(buffer));
bool status = pb_decode(&stream, Postavke_fields, &postavke);
if (!status)
{
printf("Decoding failed: %sn", PB_GET_ERROR(&stream));
return ;
}
Serial.println("Stigli podaci, a oni glase: ");
Serial.println(postavke.znak);
Serial.println(postavke.vrijeme_trajanja);
Serial.println(postavke.vrijeme_odmora);
Serial.println(postavke.boja1);
Serial.println(postavke.boja2);
Serial.println(postavke.boja3);
Serial.println(postavke.broj_signala);
Serial.println(postavke.timer);
Serial.println(postavke.multicaster);
Serial.println(postavke.broj_propustenih);
Serial.println(postavke.random_odmor);
Serial.println(postavke.baterija[0]);
Serial.println(postavke.baterija[1]);

如果我不使用这个

`

if (!status)
{
printf("Decoding failed: %sn", PB_GET_ERROR(&stream));
return ;
}

它解码其他所有东西,但不解码"postavke.baterija"阵列

以下是我在.proto文件中的操作方法

message Postavke {
required int32 ID=1;
required int32 znak=2;
required int32 vrijeme_trajanja=3;
required int32 vrijeme_odmora=4;
required int32 boja1=5;
required int32 boja2=6;
required int32 boja3=7;
required int32 broj_signala=8;
required int32 timer=9;
required int32 multicaster=10;
required int32 broj_propustenih=11;
required int32 random_odmor=12;
required int32 svjetlina=13;
repeated int32  baterija=14 ;

}

这是我的.options文件

Postavke.baterija  max_count:6;
Postavke.baterija  max_size:6;

请帮帮我!!错误在哪里?为什么不想解码?

谢谢!

pb_istream_from_buffer(buffer,sizeof(buffer));

您需要传递消息的实际长度,而不是缓冲区的整个长度。

现在,nanopb正在读取超过消息长度的消息,并且显然达到了零标记号,这在协议缓冲区中是无效的。

最新更新