[Kinetis] K60在Keil中使用结构体的一些问题(已解决)

[复制链接]
2154|2
 楼主| SummerFairy 发表于 2013-12-19 10:19 | 显示全部楼层 |阅读模式
本帖最后由 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位数据又会没掉了!哪位高人知道为什么吗?
ar_m_cu 发表于 2013-12-19 10:22 | 显示全部楼层
字节对齐的问题
ar_m_cu 发表于 2013-12-19 10:24 | 显示全部楼层
结构体按照其元素中占用字节数最大的元素进行地址对齐
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部