本帖最后由 FSL_TICS_A 于 2014-2-6 22:40 编辑
最近在使用K60串口收发数据包的时候发现了一个很奇怪的问题:
首先,串口的数据包结构如下:
struct serialPort {
UInt16 Header;
UInt8 Cmd;
UInt16 Data;
}
发送的时候自然也是很这个顺序发送,共5个字节!
接收的时候,如果将接收到的数据存放在一个 UInt8 变量,或者是一个 UInt8[] 数组中,能收到5个字节数据,传输没什么问题。但如果定义一个UInt8* 指针指向 struct serialPort 结构体的话达不到预期的效果,能收到5个字节数据,但在结构体中却只能看到4个字节,也就是 Header、Cmd 正常,但 Data 的低8位字节少了!
如果我们把结构体顺序改改:
struct serialPort {
UInt16 Header;
UInt16 Data;
UInt8 Cmd;
}
结果却完全正常!或者我们在插入一个数据:
struct serialPort {
UInt16 Header;
UInt8 Cmd;
UInt8 ID;
UInt16 Data;
}
发送的数据长度做相应更改,结果接收到的数据也全部正常!如果再插入一个字节:
struct serialPort {
UInt16 Header;
UInt8 Cmd;
UInt8 ID;
UInt8 ID2;
UInt16 Data;
}
发送的数据长度做相应更改,结果Data的低8位数据又会没掉了!哪位高人知道为什么吗? |