OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2526|回复: 2

这样的通讯协议应该怎样写?描述通讯协议的一般方法是?

[复制链接]

16

主题

28

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-7-13
在线时间
16 小时
发表于 2017-1-22 13:00:04 | 显示全部楼层 |阅读模式
25金钱
目前正在操作某模块
该某块用串口方式操作
命令格式如下
1.同步头 三个字节 固定
2.命令 一个字节
3.执行部件号码 一个字节
4.命令参数 不同的命令,参数个数不同,最多八个字节
5.校验码 是命令字节数,执行部件号码和命令参数字节数的和的异或值,一个字节

我想把这个通讯协议和发送命令的代码封装到一个C程序头文件和源文件里,该用怎么样的方式写才能达到
1.方便修改具体命令对应的值
2.方便主程序发送命令和数据
的目的?


本来我想采用结构体来统一表述之前提到的命令格式,代码如下:
typedef struct
{
Uchar SynHeader;
Uchar Cmd;
Uchar Num;
Uchar Data[8];
Uchar CheckCode;
} MoudleCmd;
#define SYN "\x01\X01\01"
//定义同步头

但是,针对不同的长度的参数表,成员DATA如何处理?针对不同的命令,CheckCode如何处理?
有没有办法在声明命令变量之前,就把同步头放在命令里?


此外,描述通讯协议,或者说描述数据结构并可以发送接收的一般方法是?

如果描述起来不方便,希望各位可以给出一些参考资料。



最佳答案

查看完整内容[请看2#楼]

不固定長度的部分給你兩個建議解 1.設定結尾字元 2.宣告資料長度 另外純粹用結構來接收發送必須內容長度不變才可以 像是TCPIP每包都固定長
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

239

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2015-6-5
在线时间
110 小时
发表于 2017-1-22 13:00:05 | 显示全部楼层
不固定長度的部分給你兩個建議解
1.設定結尾字元
2.宣告資料長度

另外純粹用結構來接收發送必須內容長度不變才可以
像是TCPIP每包都固定長
回复

使用道具 举报

5

主题

184

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1050
金钱
1050
注册时间
2016-5-13
在线时间
111 小时
发表于 2017-1-23 13:39:05 | 显示全部楼层
我觉得结构体方案挺好的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-1 02:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表