一种多中断嵌入式程序的高可靠性设计方法与流程

文档序号:15930919发布日期:2018-11-14 01:37阅读:327来源:国知局

本发明涉及一种多中断嵌入式程序的高可靠性设计方法,用于对无操作系统的情况下,多中断配置的嵌入式程序的可靠性设计,解决在多中断随机运行的情况下,存在多中断异步随机访问冲突时的程序可靠性提高的问题。

背景技术

随着医疗电子、智能家居、物流管理和电力控制等方面的不断风靡,单个芯片的处理能力增强和集成接口的愈加丰富,使得嵌入式系统的应用获得了较大的增长。嵌入式系统的设计核心在于运行于微处理器或单片机中的具有特定功能的软件程序。随着嵌入式系统的需求越来越复杂,运行于微处理器中的程序规模也越来越大,所运行的逻辑也越来越复杂。嵌入式操作系统的引入部分地减轻了嵌入式应用软件开发程序员的负担,但对于实时性要求较高的应用领域,无操作系统的嵌入式程序还是被作为首选设计方案。如此,嵌入式程序的可靠性和安全性设计就变得更加重要。微处理器除了进行与应用相关的一些算术逻辑运算外,其最主要的功能就是响应外部输入。通常微处理器有三种响应外界输入的方法:查询、中断以及dma,其中中断是一种常用且方便的设计方式。但中断在使用过程中就会涉及到临界区的访问问题。若同一个变量在中断中以及中断外均在进行修改且访问时不加保护,那么程序的运行逻辑很可能与设计者的设计目标不同,甚至会对系统功能造成较大影响或危害。随着嵌入式软件功能的复杂性增加,这个问题会变得更加严重,且临界区的识别也会变得更加困难。更困难的是,在程序的运行过程中,临界区访问冲突造成的程序功能异常问题会以小概率的情况下随机出现,这会给调试过程带来巨大的人力物力成本。



技术实现要素:

本发明主要面向嵌入式程序设计领域,提出一种多中断嵌入式程序的高可靠性设计方法,主要解决了多中断嵌入式程序设计中临界区的识别与安全访问问题。

本发明的主要技术方案如下:一种多中断嵌入式程序的高可靠性设计方法,通过解决多中断嵌入式程序中的异步随机访问冲突,防止程序运行结果的不确定性,提高程序设计可靠性。

进一步的,解决多中断嵌入式程序中的异步随机访问冲突通过下述方式实现:

首先识别多中断嵌入式程序的临界区;

然后,在同一时刻避免多个处理角色同时访问临界区的原则,对临界区进行访问控制;所述的处理角色包括中断处理程序和主程序两种类型。

进一步的,所述的临界区可以通过如下步骤确定:

步骤1,搜索多中断嵌入式程序中所涉及到的所有全局变量、硬件接口,将搜索的结果作为公共资源;

步骤2,将步骤1中的所有公共资源按照下述定义分为三类:

第一类,所有处理角色均只对其进行读操作;

第二类,只有一个处理角色对其进行写操作,其他处理角色仅仅对进行读操作;

第三类,多于一个处理角色对其进行写操作;

步骤3,对于第一类资源,无临界区定义;

对于第二类资源,当读取公共资源作为条件、并用于是否进行后续操作判断时,需要将读取部分和后续操作部分同时作为临界区,其中用于判断的公共资源定义为该临界区的焦点资源;

对于第三类资源,在更改公共资源的时候需要将写操作的全部过程作为临界区,其中用于判断的公共资源定义为该临界区的焦点资源。

进一步的,步骤3中对第二类资源中的所述的当读取公共资源作为条件、并用于是否进行后续操作判断时,其中的条件包括单独条件判断分支和循环退出条件两种类型。

进一步的,所述的对临界区的访问控制包括以下步骤:

步骤1,比较需要关闭的中断集合sm和当前已经关闭的中断集合sc之间的差异;

步骤2,求集合差∑=sm-sc,在进入临界区前,关闭集合∑中所有中断;

步骤3,进入临界区,访问临界区,退出临界区;

步骤4,打开步骤2中集合∑中所定义的所有中断。

进一步的,所述的sm包括所有对临界区所对应的焦点资源进行更改操作的中断。

在多中断嵌入式程序执行过程中,由于中断处理的随机性,导致对资源访问是异步进行的,如果多个中断处理需要访问同一个公共资源,则处理逻辑的正确性会受到对公共资源的访问顺序的影响。为了避免这种异步随机访问公共资源带来的程序运行结果的不确定性,本发明提出了一种设计方法,确保在这种情况下,程序运行的正确性,从而提高程序的可靠性。本发明所提出的方法与现有技术方案相比,主要有以下优点:

1.本发明提出了一套提高多中断嵌入式程序设计的可靠性方法。其通过对临界区的定义和临界区的访问方法的设计,在设计阶段确定了多中断异步随机访问公共资源,产生竞争冲突时的访问规则,避免了在程序运行过程中,多中断异步随机访问冲突所导致的程序执行结果的不确定或执行结果异常的完整方法。

2.本发明所提出的方法明确了在嵌入式程序设计时,可能会产生临界区的所有公共资源,尤其是硬件接口,避免由于对其的随机访问导致的程序输出异常;

