IIC以字节的形式传输数据,那么如果使用的数据类型是浮点型的,怎么确保主机和从机之间完整的浮点数数据传输呢?
联合体可以是在同一存储空间中存储不同的数据类型,使用联合体就可以完成IIC浮点数的传输
首先定义联合体和char类型的数组,然后将浮点数存到字符型数组中,然后将数据传递给联合体数组,在联合体数组中就可以拿到想要的浮点型数据了。
memcpy:内存复制函数,以字节为长度
附上简单的传输测试代码:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
union {
float floatVal[4];
long longVal[4];
char charVal[4];
}val;
int main() {
// numberval.long_val=7;
char i2c_buffer[32]={0};
float speed0_p = 7.77;
float speed1_p = 6.66;
float speed2_p = 5.55;
int x;
memcpy(&i2c_buffer[0],&speed0_p, 4);
memcpy(&i2c_buffer[4],&speed1_p, 4);
memcpy(&i2c_buffer[8],&speed2_p, 4);
memcpy(&val, i2c_buffer, 16);
printf("%.2f",val.floatVal[0]);
printf("%.2f",val.floatVal[1]);
printf("%.2f",val.floatVal[2]);
}