您可以将 meta-data 包含到生成的平面缓冲区 header 中吗?
Can you include meta-data into a generated flat buffer header?
我目前正在通过 UART 在我的 PC 和 ARM M4 微控制器之间发送数据。我定义了自己的协议,其中每条消息如下所示:
[START_CHAR LEN TYPE SEQ DATA CRC
]
START_CHAR 和 LEN 字段帮助我确定数据何时结束,之后我查找 TYPE(常量偏移量 3)以确定接收到的数据,以便将其解压缩为消息 class。
现在我正在研究平面缓冲区,它看起来很完美,只是我无法将 TYPE 编码到消息中而不将其包含在实际消息中。这是我正在尝试做的事情:
namespace FlatMessage;
uint8 const TYPE = 50; // does not compile
table String {
value:string;
}
root_type String;
我可以创建一个枚举,但那很乱。谢谢!
[编辑] 我应该补充一点,我可以将协议更改为具有 END_CHAR
,但出于遗留原因,我需要支持 TYPE
字段。
实际上,我想我仍然需要该类型来弄清楚如何将其反序列化为平面缓冲区。
例如
uint8_t *buf = builder.GetBufferPointer(); // I can do this with END_CHAR because I could get the buffer.
auto receive_string = GetString(buf); // But I wouldn't know what the type is. e.g. this could be GetCoolString(buf).
您有几个选项可以使用 FlatBuffer 存储类型:
- 自己给缓冲区加上类型前缀。
- 使用 FlatBuffers 的
file_identifier
功能,可以识别 FlatBuffer 的类型。
- 使用联合类型将类型存储在 FlatBuffers 本身中。使根 table 具有单个联合字段。
我目前正在通过 UART 在我的 PC 和 ARM M4 微控制器之间发送数据。我定义了自己的协议,其中每条消息如下所示:
[START_CHAR LEN TYPE SEQ DATA CRC
]
START_CHAR 和 LEN 字段帮助我确定数据何时结束,之后我查找 TYPE(常量偏移量 3)以确定接收到的数据,以便将其解压缩为消息 class。
现在我正在研究平面缓冲区,它看起来很完美,只是我无法将 TYPE 编码到消息中而不将其包含在实际消息中。这是我正在尝试做的事情:
namespace FlatMessage;
uint8 const TYPE = 50; // does not compile
table String {
value:string;
}
root_type String;
我可以创建一个枚举,但那很乱。谢谢!
[编辑] 我应该补充一点,我可以将协议更改为具有 END_CHAR
,但出于遗留原因,我需要支持 TYPE
字段。
实际上,我想我仍然需要该类型来弄清楚如何将其反序列化为平面缓冲区。
例如
uint8_t *buf = builder.GetBufferPointer(); // I can do this with END_CHAR because I could get the buffer.
auto receive_string = GetString(buf); // But I wouldn't know what the type is. e.g. this could be GetCoolString(buf).
您有几个选项可以使用 FlatBuffer 存储类型:
- 自己给缓冲区加上类型前缀。
- 使用 FlatBuffers 的
file_identifier
功能,可以识别 FlatBuffer 的类型。 - 使用联合类型将类型存储在 FlatBuffers 本身中。使根 table 具有单个联合字段。