Taro如何实现页面之间通信_C#程序与单片机通信时,如何实现结构体的字节对齐...

06b947e133d1389db18e043862558cc2.gif

通信

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

1a46c1511f745c6495b22ee62b32228f.gif

通信

0d9568822f08627639c81f6c38b645e0.png

想进一步了解此话题,请继续阅读以下文章:

C#程序与单片机通信时,如何实现结构体转换为字节流

C#程序与单片机通信时,如何自动初始化串口(1)?

C#程序与单片机通信时,如何自动初始化串口(2)?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值