首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nanopb -Decoding失败:零标记

Nanopb -Decoding失败:零标记
EN

Stack Overflow用户
提问于 2020-03-20 05:29:03
回答 1查看 652关注 0票数 2

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

我需要“解码失败:零标签”状态的帮助。

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

代码语言:javascript
复制
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));

在编码之后,当我打印时:

代码语言:javascript
复制
 Serial.println(postavke.baterija[0]);
   Serial.println(postavke.baterija[1]);

它向我展示了正确的值--所以它意味着postavke.baterija像postavke.baterija1一样具有值,例如它向我展示了87 ,85取决于。

但问题是当我想解码它的时候。它向我展示了:"Decoding failed: zero tag“这是代码:

代码语言:javascript
复制
 enter cod stream = pb_istream_from_buffer(buffer,sizeof(buffer));
     bool status = pb_decode(&stream, Postavke_fields, &postavke);
        if (!status)
        {
            printf("Decoding failed: %s\n", 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]);

如果我不使用这个

`

代码语言:javascript
复制
if (!status)

     {
            printf("Decoding failed: %s\n", PB_GET_ERROR(&stream));
            return ;
        }

它解码除`"postavke.baterija“数组以外的所有内容

下面是我在.proto文件中是如何做的

代码语言:javascript
复制
 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文件

代码语言:javascript
复制
Postavke.baterija  max_count:6;
Postavke.baterija  max_size:6;

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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-03-20 13:15:44

代码语言:javascript
复制
pb_istream_from_buffer(buffer,sizeof(buffer));

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

现在nanopb正在读取超过消息长度的数据,并且显然达到了零标签数,这在Protocol Buffers中是无效的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60765306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档