单片机数据拼包
对于数据包拼包方式常规方式有:
- 数组
- 指针
- 结构体
- 流
下文将此三种方式分别列举此数据包的实现。
然后对比优缺点。
本文举例数据包协议:
包头 | 长度Length | 消息类型 | 消息序列号Seq | 负载数据 | 校验 |
---|---|---|---|---|---|
2字节 | 1字节 | 1字节 | 1字节 | N字节 | 2字节 |
名称 | 描述 | 其他 |
---|---|---|
包头 | 固定 0X0A,0X0A | 对于以太网数据包可以不设立此段。串口一般需要使用,对解包有利,这里不赘述。 |
长度 Length | 数据包长度,(除去包头和自身) | |
消息类型 | - | 低7bit是消息类型,最高bit标记是否是回复消息 |
消息序列号Seq | 消息编号,用于回复消息与请求消息的匹配 | |
负载数据 | 消息类型对应的负载数据 | 负载数据长度 = Length - 4 |
校验 | 前面所有字节的校验值 |
代码中使用类型如下定义:
// https://github.com/NewLifeX/microCLib.git Core 目录 Type.h 内定义。
typedef char sbyte;
typedef unsigned char byte;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef long long int int64;
typedef unsigned long long int uint64;
基本定义:
/// <summary>消息类型</summary>
ty