gpt4 book ai didi

c - 使用protobuf和STM32F7设计协议(protocol)

转载 作者:行者123 更新时间:2023-11-30 16:15:33 24 4
gpt4 key购买 nike

我正在尝试执行该 wiki 中定义和描述的相同协议(protocol) https://wiki.trezor.io/Developers_guide-Message_Workflows

我的工具集是用于嵌入式系统的 Protobuf:Nanopb。STM32F7使用串口。

我现在正在尝试在PC和STM32F7之间进行通信,通常通信将在两个STM32F7板之间完成。

我的问题:

  1. 哪种协议(protocol)足以满足像 Trezor 中那样的请求和应答?

  2. 我在 google 上搜索后发现我必须使用 HLDC 之类的东西,对于该目的是否有必要,或者这是一种开销?

  3. 编码和设计问题:我将触发一个串行中断,该中断始终轮询两个板之间通信的数据,现在将有一个非常大的状态机来解码每种消息类型并根据消息类型。有替代设计吗?

最佳答案

首先,据我所知,nanopb 不支持 Protobuf 模式语言的全部可能性。因此,您需要一个适用于 nanopb 的模式,希望这足以满足需求。然而,它可能非常烦人,因为(据我所知)非常有用的 oneof 不起作用。

其次,protobuf 线格式不是自定界的。因此,您将通过串行电缆喷射数据,但不可能可靠地(如果有的话)告诉一条消息在哪里结束,另一条消息在哪里开始。因此,您需要传输某种消息间同步字节模式,选择不太可能在消息中遇到的字节模式。您必须读取同步模式之间的字节,将它们放入缓冲区中,然后从中进行解析。

第三,如果您要发送各种不同的消息并且无法使用 oneof,那么您将需要一些其他方法来识别已到达的消息类型,以便您可以将其解析为正确类型的对象。该“方式”可以简单地是消息类型的固定序列,或者其值标识消息类型的字节,或者在所有消息中执行相同操作的字段。 oneof 很有吸引力(尽管您无法使用),因为它可以用作各种不同消息类型的载体;您只需使用 oneof 的解析器解析接收到的数据即可。

关于c - 使用protobuf和STM32F7设计协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57045483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com