我很抱歉不能为这个问题提供代码,但这更符合逻辑的情况。我的AX.25协议的终止序列是"111111“,即6个1。因此,如果在我的数据包中发现这个1序列,它将表示数据包文件的末尾,并在不正确发送数据包的其余部分的情况下发送它。我会尽我所能解释我的结论和测试结果,以便您能理解我的困境。
字节1包含8位。看看下面,尝试在一个矩形框中描绘一个字节。紧挨着它的是字节2,也包含8位。情景1:
||_1__1_1_1__1__ ||_1_1_1_1_1_1___||
尝试的解决方案1:您可以简单地将1更改为0并跟踪它。
情景2:
||_1__1_1_1__1_1_ ||_1_1_1_1___1__||
尝试的解决方案2:尝试的解决方案1失败了。我被困在这里了。
单独激活AX.25终止序列时,字节是安全的,但组合字节会导致问题。
以下是可能的情况列表:
1)六个1=为数据包末尾激活的终止序列
2)包的实际数据内六个1=提前终止
3)如果将1更改为0,则6个0的序列在恢复更改时可能会出现问题
4)由于内存限制,一次只能读取一个字节(EEPROM)
5)如果两个字节之间出现6个1,也会提前激活终止序列。
提前感谢您的任何帮助。
发布于 2015-04-07 08:33:37
ax.25协议要求的解决方案是位填充。
从概念上讲,只要接收器看到5个连续的1比特和一个0比特,它就会假定该0比特已被发送器填充(以分解数据中的错误帧序列),并在发送接收到的数据之前将其删除。可以未填充发送的6个1比特的唯一序列是成帧序列;所有数据都将被填充发送。接收器必须始终去杂物。
填充或解填充通常需要几个字节的工作ram (或几个字节的寄存器),尽管可能有一些创造性的方法。
引用官方的TAPR协议标准:
为了确保上述标志位序列不会意外地出现在帧中的其他任何位置,发送站监视一组五个或更多连续的“1”位的位序列。任何时候发送五个连续的“1”位,发送站在第五个“1”位之后插入一个“0”位。在帧接收期间,任何时候接收到五个连续的“1”位,紧跟在五个“1”位之后的一个“0”位就会被丢弃。
在谷歌上搜索AX.25位填充应该会返回您可能需要的所有详细信息。
https://stackoverflow.com/questions/29087265
复制相似问题