分享

C#程序与单片机通信时,如何实现结构体的字节对齐

 xpxys99 2019-08-17

C#程序与单片机通信时,如何实现结构体的字节对齐

通信

在单片机开发过程中,难免要遇到与PC通信的问题。这里有个不可回避的问题就是数据结构的定义,只有数据结构内存分布一致时,才能方便的通信,而不需要进行转换。在C语言里,定义一个数据结构并字节对齐非常简单。如下

__attribute__((packed)) struct Test{ u32 a; u8 b; u32 c; u8 arr[5];}struct Test t;此结构共14字节,并且可以直接使用。

如何在C#中实现一个同样的结构体呢?需要用到System.Runtime.InteropServices里的内存管理StructLayout和MarshalAs。并且数据要动态分布内存。

[StructLayout(LayoutKind.Sequential, Pack =1)]struct Test { public UInt32 a; public Byte b; public UInt32 c; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] Byte[] arr; }Test t;//在使用前要给数据分布内存t.arr = new Byte [5]; 使用t.

这两个和在内存中的分布完全一致,可以在单片机与PC机之间相互通信了。

C#程序与单片机通信时,如何实现结构体的字节对齐

通信

C#程序与单片机通信时,如何实现结构体的字节对齐

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多