一种中断服务程序中通信故障的快速恢复方法转让专利

申请号 : CN201310488184.6

文献号 : CN103593261B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 万丽景党纪红关小川林琳葛莹王晶

申请人 : 北京控制工程研究所

摘要 :

本发明公开了一种中断服务程序中通信故障的快速恢复方法,本发明结合在中断服务程序中进行故障检测及恢复和在中断处理任务中进行故障检测及恢复两种方法的优点,通过细分故障类型为影响后续数据处理以及只影响当前指令数据处理的故障,充分利用两个数据包的时间间隔,影响后续数据处理的故障在中断服务程序中处理,只影响当前指令数据处理的故障在中断处理任务中处理,减少了任务切换的次数,缩短整个数据接收的时间,从而实现了接收即完成通信故障检测和恢复的方法。本发明该方法已在嫦娥三号RS422通信过程中得到应用,解决了型号中故障检测及恢复与中断处理时间相矛盾的问题,取得了很好的效果,具有很强的实用性。

权利要求 :

1.一种中断服务程序中通信故障的快速恢复方法,其特征在于步骤如下:

(1)每个中断周期中断服务程序中断接收外部请求数据,判断接收到的外部请求数据字节数L与同步帧字节数LS的大小,若接收到的外部请求数据字节数L小于同步帧的字节数LS,则接收外部请求数据,接收完外部请求数据后等待下一个中断周期开始,否则执行步骤(2);

(2)若接收到的外部请求数据字节数L等于同步帧的字节数LS,则执行如下操作:(a)从第一个字节开始,判断接收到的外部请求数据与同步帧数据是否完全相等,如果接收到的外部请求数据与同步帧数据完全相等,则转入执行步骤(3);否则,执行步骤(b);

(b)置i=1;

(c)从第i个接收的外部请求数据开始,判断接收到的外部请求数据与同步帧前LS-i个数据是否完全相等,如果接收到的外部请求数据与同步帧前LS-i个数据完全相等,则保留后接收到的L-i个外部请求数据,并置L=L-i,然后转入执行步骤(3),否则执行步骤(d);

(d)i=i+1,判断i与同步帧的字节数LS的大小,若i>=LS,则置L=0,放弃接收到的外部请求数据,然后转入执行步骤(3),否则返回执行步骤(c);

(3)判断接收到的外部请求数据字节数L与指令字节数LC的大小,若接收到的外部请求数据字节数L小于指令的字节数LC,则执行如下操作:(A)判断接收到的外部请求数据是否为同步帧的最后一个数据,如果不是则等待下一个中断周期开始,如果是则执行步骤(B);

(B)判断接收到的LS个字节与同步帧的数据是否完全相等,如果最后接收到的LS个字节与同步帧的数据完全相等,则保留后续LS个同步帧数据并置L=LS,然后等待下一个中断周期开始,否则直接等待下一个中断周期开始;

若接收到的外部请求数据大于等于指令的字节数LC,则执行如下操作:

(C)发送指令到中断处理任务中,检查最后一个外部请求数据是否为同步帧中的数据,如果不是,则置L=0,清除接收到的外部请求数据,然后等待下一个中断周期开始,如果是则执行步骤(D):(D)记最后一个外部请求数据为同步帧数据中的第i个数据,判断最后接收的i个外部请求数据是否与同步帧中前i个数据完全相等,如果相等则保留这i个外部请求数据并置L=i,等待下一个中断周期开始;如果不相等则置L=0,清除接收到的外部请求数据,等待下一个中断周期开始;

(4)结束,等待下一个中断周期开始。

说明书 :

一种中断服务程序中通信故障的快速恢复方法

技术领域

[0001] 本发明涉及一种中断服务程序中通信故障的快速恢复方法,尤其涉及一种在强实时嵌入式环境中中断服务程序中通信故障快速恢复方法,可应用强实时嵌入式软件中断服务程序中。

背景技术

