【发布时间】:2016-04-26 21:02:41
【问题描述】:
我目前正在为 RF24Mesh 微控制器层编写一个抽象层来实现消息签名。
因为我想让它尽可能通用,所以我很乐意为 ex 传递任何结构/有效负载:(这只是一个应该能够传递给函数的结构的示例)
struct payload_sensor {
uint8_t some_other_sensor_data[32];
int sensor_id;
int sensor_data;
};
到签名函数,然后让它处理存储有效负载/结构,直到完成所有其他操作以发送它。
但事情是这样的,我无法预测传递给函数的结构的确切大小(它应该处理传递给它的任何结构),相同的结构可能会被重用(填充其他数据)并传递给再次使用该功能。我完全想不出一个好的解决方案。
现在如何实现一个适当的缓冲区来存储这些未知的有效负载/结构,直到它们准备好发送?我还必须记住,代码是在 AVR 上运行的,因此 AVR 内存(碎片)可能会成为一个问题。
我对结构和更高级的东西有点陌生,所以请不要介意我遗漏了一些明显的东西。
【问题讨论】:
-
如果它是未知的,那么为什么它需要是一个结构?传递一个
char*或void*和一个大小。 -
作为 TLV(类型、长度、值)发送。当双方同意
T的定义时,您甚至不需要长度。 -
传递一个带有 whatever 结构
memcpyed 的缓冲区。按照惯例,让第一个 struct byte/short/int 持有一个标签,告诉另一端即将出现什么类型。