串口突发接入应用层SLIP协议报文同步纠错方法与流程

文档序号:17600293发布日期:2019-05-07 20:11阅读:689来源:国知局
串口突发接入应用层SLIP协议报文同步纠错方法与流程

本发明涉及嵌入式领域,具体来说涉及串口突发接入应用层slip协议报文同步纠错方法。



背景技术:

嵌入式领域中,串口通信是一种非常常见、使用广泛的信息传输通信接口。串口又称为串行接口,按电气标准及协议来分,包括:rs-232、rs-422、rs485。rs-232、rs-422与rs-485标准只对接口的电气特性做出规定,不涉及接外挂程式、电缆或协议。其传输是按照每单个字节8bit进行传输。当系统的某一设备运行后,需要通过上述三种标准中一种串口标准不断往外发送串口数据,比如:短波电台中的接收信号电平值、扫描频率值等需要不断发给电脑终端。接收方的串口突发接入,其收到的第一个字节以较大概率出现不是约定报文协议格式的第一个字节,导致其报文的同步出现错误,是一种虚假伪同步。因此,串口应用层的接入成功具有随机性,并且这种接入成功率非常低,存在着突发接入的时机问题。其出现虚假同步错误,像“多米诺骨牌效应”一样不断积累下去,并且无法跳出这种累加的错误,导致应用层永久性无法识别报文语义。只有当设备使用时,必须严格按照某种顺序进行设备开启,才能避免上述情况发生,实现正常有效通信,从而带来好的使用体验。



技术实现要素:

针对相关技术中的问题,本发明提出串口突发接入应用层slip协议报文同步纠错方法,解决现有slip协议报文虚假的同步,导致应用层永久性无法识别报文语义,最终无法进行正常有效的通信的问题。

为了实现上述技术目的,本发明的技术方案是这样的:

串口突发接入应用层slip协议报文同步纠错方法,具体包括以下步骤:

步骤1:串口突发接入设备,并依据slip协议报文的结构特点与格式特征,进行接收字节初始同步捕获;

步骤2:从捕获到的第一个字节开始进行匹配分析,若不是协议的开始或者结束标识则直接丢弃,一旦捕获同步信息后,则对同步信息的真实性进行进一步的甄别;

步骤3:甄别后得到的第一个正确同步,判定当前报文同步成功,串口应用层正常报文。

进一步的,步骤1中串口突发接入设备及捕获字节的具体步骤为:

s0:定义完整slip协议报文标识pflag,在初始化时置为0;

s1:定义存储协议报文内容临时缓存,大小为n的数组data一维变量,数组data的大小满足单条slip规定报文字节数出现最大长度,进行串口的初始化,等待设备串口突发接入;

s2:串口中断函数开始捕获字节,当串口中断收到字节则进行匹配分析,否则继续等待串口接收中断。

进一步的,s1中数组data的大小满足单条slip规定报文字节数出现最大长度,含转义后最大长度。

进一步的,步骤2中的字节匹配分析的具体步骤为:

s3:对收到的串口字节进行内容匹配检测是否为0xc0,如果是0xc0则执行s4,否则执行s11;

s4:如果当前字节内容是0xc0,且pflag等于0,则执行s5;如果当前字节内容是0xc0,且pflag等于1,则执行s6;

s5:将标识pflag置为1(即当前为一个新的slip协议报文),放在data数组的第一个存储位置,再执行s2;

s6:将标识pflag置为2(即已捕获完一个完整协议报文同步),放在data数组的m+2位置,将标识pflag置为0,再执行s7;

s7:判断标识pflag是否等于2,如果等于2则进行下一步的甄别,否则执行s2。

进一步的,步骤3中甄别判定的具体步骤为:

s8:进行真伪同步鉴定,判断data的收到数据长度是否大于2;如果大于2则执行s9,否则执行s10;

s9:判定当前报文正确同步,串口应用层已接收到一个完整正确的slip协议报文;

s10:判定当前报文为伪同步,当前报文属于slip协议伪报文,将标识pflag置为1,将data数组中第二个位置的0xc0去掉,执行s2,后续接收到的串口数据从data的第二个位置开始存储;

