讨论一下串口解析应该怎么设计比较合理?
https://forum.anfulai.cn/forum.p ... 5&fromuid=32469
(出处: 硬汉嵌入式论坛)

今天我遇到一个第三方的设备,它本身没有重传机制,所以我按照第一种方式进行解析。
有包头包尾checksum和字节长度。
我大概花了一天的时间去写解析函数,思考了一下貌似没办法适配所有情况。
协议如下
然后它没有做重传机制

它的上报数据如下:
[C] 纯文本查看 复制代码 //{0xA5, 0xFC, 0x02, 0x00, 0xA3, 0x9A, 0x0C, 0x00, 0xB1, 0xFA, 0x01, 0xFB, 0xA5, 0xFC, 0x07, 0x00, 0xA0, 0x91, 0x0D, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x69, 0x01, 0xFB}
在数据都正确的情况下,怎么解析都是没有问题的。我脑补了几种极端的情况,有没有办法解析?

情况1:
假设帧头发送了两次。这种情况下能否解析?
[C] 纯文本查看 复制代码 //{0xA5, 0xFC,0xA5, 0xFC, 0x02, 0x00, 0xA3, 0x9A, 0x0C, 0x00, 0xB1, 0xXX, 0xXX, 0xFB}
情况2:
假设断帧,能否解析?
[C] 纯文本查看 复制代码 //{0xA5, 0xFC,0xA5, 0xFC, 0x02, 0x00, 0xA3, 0x9A, 0x0C, 0x00, 0xB1, 0xXX, 0xXX}
情况3:
假设长度字节出错,能否解析?如何分辨是断帧还是长度字节出错?(例如这里长度字节变成了0X0102明显大大超出)
[C] 纯文本查看 复制代码 //{0xA5, 0xFC,0xA5, 0xFC, 0x02, 0x01, 0xA3, 0x9A, 0x0C, 0x00, 0xFB, 0xXX, 0xXX, 0xFB}
如果依靠包尾去判断情况2和情况3,那么如果数据段里面有字节和包尾一样,如何解析?
[C] 纯文本查看 复制代码 //{0xA5, 0xFC,0xA5, 0xFC, 0x02, 0x01, 0xA3, 0x9A, 0x0C, 0x00, 0xFB, 0xXX, 0xXX, 0xFB}

|