通信 在单片机开发过程中,难免要遇到与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机之间相互通信了。 通信 |
|