嵌入式开发嵌入式软件

上下位机浮点数的传输方法

2018-02-20  本文已影响5人  华杰研习社

       嵌入式产品开发经常会用到串口等接口进行上位机和下位机之间的数据传输,那上位机和下位机是如何通过串口进行浮点数传输的呢?我们知道串口有ASCII码(即可见字符形式)和二进制数据格式两种传输方式,是以字节为单位进行数据传输的,这就需要先将浮点数(四个字节)转换为一个一个的字节数再利用串口传输。现将其转换方法总结如下: 

    1、联合体的方式实现

    union { uint8_t a[4];float b; } c

    其中a[0]是b的最高字节。只需将待传输的浮点数直接赋值为b,利用串口传输时利用a[4]数组进行传输即可。

    2、扩大移位的方式实现

    比如需要通过串口将80.35这个浮点数进行传输,首先先将其扩大1000倍(其目的是为了保留数据的准确性)后赋值给a,a = 80350(其十六进制为0X0139DE)。然后:(a>>24)&(0X0011) = 00(最高位字节);(a>>16)&(0X0011) = 01(次高位字节);(a>>8)&(0X0011) = 39;a&(0X0011) = DE(最低位字节);最后将其值分别赋值给一个数组,利用串口传输出去。

    3、整数求余的方式实现

    比如a = 54321,a%10 = 1;a/10%10 = 2;a/100%10 = 3;a/1000%10 = 4;a/10000 = 5;然后将其值赋值给一个数组,利用串口发送出去。

    4、指针的方式实现

    float a,unsigned char *b;a = 803.50;char *pchar = (char*)&a;for(i = 0; i < sizeof(float);i++){*b = *pchar;pchar++;b++;},然后只需通过串口将b指针指向的内容传输出去即可。

    以上四种方法建议使用联合体和指针的方法,因为其他两种方法牵涉到浮点数小数点后保留几位小数的问题,这和放大倍数有关,数据接收方还需要进行数据重新组合和处理比较麻烦。

上一篇下一篇

猜你喜欢

热点阅读