示例成品 · 平台演示,按左边这组点选真跑出来的
示例:
协议:某模组串口通信协议(示意)
报文:0x03 数据上报(示意)
代码:packet_decode.c 结构体 DataReport(示意)
字段对照表(列名 | 列名)
序号 | 协议字段 | 协议顺序 | 代码字段 | 代码顺序 | 协议长度 | 代码长度 | 协议字节序 | 代码字节序 | 类型 | 是否一致 | 说明
1 | 帧头 | 1 | head | 1 | 2 | 2 | 大端 | 大端 | uint16 | 一致 | —
2 | 设备号 | 2 | dev_id | 2 | 6 | 6 | 大端 | 大端 | uint8[6] | 一致 | —
3 | 指令码 | 3 | cmd | 4 | 1 | 1 | 大端 | 大端 | uint8 | 不一致 | 代码顺序排在第4,文档为第3,与状态字对调
4 | 状态字 | 4 | status | 3 | 1 | 1 | 大端 | 小端 | uint8 | 不一致 | 顺序对调;代码按小端解析,文档要求大端
5 | 数据长度 | 5 | data_len | 5 | 2 | 2 | 大端 | 大端 | uint16 | 一致 | —
6 | 采样值 | 6 | sample | 6 | 4 | 4 | 大端 | 大端 | float32 | 一致 | —
7 | 校验和 | 7 | checksum | 7 | 2 | 4 | 大端 | 大端 | uint16/uint32 | 不一致 | 代码长度4字节,文档2字节
统计:字段总数 7,不一致字段 3(指令码、状态字、校验和)
不一致明细
1)指令码与状态字顺序对调:代码中 status 在前、cmd 在后,与文档顺序相反。
2)状态字字节序:文档大端,代码按小端读取,需确认硬件实际发送顺序。
3)校验和长度:代码按 4 字节读取,文档定义 2 字节,后续字段可能整体错位。
处理建议
1)按文档调整结构体字段顺序,或与硬件方确认后同步改文档。
2)状态字统一字节序,在解码入口处写明转换。
3)校验和长度与硬件方确认后修正,并补一条编解码单测。
结论由持证人员核对后才能用。
点左边「开工 · 直接出成品」,出一份你自己的版本(文字免费)