串口發送浮點型數據及int(2個字節)long int(4個字節)的方法


方法一:

直接把float數據拆分為4個unsigned char(由於數字沒法拆分,所以只能用指針的),發過去,在合並為float。

其中有兩點要注意。

(1)大端存儲,小端存儲;如果搞錯讀取數據就不是你接收的數據地址(我主要使用了fpga,arm以及PC機,很有可能存儲方式不同,一般可能不需要考慮)

 (2)字對齊。不然就合並不成float(我先前沒注意直接一個很怪異的數據)

發送端

void package_frame(const void *data)  
{  
    int i;  
    for(i=0; i<4; i++)  
    {  
        send_frame[i] = ((uchar *)data)[i];  
    }  
}  

將float data數據拆分成uchar后存儲在數組send_frame[]發送。

接收端

float exchange_data(uchar *data)  
{  
  
    float float_data;  
    float_data = *((float*)data);  
    return float_data;  
}  

將uchar *data首地址付給float_data來合並成float型數據(記得字對齊和大小端存儲,不然數據不對)

 

其實發整數等大於1字節的數據也一樣。

方法二:

   讀取的adc數據寄存器的值不*3.3V(或5V)除以2的N次方,直接把這個數據發到上位機,在上位機程序里再*3.3V除以2的N次方。

這樣就避免了傳遞浮點數的麻煩。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM