BLE 串口透传 float型数据
各位大神以及TI的大牛们:
我最近遇到一个问题,就是如何在串口透传的时候发送float 型数据,在调用GATT_WriteLongCharValue( simpleBLEConnHandle, &req, simpleBLETaskId );时,req.pValue 的类型是uint8,而且osal_msg_deallocate(req.pValue);这个函数的返回值也是uint8,所以感觉好像无法修改,不知道怎么办?有人遇到过这样的问题吗,帮忙指点一下。
建议你不要用串口去传Float类型的数据,实型变量占用的内存太大,而且float数据存储方式整型不同,传输中的转换和查询也很麻烦。
一般的方法是比如你的数据精确到小数点后两位,那么你先扩大100倍,变成整型,最好变成char,(如果大于char的范围,可以将int高低八位分别提取成char),程序设计也很简单,然后上传传整型数据,可靠方便。
Wenzhong: 你的方案很好,我会认真的考虑。但我有一点不是很明白,我的数据是传感器采集的数据,有的会超过char的存储范围有的不会超过,如果定义成char,那么在接收的时候怎么处理来合并成正确的int型数据呢?
可以用这样子来转换
float send;
union change
{
float d1;
unsigned char d2[4];
}r;
r.d1=send;
然后发送r.d2[0],r.d2[1],r.d2[2],r.d2[3] 四个char
收到后同样用共用体转换回来
zhuang:
您好,非常感谢你的帮助,我以前没有用过共同体,但感觉对我很有帮助。