gpt4 book ai didi

将序列化结构从 8 位系统复制到 32 位系统

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:36 25 4
gpt4 key购买 nike

我有一 block 板子,它有一个 32 位 ARM CPU 作为主处理器,一个 8 位 AVR 微 Controller 作为连接到它的从属设备。

我正在复制一个结构(从设备将其转换为字节流,主设备接收并将其存储在具有相同定义的结构的内存位置)。

master 和 slave 都在自己的控制台上打印结构成员的值。但是,这些值不匹配。

我已经确定问题的发生是因为 master 中结构的实际内存分配发生了一点变化以与 16 位边界对齐。即小于 16 位的数据类型升级为 16 位。

结构中有一些 8 位整数 (u8),实际上在 Master 的内存中分配了 2 个字节,而在 slave 中,它们仅按预期分配了 1 个字节。

不出所料,sizeof(STRUCT_NAME) 在每个系统中产生不同的结果。

我已经找到了解决这个问题的方法,方法是在必要时在传入数据中插入填充字节。

在这种情况下,是否有任何标准方法来处理结构序列化?

我在 ARM 部分使用 GCC。

最佳答案

struct _str
{
...
} __attribute__((packed, aligned(1))) struct_name;

对齐到 1 个字节。

关于将序列化结构从 8 位系统复制到 32 位系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41006096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com