问题标签 [nanopb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 如何使用 nanopb 编译 .proto + .options 文件
我写了一个 .options 文件并将其放在与 .proto 文件相同的目录中。然后,我尝试使用命令编译它(使用 nanopb 编译器)
并得到这个错误:
那我做错了什么?我需要在 .proto 文件中导入我的选项文件吗?我还应该做些什么来让它发挥作用吗?
c - 在c中的nanopb中为protobuf消息中的重复字段创建回调和结构
我有一个原型消息定义为:
现在,编译后,该字段是 ofpb_callback_t
并且我想编写该函数。(没有 .options 文件)
现在,函数应该包含在哪里和什么?数据本身存储在哪里,我如何访问它/为其分配新数据?
* 编辑 *
根据@Groo 的回答,这是我尝试过的代码:
输出是:
之前:arr[0] = 10
解码成功:17
之后:arr[0] = 0
我做错了什么?
c - 在 protobuf 中对嵌套和重复字段使用回调 在 c 中使用 nanopb
*编辑:更新 * 我的消息定义为:
我正在尝试使用回调选项编写解码器和编码器。我认为我的编码工作正常,但我的解码器失败了。我的代码是:定义:
编码器/解码器功能:
主要是:
我得到的输出是:
大小:3个要编码的数据:123-1.200000、456-2.300000、789-3.400000 编码大小:29字节解码:1个解码数据:0-0.000000、0-0.000000、0-0.000000
编码缓冲区的打印:
0a07087b15ffffff9affffff99ffffff993f0a0808ffffffc80315333313400a0808ffffff950615ffffff9affffff995940
我在解码器中尝试了一些不同的结构,但它不起作用。很确定这是我错过的一些愚蠢的小东西,但我对此一无所知。
server - nanopb 无法与 google protobuf 通信
我创建了一个简单的服务器客户端程序。我想启用 NanoPb 和 Protobuf 之间的通信。但是,它不起作用。有谁知道我做错了什么?
TestParameterProto.proto :
TestParameterProto.options:
服务器.c:
Google Protobuf 中的 client.java :
我收到以下错误消息:
protocol-buffers - 依赖于带有自定义规则的外部仓库的原型
如何正确依赖外部存储库中定义的 proto_libary 规则并使用自定义规则?
我需要使用 nanopb 为外部存储库中的原型生成文件。这有效:
但是,当我定义自定义规则时,我认为我需要从 awesome_repo 获取底层 .proto 才能将其传递给 protoc ,但我找不到这样做的方法。我也试图不让 other_repo 必须拉入 nanopb 并为我生成它。
esp8266 - Nanopb + Azure MQTT 在 NodeMCU 上不起作用
我一直在尝试使用NodeMCU上的 Nanopb 库对字符串进行编码,并使用AzureMQTT发布它。
在单独测试时,Nanopb 和 Azure 都可以正常工作。但是,将两者集成在一个草图中会给我带来错误。
串口输出如下:
如果观察到,client.connected()
则返回 false,因此,消息不会被发布。
此外,有时会client.run()
出现堆栈错误:
解码堆栈跟踪给出:
C:\Users\Violet\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.3.0\cores\esp8266/heap.c 第 13 行
protocols - protobuf 实现未使用的字节(用于限制器实现)
我需要通过串行端口传输数据。为了确保数据的完整性,我想要一个围绕每个 protobuf 消息的小信封协议。我想到了以下几点:
- 消息类型(1 字节)
- 消息大小(2 个字节)
- protobuf 消息(N 字节)
- (校验和;可选)
消息类型主要是 proto 文件中定义的消息之间的映射。但是,如果消息损坏或某些字节丢失,则消息大小将不正确,并且无法再解释所有后续字节。解决这个问题的一种方法是在消息之间引入限制器,但为此我需要选择 protobuf 不使用的东西。是否存在任何 protobuf 消息从未使用过的字节序列?
我也想过另一种方式。如果 master 发现包损坏,它应该将通信重置为干净的开始。为此,我希望主机向从机发送 RESTART 命令。从机应以 ACK 应答,然后再次开始发送完整消息。在 RESTART 和 ACK 之间接收到的所有字节都将被主机丢弃。我想将 ACK 和 RESTART 编码为特殊消息。但是使用这种方法我面临同样的问题:我需要为 ACK 和 RESTART 找到未被任何 protobuf 消息使用的字节序列。
也许我也采取了错误的方法 - 随意建议其他方法来处理丢失的字节。
cocoapods - 安装 CocoaPod pod (Firestore) 在同一台笔记本电脑上给出不一致的结果
这里有限的 CocoaPod 经验......所以,我有 2 个项目包含 Firestore CocoaPod,除了应用程序名称外,它们具有相同的 pod 文件。其中之一,无论我安装/更新、清除缓存等多少次,它都会成功安装我需要的所有 pod 并创建 Pods/Pods.xcodeproj 文件和 Podfile.lock 文件。
工作吊舱文件
另一个项目(全新,在 pod 安装之前构建干净)尝试安装相同的 pod,但总是失败,并且不会创建 Pods/Pods.xcodeproj 文件或 Podfile.lock 文件。实际上,我创建了一些具有相同结果的新项目。
失败的 POD 文件
错误信息
可以工作的 pod 文件有旧版本的 pod 文件,因为我有一段时间没有接触过代码,所以我升级了版本,它仍然可以工作。
我不明白所有这些 pod 文件副本存储和提取的位置,但我看不出它们如何提取不同的源文件或类似的东西。我认为,如果一个 pod 适用于一个项目,那么它也适用于同一 Mac 上的另一个项目。
不久前,我完全放弃了 Firestore/Firebase,因为我被同样的问题难住了。我认为这个 nanopb pod 是我在其他地方也需要的东西,并且需要学习如何克服这种障碍,无论是 nanopb 问题还是 CocoaPods 问题。我希望这是 CocoaPods 安装的常见问题,而不是太独特。当我搜索 nanopb 安装问题时,找不到太多东西。搜索 CocoaPods 安装问题是指 CocoaPods 本身,而不是特定模块。
谢谢您的帮助。
c++ - c++ nanopb Protobuff without
I have a protoBuff3 specification which looks something like
And a options file that sets "MSG.data max_count:20"
I am trying to encode and decode protobuffs without using .
I am currently using pb_ostream_from_buffer and pb_encode however I when trying to link i get an error saying pb_ostream_..., pb_encode, pb_decode,... external symbols do not exist. I am able to find these functions defined in pb_encode.h and pb_decode.h
.Online i see reference to functions like ParseFromString and SerializeToString, however I can not find these function anywhere.
What is the proper way to serialize and serialize my message without iostreams?
c - 输入字符串由空终止字符组成
我正在使用 NanoPB 将编码数据(数组unsigned char
)从服务器发送到客户端。我将每个字节映射为一个char
,将它们连接起来,然后通过网络作为一个完整的字符串发送。在客户端,我有一个串行接口,可以使用getc
or读取服务器的响应gets
。问题是缓冲区可能有null
-terminating char
s并且gets
会失败。例如,假设缓冲区包含如下内容:
为简单起见,我将缓冲区写入文件并尝试将其读回并重建它(借助this):
这是输出:
如何从该文件重建缓冲区?为什么readChars
打印所有缓冲区strInput
而不打印?