打印
[Kinetis]

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

[复制链接]
1869|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

粉丝