[0002] 串口通信具有传输距离远、传输稳定、简单实用等特点,已被广泛应用于工业控制、数据通信等领域。这些领域中,串口通信用于实时的接收其他设备发来的信息,需要实时响应,因此提高设备接收的实时性至关重要。
[0003] 嫦娥三号两器通过RS422进行通信,通信波特率38.4kbps,包括起始位1位,数据位8位,偶校验位1位,停止位1位。嫦娥三号以单字节中断的方式接收发送的指令,指令类型有2种。这两种指令均有相同的2字节同步帧,两种指令区别如下:取数指令:指令数据固定,长度为3字节;地面遥控指令:指令数据不固定,长度为19字节。软件采用中断服务函数和中断处理任务的方式,完成对整个中断的响应。中断服务程序负责接收数据,并通知中断处理任务进行后续处理。由于星上硬件的限制,RS422接收缓冲仅为1个字节,因此应用软件必需在第3个字节到来前处理完当前字节。根据波特率计算,每个字节最大处理时间为0.573ms。为了避免当前通信异常影响下一条指令的接收和执行,需要在较短的时间内完成故障的快速检测及恢复。
[0004] 目前的解决方案如发表在《电子技术应用》2007年第9期的“基于VxWorks操作系统的多路高速串口的通信方法设计”提到,串口接收数据时,软件可以通过中断和轮询方式获取数据,其中中断接收的方式获取数据较快。串口接收数据时,软件可以通过中断和轮询方式获取数据,其中中断的方式获取数据较快。如发表在《计算机技术与发展》第21卷第9期中的“基于VxWorks多任务程序设计”提到,在中断中不能进行太多处理,通常使用中断服务程序中释放信号量,在中断任务中接收数据的方式来完成数据接收。然而,当数据包由多个字节组成,每个字节触发一次中断发送时,会导致中断触发频繁。由于释放信号量导致任务切换的次数增大,整个接收时间随之变长,无法完成对通信过程中通信故障的检测。

发明内容

[0005] 本发明解决的技术问题是:克服现有技术的不足,提供一种中断服务程序中通信故障的快速恢复方法,解决了故障检测及恢复与中断处理时间相矛盾的问题,缩短中断处的时间。
[0006] 本发明的技术解决方案是:一种中断服务程序中通信故障的快速恢复方法,步骤如下:
[0007] (1)每个中断周期中断服务程序中断接收外部请求数据,判断接收到的外部请求数据字节数L与同步帧字节数LS的大小,若接收到的外部请求数据字节数L小于同步帧的字节数LS,则接收外部请求数据,接收完外部请求数据后等待下一个中断周期开始,否则执行步骤(2);
[0008] (2)若接收到的外部请求数据字节数L等于同步帧的字节数LS,则执行如下操作:
[0009] (a)从第一个字节开始,判断接收到的外部请求数据与同步帧数据是否完全相等,如果接收到的外部请求数据与同步帧数据完全相等,则转入执行步骤(3);否则,执行步骤(b);
[0010] (b)置i=1;
[0011] (c)从第i个接收的外部请求数据开始,判断接收到的外部请求数据与同步帧前LS-i个数据是否完全相等,如果接收到的外部请求数据与同步帧前LS-i个数据完全相等,则保留后接收到的L-i个外部请求数据,并置L=L-i,然后转入执行步骤(3),否则执行步骤(d);
[0012] (d)i=i+1,判断i与同步帧的字节数LS的大小,若i>=LS,则置L=0,放弃接收到的外部请求数据,然后转入执行步骤(3),否则返回执行步骤(c);
[0013] (3)判断接收到的外部请求数据字节数L与指令字节数LC的大小,若接收到的外部请求数据字节数L小于指令的字节数LC,则执行如下操作:
[0014] (A)判断接收到的外部请求数据是否为同步帧的最后一个数据,如果不是则等待下一个中断周期开始,如果是则执行步骤(B);
[0015] (B)判断接收到的LS个字节与同步帧的数据是否完全相等,如果最后接收到的LS个字节与同步帧的数据完全相等,则保留后续LS个同步帧数据并置L=LS,然后等待下一个中断周期开始,否则直接等待下一个中断周期开始;
[0016] 若接收到的外部请求数据大于等于指令的字节数LC,则执行如下操作:
[0017] (C)发送指令到中断处理任务中,检查最后一个外部请求数据是否为同步帧中的数据,如果不是,则置L=0,清除接收到的外部请求数据,然后等待下一个中断周期开始,如果是则执行步骤(D):
[0018] (D)记最后一个外部请求数据为同步帧数据中的第i个数据,判断最后接收的i个外部请求数据是否与同步帧中前i个数据完全相等,如果相等则保留这i个外部请求数据并置L=i,等待下一个中断周期开始;如果不相等则置L=0,清除接收到的外部请求数据,等待下一个中断周期开始;
[0019] (4)结束,等待下一个中断周期开始。
[0020] 本发明与现有技术相比的有益效果是:本发明结合在中断服务程序中进行故障检测及恢复和在中断处理任务中进行故障检测及恢复两种方法的优点,通过细分故障类型为影响后续数据处理以及只影响当前指令数据处理的故障,充分利用两个数据包的时间间隔,影响后续数据处理的故障在中断服务程序中处理,只影响当前指令数据处理的故障在中断处理任务中处理,减少了任务切换的次数,缩短整个数据接收的时间,从而实现了接收即完成通信故障检测和恢复的方法。本发明该方法已在嫦娥三号RS422通信过程中得到应用,解决了型号中故障检测及恢复与中断处理时间相矛盾的问题,取得了很好的效果,具有很强的实用性。

附图说明

