Arduino自定义通信协议解析

本文探讨了如何设计和解析Arduino的自定义通信协议。内容包括协议格式的详细说明,重点在于控制指令的设计,适用于通过串口进行通信的项目。
摘要由CSDN通过智能技术生成

上一篇文章给出了通信协议的设计。通信协议的格式如下:

协议首部

指令长度

控制指令

校验和

“控制指令”设计成如下格式:

设备类型

设备号

端口号


比如说上位机发送如下的格式的数据:AA0305020106,意思就是协议的首部为AA,指令长度为03,控制指令为050201:实际意义就是设备类型为05,设备号为02,端口为01,这三个数据的校验和为06.现在需要写一个类库,称为ProtocolParser,来解析上述格式的数据。思路也很简单,就是将串口发送的数据存起来,再解析该数据各个字段的含义即可。类库采用C++写的,面向对象的风格。
ProtocolParser.h的源码如下:
#ifndef PROTOCOLPARSER_H
#define PROTOCOLPARSER_H
/*
自定义的库函数

协议解析器 V1.0
解析的数据格式:
	协议首部-指令长度-控制指令-校验和
"控制指令"格式:
	设备类型-设备号-端口号

*/
#include<stdlib.h>
#include<string.h>
//#include <string>
//#pragma warning(disable:4996)
#define BUFFER_SIZE 128//假定接收数据的最大长度为128
class ProtocolParser
{
public:
	ProtocolParser(char *header);
	~ProtocolParser();
	void Append(char *data);
	void AppendChar(char ch);//将从串口接收到的字符存到buffer

	size_t GetDeviceType();//获取设备类型
	size_t GetDeviceNumber();//获取设备号
	size_t GetPort();//获取设备所连接的端口号

private:
	bool m_bInCmd;//标志位,标识一条控制指令是否接收完毕
	char *m_pHeader;//协议首部
	size_t m_nCmdLength;//指令长度
	char *m_pCtrlCmd;//控制指令
	size_t m_nCheckSum;//校验和
	char buffer[BUFFER_SIZE];//接收的数据暂时存在buffer中
	size_t m_nRecvDataIndex;//记录接收数据的索引

	char GetHeader(size_t index);//获取协议首部指定索引的字符
	size_t GetCmdLength();//获取控制指令长度
	size_t GetRecvDataLength();//获取接收到的一条控制指令的长度
	size_t GetCheckSum();//获取实际接收到的校验和
};

//构造函数初始化,header为协议首部
Proto
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值