编码 | 二进制格式设计方案

二进制命令定长和不定长区分

不定长格式

以Ublox模块的UBX协议为例,如下图:
avatar

该协议的优点

  • 紧凑-使用8位二进制数据;
  • 受保护的校验和-使用开销较低的校验和算法;
  • 模块化-使用两阶段消息标识符(类和消息ID);
  • 支持自定义字段扩展。

如上图 Payload 规定:

  • 无特殊说明的情况下,一律按小端模式进行存储;
  • 针对2字节长度的字段,必须从偏移地址为2的倍数的地方开始存储,至于4个字节长度的字段,必须从偏移地址为4的倍数的地方开始存储
  • 保留字段中,作为输出语句,保留字段可以不关心,但是保留字段作为输入语句,保留字段必须进行清零操作
  • 单双精度浮点数按照IEEE754标准进行存储。

校验(如上图):

CK_A = 0, CK_B = 0
For(I=0;I<N;I++)
{
    CK_A = CK_A + Buffer[I]
    CK_B = CK_B + CK_A
}

定长格式

以下格式为一个参考设计demo
avatar
该协议长度固定,有固定的协议头,每个数据字段的相对位置是固定的。
协议格式优点:

  • 协议长度及字段位置为固定的,方便用户解析
  • 协议头确定,根据协议头进行区分,更加直观

协议格式缺点:

  • 非常不利于字段的扩展。
posted @ 2020-12-09 19:12  CristL  阅读(334)  评论(0编辑  收藏  举报