检查结构中的更改

Checking for changes in struct

本文关键字:结构 检查      更新时间:2023-10-16

我正在开发一个库(供我自己使用(,该库通过 i2c 无缝地在多个控制器之间同步结构。我的大部分工作正常,但我想检查是否对结构进行了更改,以便我可以在发生这种情况时开始同步。

为了能够通过串行(i2c(发送数据,我将其转换为char数组。

struct MyStruct {
int a = 123;
long b = 4567890;
String c = "abc";
};
MyStruct myData;
char bufferP[sizeof(myData)];
memcpy(bufferP, &myData, sizeof(myData));

另一方面,我这样做

memcpy(&myData, bufferP, sizeof(bufferP));

以使其返回到结构。效果很好!!

我尝试遍历bufferP以检查更改,以便我知道何时同步,但只有在值中的字符数不同时才会更改。

如果结构是这样的

struct MyStruct {
int a = 123;
long b = 4567890;
String c = "abc";
};

它将输出类似的东西

0 -> 123
1 -> 0
2 -> 82
3 -> 179
4 -> 69
5 -> 0
6 -> 143
7 -> 2
8 -> 3
9 -> 0
10 -> 3
11 -> 0

如果结构像这样

struct MyStruct {
int a = 123;
long b = 4567890;
String c = "def";
};

它将输出完全相同的东西。

有人可以告诉我为什么缓冲区P没有变化吗? 当我把它放回结构体时,变化就像它们应该的那样。

当我不知道结构的结构时,我如何检查结构是否发生了变化?

您有两个选择:

  1. 单独序列化字符串。这意味着:序列化没有字符串的结构,然后序列化字符串的长度,然后序列化字符串的内容。

  2. 将字符串替换为char[50]。 (或任何适合您的尺寸。