一种比较精简的协议

链接地址为:ctLink: 一个比较精简的支持C/C++的嵌入式通信的中间协议。

本文采用的协议格式如下

*帧头 uint8_t 起始字节:0XAF\

*协议版本 uint8_t 使用的协议版本号:当前为0X01\

*负载长度 uint8_t 数据段内容长度\

*指令 uint8_t 指令编号\

*头校验 uint8_t 协议版本+负载长度+指令的和校验\

*发送者 uint8_t 协议发送者\

*接收者 uint8_t 协议接收者\

**数据负载 uint8_tXn 负载内容\

*CRC校验 uint32_t 数据负载段的CRC校验值\

##使用方法

可以使用C/C++语言进行开发

cmake使用add_subdirectory方法加target_link_libraries引入到自己的项目中即可

本协议自行编写之后未对协议本身做特别的规定,使用者可以在获取源码之后可以自行对协议进行改进,只需要进行协议上进行结构对齐就可以使用打包和解包函数进行换算。

使用说明:

​ *本代码支持C和C++语言,只需要引入到自己的平台即可。

​ *假设自身有新的命令需求可以在命令行里面加入自己的命令,需要符合规范依次向下添加0x05,0x06。。。。。。

```

typedef enum{

CMDLF=0x01,

CMDRG=0x02,

CMDFT=0x03,

CMDBA=0x04,

}CMD_t;

```

*使用该协议的时候需要对data进行补充,符合协议的情况下都可以使用下列的函数进行封包

uint16_t packet_data(

uint8_t* buffer,

const void *head,

const uint8_t *data,

uint8_t data_len)

*同理符合协议的情况下都可以使用以下代码进行解包获取协议的发送者、接收者、CMD命令、以及接收到的实际数据

uint16_t Unpack_data(

uint8_t* parse_data,

const uint8_t* received_data,

uint16_t data_len,

const void *head)

​ *本协议是支持局域网内通信的,只需要明确发送者和接收者双方就能知道通信双方是谁

​ *最后也是最重要一点---》本协议后期空闲了会继续更新目前更新方向为增加回调函数的机制并给出心跳接口自动进行通信解析

已经在Linux和ESP32进行验证,Linux下验证串口发送和接收,ESP32下验证UDP发送

最新加入OneMessage,举出示例发布-》订阅例子,实现发布消息-》解析消息。使用udp进行通信,使用发布订阅机制,使得异步通信变得容易。

目前实现了对oneMessage进行封装,可以直接进行仅需两个函数即可进行发布订阅实现异步通信。

使用方法为:add_subdirectory(CT_Message) 进行引入,然后使用ct_message_init进行初始化,ct_message_pub进行发布,ct_getmessage进行订阅。

ct_message_init参数为CT_PUB_HEAD_T的结构体,void *Type,如果Type为NULL则为发布者,如果Type不为NULL则为订阅者。只使用一个同一个函数完成初始化避免无效做功。

ct_message_pub参数为CT_MESSAGE_TYPE_T的结构体,void* buff, uint16_t len,发布消息,buff为发布的数据,len为数据长度。

ct_getmessage参数为CT_MESSAGE_TYPE_T的结构体,void* buff,订阅消息,buff为订阅的数据。

详细例子可以参考udp_pub.c和udp_sub.c,感谢OneMessage的作者提供的开源文件。

希望各位大佬给出修改意见帮助我更好修改协议。

相关推荐
qinyia10 分钟前
Wisdom SSH:自动化网络配置管理的领航者
网络·自动化·ssh
钮钴禄·爱因斯晨1 小时前
数据结构 | 树的秘密
c语言·开发语言·数据结构
chian-ocean1 小时前
C++ 网络编程入门:TCP 协议下的简易计算器项目
网络·c++·tcp/ip
码小文2 小时前
Altium Designer 22使用笔记(4)---添加封装、ERC检查、PDF文档与BOM生成
笔记·嵌入式硬件·硬件工程·学习方法·硬件经验
贝锐2 小时前
Docker本地部署青龙面板,如何用内网穿透工具实现远程访问?
网络·docker
猫猫的小茶馆2 小时前
【STM32】HAL库中的实现(四):RTC (实时时钟)
stm32·单片机·嵌入式硬件·mcu·51单片机·实时音视频·pcb工艺
努力做小白2 小时前
Linux驱动25 --- RkMedia音频API使用&&增加 USB 音视频设备
linux·驱动开发·单片机·嵌入式硬件·音视频
_smart_boy__3 小时前
基于铁头山羊STM32的平衡车电机转速开环闭环matlab仿真
stm32·嵌入式硬件·matlab
文火冰糖的硅基工坊3 小时前
[硬件电路-140]:模拟电路 - 信号处理电路 - 锁定放大器概述、工作原理、常见芯片、管脚定义
嵌入式硬件·架构·信号处理·电路·跨学科融合
机器视觉知识推荐、就业指导3 小时前
STM32 外设驱动模块一:LED 模块
stm32·单片机·嵌入式硬件