STM32 标准库 将结构中6个不同的数据与之后更新的这六个数据进行对比,如果不同则有一个标志位并保存之前的数据
时间: 2024-03-01 07:53:20 浏览: 63
可以使用结构体和全局变量来实现对比和保存之前的数据。具体的做法是,在每次更新结构体中的数据时,先将原来的数据保存在另一个结构体中,然后再将新的数据更新到原结构体中。每次比较时,将原结构体和保存的结构体进行比较,如果不同,则设置标志位,并将保存的结构体的值复制到另一个结构体中。
以下是示例代码:
```c
#include <string.h>
// 定义结构体
typedef struct {
uint16_t data1;
uint16_t data2;
uint16_t data3;
uint16_t data4;
uint16_t data5;
uint16_t data6;
} MyStruct;
// 定义结构体变量和保存变量
MyStruct myStruct, savedStruct;
uint8_t flag = 0;
// 更新结构体数据
void updateStruct() {
// 保存原来的数据
memcpy(&savedStruct, &myStruct, sizeof(MyStruct));
// 更新数据
myStruct.data1 = 1;
myStruct.data2 = 2;
myStruct.data3 = 3;
myStruct.data4 = 4;
myStruct.data5 = 5;
myStruct.data6 = 6;
}
// 比较结构体
void compareStruct() {
if (memcmp(&myStruct, &savedStruct, sizeof(MyStruct)) != 0) {
// 如果不同,设置标志位,并将保存的结构体的值复制到另一个结构体中
flag = 1;
memcpy(&myStruct, &savedStruct, sizeof(MyStruct));
}
}
```
在上述示例中,`MyStruct`是一个包含6个`uint16_t`类型数据的结构体。`myStruct`是一个全局变量用于存储数据,`savedStruct`是用于保存之前数据的结构体变量,`flag`是标志位。
在`updateStruct()`函数中,先使用`memcpy()`将原始结构体数据保存在`savedStruct`中,然后将新的数据更新到`myStruct`中。
在`compareStruct()`函数中,使用`memcmp()`比较`myStruct`和`savedStruct`是否相同,如果不同,则设置标志位`flag`为1,并将保存的结构体的值复制到`myStruct`中。这样做是为了确保下一次更新数据时,`myStruct`中的值和保存的结构体中的值相同,从而保证数据的一致性。
阅读全文