请问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:
您可以测试一下,理论上应该可以