| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1400 人关注过本帖
标题:这样的通讯协议应该怎样写?描述通讯协议的一般方法是?
只看楼主 加入收藏
yyf8421bcd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-1-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
这样的通讯协议应该怎样写?描述通讯协议的一般方法是?
目前正在操作某模块
该某块用串口方式操作
命令格式如下
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如何处理?
有没有办法在声明命令变量之前,就把同步头放在命令里?


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

如果描述起来不方便,希望各位可以给出一些参考资料。
搜索更多相关主题的帖子: 结构体 源文件 主程序 
2017-01-22 20:09
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:5 
具体说说各成员的数据表现形式
2017-01-22 20:41
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54061
注 册:2011-1-18
收藏
得分:15 
程序代码:
_Bool xxx_send( uchar cmd, uchar num, const uchar data[] )
{
    uchar buf[14] = { 0x01, 0x01, 0x01, cmd, num };

    size_t data_len = 0;
    switch( cmd )
    {
    case ?: data_len=?; break;
    case ?: data_len=?; break;
    case ?: data_len=?; break;
    ……
    }

    memcpy( buf+5, data, data_len );

    buf[5+data_len] = 校验和

    return 发送buf前6+data_len个字节
}

顺便说一下,“5.校验码 是命令字节数,执行部件号码和命令参数字节数的和的异或值”听都听不懂
2017-01-23 08:41
快速回复:这样的通讯协议应该怎样写?描述通讯协议的一般方法是?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020984 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved