通信
在單片機開發過程中,難免要遇到與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#程序與單片機通信時,如何自動初始化串口(1)?
C#程序與單片機通信時,如何自動初始化串口(2)?
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!