背景:
在调试UDP程序时,Linux本机和ZYNQ开发板进行UDP通信,数据结构定义相同,都按照结构体大小收发数据,但是Linux端结构体大于实际结构体,导致ZYNQ端接收的数据错位。
问题分析
结构体定义如下,实际大小为262字节:
Linux端代码片段:
ZYNQ端代码片段:
Linux端实际发送字节及结构体大小:
ZYNQ端接收字节:
ZYNQ接收端结构长度与Linux端不一致,且接收的数据不符合预期。经分析,是Linux端GCC优化字节对齐。
解决办法:取消Linux端字节对齐
方法1:在代码中添加‘#pragma pack(1)’
运行结果如下,符合预期:
方法2:GCC编译时添加‘-fpack-struct’编译选项
注意:此时代码中不需要添加‘#pragma pack(1)’