3.所涉及到的临界区的辨识方法,尤其是针对常常被忽视的公共资源仅在一个处理角色中进行写操作,其他处理角色中进行读操作的临界区的确认方法,避免了由于条件被随机更改,导致基于条件进行的处理操作行为异常。

4.本发明所提出的方法所定义的临界区外均为安全访问的范围,不会发生由于多中断异步随机访问冲突导致的程序执行结果的随机性,从而节约了可靠性质量工作的测试成本。

经过实践使用验证,该方法可以有效提高嵌入式程序设计,尤其是中断较多的嵌入式程序设计的正确性、可靠性和安全性,从设计阶段就保证了程序设计的高质量,从而减轻后期调试、测试和维护成本。

附图说明

图1为本发明的临界区处理逻辑示意图。

具体实施方式

下面结合实例对本发明做详细说明。本发明一种多中断嵌入式程序的高可靠性设计方法,通过解决多中断嵌入式程序中的异步随机访问冲突,防止程序运行结果的不确定性,提高程序设计可靠性。其中解决多中断嵌入式程序中的异步随机访问冲突通过下述方式实现:

(一)识别多中断嵌入式程序的临界区;

下面对临界区的确认部分进行实例化说明。

上述代码描述了一个自动控制电梯门开关的代码片段,其实现的功能描述为,当系统接收外部激励如按动开门开关时,芯片会收到一个中断,从而调用中断服务程序调用opendoor()函数来打开电梯门,而在中断外的程序中将循环检测开门的时间是否已经达到8s,若已达到8s,则调用closedoor()函数将电梯门关闭;在这段程序中,dwupdatetimems、dwcurrenttimems是在中断内外读写的全局变量,dwcurrenttimems属于第一类公共个资源,dwupdatetimems属于第二类资源,临界区在进行访问之前需要进行保护(即访问控制),现有常用的保护方法可以写成如下的形式:

当中断出现在dwcurrenttimems=getsystimems();语句之后时,上述的临界区保护方式显然与设计意图是不能符合的。当此情况出现后,变量dwcurrenttimems已经被置为当前时刻,而在其之后dwupdatetimems被更新为比dwcurrenttimems更加新的时间值,这样变量dwcurrenttimems的值就小于dwupdatetimems的值,在相减后变量发生溢出,从而大于8000ms,而dwupdatetimems亦满足不等于0xffffffff的标志值,故而if条件得到满足,从而执行关门操作。但此刻距离最近一次开门时刻的时间间隔显然不满足8s的条件。在应用过程中,这种情况却经常出现,如在电梯门即将关闭的时候,又来了一个乘客准备乘坐电梯,此时他在电梯门即将关闭的时候按下了开门按钮,若此刻嵌入式系统中运行的是上述的保护方式,则电梯门将会被关闭,而不会响应开门的请求。

根据本发明所述的方法,则本例中的临界区为:

该临界区的焦点资源为dwupdatetimems。其保护方式应被设计为如下形式:

此时,该段程序将会在上述情景中,正常响应开门的请求,再次为新到的乘客保持8s的开门等待时间。

然后,在同一时刻避免多个处理角色同时访问临界区的原则,对临界区进行访问控制,如图1所示;所述的处理角色包括中断处理程序和主程序两种类型。

本发明的实施例选择sparcv8结构的soc为运行芯片,并采用c语言来实现本发明所述的临界区访问实例。

在实施例中,由于对嵌入式软件的性能要求相对于soc的性能较低,而每个中断服务程序的执行时间也较短,因此,在进入临界区前,将统一关闭大部分中断。为了使代码较为简洁,我们对临界区的进入和退出代码做了宏定义,这样应用时,仅一行语句就可以完成临界保护区的进入或退出。临界区的安全访问实现如下:

宏定义enter_int_protected完成进入临界区前,对临界区中的焦点资源访问的限制保护功能,exit_int_protected完成退出保护区前对临界区中的资源访问权限的恢复功能。如此,临界区的进入可以实现为如下形式:

在临界区进入控制逻辑的实现中,int_i_priority_mask为soc中断响应控制寄存器,其为32位寄存器,低16位的每一位各控制一个中断请求是否可以得到处理器的响应,位值为1则表示相应中断响应被屏蔽,为0则表示相应的中断响应被打开。closeindividualint()函数用于根据参数所定义的掩码来关闭中断响应,而openindividualint()函数用于根据参数所定义的掩码来打开中断响应。testinterruptstatus()函数主要完成对当前中断开关状态的检验功能。为了保证在程序实现过程中,临界区可以进行安全嵌套,需要在进入临界区前检查当前的中断关闭状态,在退出临界区后,将中断关闭状态恢复为进入临界区前的状态。否则会出现中断在临界区中被锁嵌套的临界区控制访问代码异常打开的情况。所谓临界区的嵌套,即临界区中调用包含临界区保护的代码,在这种情况下,临界区保护逻辑可以简化描述为如下形式:

这样,在临界区进入保护处理逻辑部分,若不先检查进入临界区前的中断关闭状态,而统一关闭中断响应,在退出临界区时,统一打开中断响应,那么,内层的临界区保护控制逻辑会在推出内层临界区时,会将全部中断打开,而此时尚未退出外层的临界区访问,从而造成外层的临界区访问保护失效,与设计运行功能不符。

本发明未详细描述内容为本领域技术人员公知技术。

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