[0021] 图1为本发明的实现流程图;
[0022] 图2为检验点1的实现流程图;
[0023] 图3为检验点2的实现流程图;
[0024] 图4为检验点3的实现流程图。

具体实施方式

[0025] 影响后续数据处理的故障包含:
[0026] 同步帧错误:需要丢弃后续字节,直到收到一个正确的同步帧;
[0027] 数据丢失:即当前数据长度未达到一条指令的长度时,再次收到一个正确的同步帧,应丢弃同步帧外所有收到的数据;
[0028] 混合指令:指一条指令尚未发完,中间插入了另一条指令。该种故障需接收中间插入的指令,插入前到来的数据和后续数据则丢弃;
[0029] 混合数据:指在正常指令传输过程中有其他数据到来。在指令到来前或者在指令末尾插入数据则直接丢弃该数据,在中间插入数据则归结为指令内容错误和校验和错误。
[0030] 只影响当前指令数据处理的故障包含:
[0031] 指令内容错误,不影响后续数据接收,直接丢弃该指令。
[0032] 校验和错误,不影响后续数据接收,直接丢弃该指令。
[0033] 由上述描述可以得出,影响后续数据处理的故障围绕同步帧和指令长度进行。当收到正确的同步帧时,则丢弃此前的已接收数据。当同步帧正确且指令长度满足要求时,则不会发生影响后续数据处理的故障,可直接将该指令发送给只影响当前指令数据处理的故障处理任务做进一步处理。
[0034] 影响后续数据处理的故障只需判断同步帧,处理时间短,在中断处理任务中进行。只影响当前指令数据处理的故障需要校验指令内容,校验指令的校验和,处理时间较长,但不影响后续数据处理,可在中断处理任务中进行。
[0035] 本发明的实现过程如图1所示,具体步骤如下:
[0036] (1)每个中断周期中断服务程序中断接收外部请求数据,判断接收到的外部请求数据字节数L与同步帧字节数LS的大小,若接收到的外部请求数据字节数L小于同步帧的字节数LS,则接收外部请求数据,接收完外部请求数据后等待下一个中断周期开始,否则执行步骤(2);
[0037] (2)检验点1的操作如图2所示,若接收到的外部请求数据字节数L等于同步帧的字节数LS,则执行如下操作:
[0038] (a)从第一个字节开始,判断接收到的外部请求数据与同步帧数据是否完全相等,如果接收到的外部请求数据与同步帧数据完全相等,则转入执行步骤(3);否则,执行步骤(b);
[0039] (b)置i=1;
[0040] (c)从第i个接收的外部请求数据开始,判断接收到的外部请求数据与同步帧前LS-i个数据是否完全相等,如果接收到的外部请求数据与同步帧前LS-i个数据完全相等,则保留后接收到的L-i个外部请求数据,并置L=L-i,然后转入执行步骤(3),否则执行步骤(d);
[0041] (d)i=i+1,判断i与同步帧的字节数LS的大小,若i>=LS,则置L=0,放弃接收到的外部请求数据,然后转入执行步骤(3),否则返回执行步骤(c);
[0042] (3)判断接收到的外部请求数据字节数L与指令字节数LC的大小,若接收到的外部请求数据字节数L小于指令的字节数LC,执行如下操作,检验点2的操作如图3所示:
[0043] (A)判断接收到的外部请求数据是否为同步帧的最后一个数据,如果不是则等待下一个中断周期开始,如果是则执行步骤(B);
[0044] (B)判断接收到的LS个字节与同步帧的数据是否完全相等,如果最后接收到的LS个字节与同步帧的数据完全相等,则保留后续LS个同步帧数据并置L=LS,然后等待下一个中断周期开始,否则直接等待下一个中断周期开始;
[0045] 若接收到的外部请求数据大于等于指令的字节数LC,执行如下操作,检验点3的操作如图4所示:
[0046] (C)发送指令到中断处理任务中,检查最后一个外部请求数据是否为同步帧中的数据,如果不是,则置L=0,清除接收到的外部请求数据,然后等待下一个中断周期开始,如果是则执行步骤(D):
[0047] (D)记最后一个外部请求数据为同步帧数据中的第i个数据,判断最后接收的i个外部请求数据是否与同步帧中前i个数据完全相等,如果相等则保留这i个外部请求数据并置L=i,等待下一个中断周期开始;如果不相等则置L=0,清除接收到的外部请求数据,等待下一个中断周期开始;
[0048] (4)结束,等待下一个中断周期开始。
[0049] 该设计方法充分利用两条指令的时间间隔,细分故障为两种故障类型,分别在中断服务程序和中断处理任务中进行故障的快速检测及恢复,上述检验点的处理保证了由中断服务程序转发的指令不可能同时包含2条指令,不会影响后续数据的处理,缩短中断处的时间。
[0050] 本发明未详细描述内容为本领域技术人员公知技术。