本帖最后由 过招铁是傻 于 2017-2-10 21:09 编辑
我目前只做了float类型数据的支持,过两天完善了int8,int16,int32的支持后会有修改,目前的协议是这样的:
一帧数据由7个字节构成:
byte[0]: 'C'
byte[1]: 'H'
byte[2]: 通道数(0~15)
byte[3]: float[0]
byte[4]: float[1]
byte[5]: float[2]
byte[6]: float[3]
float类型使用union来转换成字节,不要用指针,否则可能有大小端问题。这是一个示例函数:
void SerialPort::output(char ch, float val) { union { float f; unsigned int i; } value; unsigned char buf[7]; value.f = val; buf[0] = 'C'; buf[1] = 'H'; buf[2] = ch; buf[3] = (value.i >> 24) & 0xFF; buf[4] = (value.i >> 16) & 0xFF; buf[5] = (value.i >> 8) & 0xFF; buf[6] = (value.i) & 0xFF; serialPort.write((const char *)buf, 7); }
|