丁丁

双机通信中无损的传递DOUBLE类型数据

0
阅读(3864)

我们都会遇到双机通信的问题,这不我就遇到了一个在双机通信中传递一个double类型的数据的问题。

 

初步的打算是看看数据有多大,拆分成几位传过去,免不了要损失精度。这可如何是好?

苦思了好几天,后来看到了double类型的存储特点,这下就完全可以很简单的传输了。DOUBLE在内存中是以4个字节的方式储存的,B机器设定一个DOUBLE类型的数据,固定地址addr,如果把A机器的DOUBLE4个字节的地址搬到B机器ADDR的地址中,这样是不是A机器的DOUBLE类型已经传递到了B机器?是不是很巧妙?

且看源码:

A机

void Uart_send_double(double current)
{
 unsigned char * d ; 
 char i;

 d= (unsigned char *)&current;
 
 for(i=3;i>=0;i--)
 {
  UARTPutc(d[i]); 
 } 
}

B机器就更简单了,接收到数据后

 d= (unsigned char *)&current;
    d[0]=Uart_list[2];
    d[1]=Uart_list[3];
    d[2]=Uart_list[4];
    d[3]=Uart_list[5];

现在在去读取current的值,哈哈 current已经和A机的一样了,当然,current 的声明应当声明为 volatile的

volatile double current;