最近接触到一个文档,其中串口通信的通信协议中用0x040x06转义0x02,
我一直不理解这样的动机是什么。因为以前见过的都是类似0x100x02来转义0x02
刚才突然想通了。果然很妙。
后者不科学,因为切分数据帧要用状态机不但程序复杂而且占用计算力,
同时还增加了通信干扰扩散的概率,干扰的收敛更慢。所以前者的设计是十分高明。
使用前者可以有以下好处:如果在数据中看到0x02可以直接判断数据帧不必考虑转义的可能性。这样程序明显简化处理速度也能提升。
另外,干扰是随机发生的,如果对于0x100x02来说,就有2个字节准备接受干扰,如果是0x10被破坏,还可以造成误切数据帧的效果,造成损失扩大化。
所以综合看来,前者的设计非常科学的。