1、由于项目中定义了一个结构体如下:
typedef struct
{
uint16_t number;
uint16_t LocationData;
uint16_t PersonData;
// _calendar_obj calendar;
// uint16_t LiuLiang_Value;
float LiuLiang_Value;
_calendar_obj calendar_records;
} Frame;
现需要将其中的float LiuLiang_Value;值从结构体存储的空间中提取出来,使用串口将该数据分字节传递出去,可以使用如下方法:
2、先定义结构体变量
Frame CeLiang_data;//定义测量结构体变量
Frame *p;
然后初始化:
p=&CeLiang_data;//初始化结构体指针,将结构体初值地址给指针变量p
再讲结构体指针做一个转化
//提取测量结构体中的浮点数测量值到liuliang_buff[4]
unsigned char *pdata1=(unsigned char *)p;//定义一个字符类型指针,将测量结构体的指针地址给pdata
unsigned char *pdata2=pdata1+8;//偏移地址要加8,不能加6,因为结构体前面的三个数为2字节的uint16_t,占用空间时应该是为了对齐,占用了8个字节,所以加8开始存储的float流量值
for(uint8_t i=0;i<4;i++)
{
liuliang_buff[i]=*pdata2++;
}
3、这样,就可以使用pdata2指针按字节地址访问结构体中的成员数据,这里通过提取,将float LiuLiang_Value数据存放在了liuliang_buff[i]中。
4、然后,可以发送串口屏指令,将浮点数据显示在串口屏上
SetTxData3_toLCD(0x13,0x00,liuliang_buff[0],liuliang_buff[1],liuliang_buff[2],liuliang_buff[3]);//将流量值传给串口屏显示
UserUart1Send( tempbuff3,sizeof(tempbuff3));
5、需要注意的是,直接将float LiuLiang_Value值给串口屏是无法实现的。同时,参照迪文屏的使用手册指南,可以找到单精度浮点数的传递方法:
可以看到,单精度浮点数占据4个字节长度。
6、最后,还需要在迪文屏的制作文件中设置数据类型,如下: