当前位置:  开发笔记 > 编程语言 > 正文

起始位与起始字节

如何解决《起始位与起始字节》经验,为你挑选了1个好方法。

我知道在很多异步通信中,数据包从一个起始位开始.

但是起始位只是1或0.如何区分起始位和结束位与最后一个数据包?

防爆.如果我选择我的起始位为0而我的结束位为1.并且我收到0(数据流A)1 0(数据流B)1,有什么可以阻止我假设有一个包含数据流的数据流"(数据流A)1 0(数据流B)"的相同内容是什么?

有一个启动BYTE,然后检查数据流的位组合是不是更方便?这将减少开始/结束位之间混淆的可能性.



1> Adam Liss..:

好问题!大多数异步通信还指定了一个停止位,它是起始位的补码,确保每个新符号都以停止 - 开始转换开始.

示例:让我们传输ABCASCII 65,66和67 的字符:

A = 65 = 0x41 = 0100 0001
B = 66 = 0x42 = 0100 0010
C = 67 = 0x43 = 0100 0011

我们还假设(任意地)起始位是0和停止位1,并且数据从MSB发送到LSB.1当没有数据传输时,发送器将处于stop()状态.所以接收器可能会看到:

Data:   ....1111 0010000011 111 0010000101 0010000111 11111....
         (quiet) ^   A    $     ^    B   $ ^    C   $ (quiet)

对于ASCII图形道歉,数据由1通道空闲时的一系列stop()位组成.当发送器准备发送一个字符时,它发送一个start(0)位(标有^),后跟字符代码,并以stop(1)位(标有$)结束.它继续发送停止位,直到发送下一个字符,从另一个起始位开始.

我们使用起始而不是字节的原因是效率.上述方案需要10比特(1个开始 + 8个数据 + 1个停止)来发送8比特的数据,导致(10 -8)/ 8 = 1/4 = 25%的开销.如果我们使用开始和停止字节,我们需要为每个数据字节传输3个字节,这将是(3 - 1)/ 1 = 2 = 200%的开销.如果开始,数据和停止字节都是8位,那么我们必须为每个字符传输24位而不是10位,因此发送数据需要几乎两倍的时间!

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有