s11:判断标识pflag置是否为1,如果不等于1则执行s12,否则执行s13;

s12:直接丢弃当前字节内容,不保存到缓存data数组中,执行s2;

s13:将收到的字节内容放在data数组缓存的m+1位置,执行s2。

进一步的,s10中判定当前报文为伪同步的标准是:slip协议报文特点是由十六进制0xc0、0xc0组成,大小为2字节。

进一步的,data数组中的m大小取决于pflag等于1之后收到非0xc0字节的数量。

本发明的有益效果:任意基于slip协议的串口通信设备可以随时、任意时刻接入,该方法解决了slip协议的伪同步问题,为应用层识别报文语义提供纠错保障,提高了需要使用slip协议进行串口通信的产品用户体验。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是根据本发明实施例所述串口突发接入应用层slip协议报文同步纠错方法的流程图;

图2是根据本发明实施例所述标准slip协议报文格式特征示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。

串口突发接入应用层slip协议报文同步纠错方法,具体包括以下步骤:

步骤1:串口突发接入设备,并依据slip协议报文的结构特点与格式特征,进行接收字节初始同步捕获;

步骤2:从捕获到的第一个字节开始进行匹配分析,若不是协议的开始或者结束标识则直接丢弃,一旦捕获同步信息后,则对同步信息的真实性进行进一步的甄别;

步骤3:甄别后得到的第一个正确同步,判定当前报文同步成功,串口应用层正常报文。

如图1所示,其具体的实时过程包括以下步骤:

s0:定义完整slip协议报文标识pflag,在初始化时置为0;

s1:定义存储协议报文内容临时缓存,大小为n的数组data一维变量,数组data的大小满足单条slip规定报文字节数出现最大长度,含转义后最大长度,进行串口的初始化,等待设备串口突发接入;

s2:串口中断函数开始捕获字节,当串口中断收到第一个字节则执行s3,否则继续等待串口接收中断;

s3:对收到的串口字节进行内容匹配检测是否为0xc0,如果是0xc0则执行s4,否则执行s11;

s4:如果当前字节内容是0xc0,且pflag等于0,则执行s5;如果当前字节内容是0xc0,且pflag等于1,则执行s6;

s5:将标识pflag置为1(即当前为一个新的slip协议报文),放在data数组的第一个存储位置,再执行s2;

s6:将标识pflag置为2(即已捕获完一个完整协议报文同步),放在data数组的m+2位置(m大小均取决于pflag等于1之后收到非0xc0字节的数量),将标识pflag置为0,再执行s7;

s7:判断标识pflag是否等于2,如果等于2则执行s8,否则执行s2;

s8:进行真伪同步鉴定,判断data的收到数据长度是否大于2;如果大于2则执行s9,否则执行s10;

s9:判定当前报文正确同步,串口应用层已接收到一个完整正确的slip协议报文;

s10:判定当前报文为伪同步(伪同步的slip协议报文特点是由十六进制0xc0、0xc0组成,大小为2字节),当前报文属于slip协议伪报文,将标识pflag置为1,将data数组中第二个位置的0xc0去掉,执行s2,后续接收到的串口数据从data的第二个位置开始存储;

s11:判断标识pflag置是否为1,如果不等于1则执行s12,否则执行s13;

s12:直接丢弃当前字节内容,不保存到缓存data数组中,执行s2;

s13:将收到的字节内容放在data数组缓存的m+1位置(m大小均取决于pflag等于1之后收到非0xc0字节的数量),执行s2。

现对其具体的设计原理进行简要说明:

如图2所示,依据slip协议报文的结构特点与格式特征进行同步匹配捕获;由于串口突发接入,捕获后的同步信息存在伪同步情况,利用报文整个字节长度至少大于2的特点(因为完备的同步信息占据2字节大小),甄别去掉伪同步;一旦捕获到第一个合法同步命令后,则可以跳出伪同步、纠正其同步错误问题,为应用层正常报文语义理解提供保障,使得双方恢复正常有效通信。

以上仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1