TI中文支持网
TI专业的中文技术问题搜集分享网站

求教

请问28335中如何将数组强转为结构体,因为28335上不支持字节对齐,直接强转的话会出错

Tony Liu4:

回复 Susan Yang:

我想求教一下,如果我需要在28335上,进行数组强转为结构体这种操作时被允许的吗?

Susan Yang:

回复 Tony Liu4:

请问能给出具体代码吗?我有点不理解您的意思

Tony Liu4:

回复 Susan Yang:

假设有这样的一个结构体

typedef struct FRAME

{

unsigned long int head;

unsigned int len;

unsigned int data;

unsigned long int tail

}FRAME;

下面是我的一个缓冲区数组,并数据如下,

unsigned char buf[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0x0a, 0x0b, 0x0c};

我希望将这个数值对应到结构体中,使得

head = 0x04030201,len = 0x0605,data = 0x0807, tail – 0x0c0b0a09

我在STM32上可以将结构体一字节对齐后强转操作如下

FRAME *pframe = (FRAME  *)buf;

我在28335这么操作后,发现结构体中的数据并不如我所愿,我应该如何操作呢

Susan Yang:

回复 Tony Liu4:

Tony Liu4

下面是我的一个缓冲区数组,并数据如下,

unsigned char buf[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0x0a, 0x0b, 0x0c};

我希望将这个数值对应到结构体中,使得

head = 0x04030201,len = 0x0605,data = 0x0807, tail – 0x0c0b0a09

假设char 类型为8位宽。在C28x CPU上不是这种情况。C28x上最小的类型是16位。因此,最多可以打包成32位长的 是2个16位字。您可以接受此限制吗?

如果您对此限制不满意 ,则需要考虑使用__byte内在函数。请在C28x编译器手册中搜索__byte 。

Tony Liu4:

回复 Susan Yang:

使用此内在函数之后,按照我所描述的转为结构体之后,还会出错吗

Susan Yang:

回复 Tony Liu4:

您可以测试一下,理论上应该可以

赞(0)
未经允许不得转载:TI中文支持网 » 求教
分享到: 更多 (0)