方法一:
直接把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次方。
這樣就避免了傳遞浮點數的麻煩。