一种面向SPARC平台的嵌入式软件异常自主处理方法和装置

文档序号:27489303发布日期:2021-11-22 13:56阅读:157来源:国知局
一种面向SPARC平台的嵌入式软件异常自主处理方法和装置
一种面向sparc平台的嵌入式软件异常自主处理方法和装置
技术领域
1.本发明涉及嵌入式软件领域,特别涉及一种面向sparc平台的嵌入式软件异常自主处理方法和装置。


背景技术:

2.sparc是目前主流的处理器架构,面向sparc平台的嵌入式软件在运行过程中可能会出现异常,导致系统复位甚至连续复位。这种情况一旦处理不当或者不及时,对于航空航天、汽车电子等对安全要求较高的关键系统可能会导致系统失效或严重损失。
3.目前,对于面向sparc平台的嵌入式软件连续复位的异常处理手段主要是人工操作重新上电或者切换到备份设备重新运行。这种处理方式存在以下不足:(1)sparc平台植入的设备为无人的运行设备时,需要有效的远程加断电手段人工辅助完成异常处理,缺乏自主性;(2)完成系统的重新加断电操作的时延较大,而异常处理的不及时会影响系统运行的连续性;(3)系统重新加电后可能会造成一些运行时环境信息的丢失,不利于后续对异常的定位和修复;(4)系统重新加断电的操作往往会造成系统业务的中断,对于某些关键系统来说,业务中断是不被允许的。因此,有必要基于sparc平台的特点,设计一种面向sparc平台的嵌入式软件异常自主处理方法和装置,用于解决上述问题。


技术实现要素:

4.有鉴于此,本发明实施例的目的在于提供一种面向sparc平台的嵌入式软件异常自主处理方法和装置,具体包括:第一方面,本发明实施例提供了一种面向sparc平台的嵌入式软件异常自主处理方法,所述方法包括:步骤s100,将目标软件对应的trap处理函数挂接到所述sparc平台中的trap处理入口地址;然后根据所述trap处理函数确定的目标状态对应的函数入口地址,确定所述目标软件的执行地址;其中,所述trap处理函数为叶子函数,用于执行如下步骤来确定所述目标状态:步骤s110,读取所述sparc平台中寄存器窗口的i7寄存器值,根据所述i7寄存器值以及地址分区表确定所述目标软件运行的当前分区;步骤s120,判断所述当前分区是否为底层公共函数运行所在的分区,如果是,则将目标状态设置为系统最小模式运行状态,否则执行步骤s130;步骤s130,在所述目标软件对应的状态转换关系表中查找与所述目标软件的当前状态对应的状态转换链表集合;若所述状态转换链表集合为空,则将目标状态设置为系统最小模式运行状态;否则,根据所述状态转换链表集合的优先级字段,选取所述状态转换链表集合中优先级最高的状态转换链表作为备选状态转换链表;步骤s140,根据运行状态分区表,判断所述备选状态转换链表对应的运行分区是否包括所述当前分区;若不包括,且所述备选状态转换链表对应的跳转条件字段指示的跳
转条件能够满足,则根据所述备选状态转换链表确定所述目标状态;否则,将所述备选状态转换链表从所述状态转换链表集合中排除,并重新执行步骤s130。
5.可选地,在步骤s100之前,所述方法还包括:将所述sparc平台用于目标软件运行的ram/sram划分为多个分区,并根据所述目标软件处于不同运行状态时占用的分区情况构建所述目标软件对应的运行状态分区表;其中,所述目标软件处于不同运行状态时占用一个或多个分区。
6.可选地,所述运行状态分区表包括所述目标软件处于不同运行状态时对应的状态编号、占用分区的数量和占用分区的编号。
7.可选地,所述sparc平台的底层公共函数运行于所述多个分区中的一个。
8.可选地,所述系统最小模式运行状态为所述不同运行状态中的一个。
9.可选地,在步骤s100之前,所述方法还包括:根据所述目标软件运行的业务需求,确定所述目标软件对应的状态转换关系表;其中,所述状态转换关系表包含多个与所述目标软件的运行状态对应的状态转换链表集合;所述状态转换链表集合包含多个用于指示所述目标软件跳转信息的状态转换链表。
10.可选地,所述目标软件跳转信息包括跳转条件字段、跳转状态字段和/或优先级字段。
11.可选地,所述多个用于指示所述目标软件跳转信息的状态转换链表中的一个状态转换链表的跳转条件字段值为满足跳转条件、跳转状态字段值为系统最小模式运行状态的编号、优先级字段指示的优先级为最低。
12.可选地,所述trap处理函数在执行步骤s110之前,还包括:将所述目标软件存在运行异常时的寄存器组和堆栈内容保存在预设的地址空间中,并记录所述目标软件的所述当前状态。
13.第二方面,本发明实施例提供了一种面向sparc平台的嵌入式软件异常自主处理装置,所述装置包括:函数调用模块,用于将目标软件对应的trap处理函数挂接到所述sparc平台中的trap处理入口地址;然后根据所述trap处理函数确定的目标状态对应的函数入口地址,确定所述目标软件的执行地址;其中,所述trap处理函数为叶子函数,包括如下功能模块来确定所述目标状态:当前分区确定模块,用于读取所述sparc平台中寄存器窗口的i7寄存器值,根据所述i7寄存器值以及地址分区表确定所述目标软件运行的当前分区;特殊分区判断模块,用于判断所述当前分区是否为底层公共函数运行所在的分区,如果是,则将目标状态设置为系统最小模式运行状态;备选状态确定模块,用于在所述目标软件对应的状态转换关系表中查找与所述目标软件的当前状态对应的状态转换链表集合;若所述状态转换链表集合为空,则将目标状态设置为系统最小模式运行状态;否则,根据所述状态转换链表集合的优先级字段,选取所述状态转换链表集合中优先级最高的状态转换链表作为备选状态转换链表;目标状态确定模块,用于根据运行状态分区表,判断所述备选状态转换链表对应的运行分区是否包括所述当前分区;若不包括,且所述备选状态转换链表对应的跳转条件字段指示的跳转条件能够满足,则根据所述备选状态转换链表确定所述目标状态;否则,将
所述备选状态转换链表从所述状态转换链表集合中排除,并从所述状态转换链表集合中重新确定备选状态转换链表。
14.本发明实施例提供的面向sparc平台的嵌入式软件异常自主处理方法和装置,首先有别于现在技术中需要通过人工协助进行异常处理的方式,通过trap处理的方式以及所设计的trap处理函数的具体功能实现了异常的自主处理,且时延较小;其次,通过判定异常所发生的地址空间,尽可能避免目标软件异常导致系统连续复位进而造成系统业务中断的情况的发生;最后,通过sparc平台的寄存器窗口机制以及trap处理函数为叶子函数的特性,保存了寄存器组和堆栈内容等运行时信息,也利于后续异常问题的分析和定位。
附图说明
15.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳务的前提下,还可以根据这些附图获得其他的附图。通过附图所示,本技术的上述及其它目的、特征和优势将更加清晰。在全部附图中相同的附图标记指示相同的部分。并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本技术的主旨。
16.图1示出了本发明实施例提供的面向sparc平台的嵌入式软件异常自主处理方法的流程示意图。
17.图2示出了本发明实施例提供的面向sparc平台的嵌入式软件异常自主处理方法的流程示意图。
18.图3示出了本发明实施例提供的面向sparc平台的嵌入式软件异常自主处理装置的结构示意图。
具体实施方式
19.以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
20.在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。这里使用的词语“一”、“一个(种)”和“该”等也应包括“多个”、“多种”的意思,除非上下文另外明确指出。此外,在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
21.在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
22.目前,对于面向sparc平台的嵌入式软件连续复位的异常处理手段主要是人工操作重新上电或者切换到备份设备重新运行。这种处理方式存在以下不足:(1)sparc平台植入的设备为无人的运行设备时,需要有效的远程加断电手段人工辅助完成异常处理,缺乏自主性;(2)完成系统的重新加断电操作的时延较大,而异常处理的不及时会影响系统运行的连续性;(3)系统重新加电后可能会造成一些运行时环境信息的丢失,不利于后续对异常
的定位和修复;(4)系统重新加断电的操作往往会造成系统业务的中断,对于某些关键系统来说,业务中断是不被允许的。
23.有鉴于此,本公开实施例的目的在于提供一种面向sparc平台的嵌入式软件异常自主处理方法和装置,以下结合附图详细描述本发明实施例公开的内容。
24.附图1示出了本发明实施例提供的面向sparc平台的嵌入式软件异常自主处理方法的流程示意图,具体内容如下。
25.步骤s110,将trap处理函数挂接到所述sparc平台中的trap处理入口地址;然后根据所述trap处理函数确定的目标状态对应的函数入口地址,确定所述目标软件的执行地址。
26.本发明实施例提供的面向sparc平台的嵌入式软件异常自主处理方法,旨在面对运行于sparc平台的嵌入式软件出现运行异常时,提供一种无需人工干预的自主处理方法。sparc(scalable processor architecture,可扩展处理器架构)是国际上流行的risc微处理器体系架构之一,以其高可靠性多应用于航空航天、汽车电子领域等对安全要求较高的设备和系统中。
27.本步骤中的目标软件即为运行于sparc平台的嵌入式软件,目标软件在运行过程中会存在运行异常的情况,例如浮点运算异常、空指针异常等,本发明实施例需要在目标软件存在运行异常的情况下实现目标软件运行状态的自主切换,尽可能避免软件异常导致系统连续复位进而造成系统业务中断的情况的发生。
28.在sparc平台中通过处理器本身的机制检测到目标软件存在运行异常的情况下,将所述trap处理函数挂接到所述sparc平台中的trap处理入口地址。sparc平台也支持中断(interrupt)或陷入(trap)机制来响应异常事件,相应地也提供了trap处理入口地址。具体的响应异常事件的方式可以通过设计相应的trap处理函数并将trap处理函数体挂接在中断向量表中来实现,挂接时可以指定相应的异常类型。
29.举例说明,为了检测目标软件存在的浮点运算异常,可以在sparc平台的中断向量表中进行trap处理函数的入口挂接。
30.trp_set(_trpinthandler, 0x08)其中trp_set用于sparc平台的中断向量表中进行trap处理函数的入口挂接,0x08为sparc平台的浮点trap序号,_trpinthandler通过如下汇编语言编写、实现函数跳转。
31._trpinthandler:call exceptiondealnop在进行了上述trap处理函数的挂接操作后,需要执行trap处理函数的具体功能。本发明实施例中的trap处理函数最终需要跳转到的目标软件运行的目标状态。可以理解的是,当目标软件通过trap处理函数的功能从当前状态自主跳转到目标状态后,可以避免当前状态中出现的运行异常情形。
32.具体地,本发明实施例中目标软件可能运行于多个不同的状态。举例说明,目标软件为无人飞行器的控制软件,无人机飞行器可能处于巡航状态、上升状态、下降状态等多个不同状态,在不同状态下可能需要调用控制软件的不同函数对无人飞行器进行控制。当目标软件控制的无人机飞行器当前处于巡航状态下遇到了运行异常的情形,需要通过trap处
理函数计算出无人机飞行器需要跳转到的目标状态,然后根据所述trap处理函数确定的目标状态对应的函数入口地址,确定所述目标软件的执行地址,然后退出trap处理流程,从而完成了目标软件的异常自主处理的流程。
33.由此可见,本发明实施例的关键步骤是要通过trap处理函数来确定目标软件要跳转的目标状态,具体通过如下方式实现。
34.步骤s110,读取所述sparc平台中寄存器窗口的i7寄存器值,根据所述i7寄存器值以及地址分区表确定所述目标软件运行的当前分区。
35.sparc的特点是寄存器窗口,任意进程只能看到当前窗口中的寄存器,进程可以使用命令强行启用新窗口。每个窗口可以包含多个寄存器,窗口之间的寄存器有部分重叠用于传递参数。
36.本发明实施例中将trap处理函数明确定义为叶子函数的类型。在sparc中,叶子函数的特性在于即trap处理函数被调用时无需进行寄存器窗口的切换,而是将其直接挂接到相应的trap处理入口地址。不进行寄存器窗口的切换的优势在于原有寄存器窗口中的各寄存器值的信息得以保存。
37.一方面,可以将所述目标软件存在运行异常时的寄存器组和堆栈内容保存在预设的地址空间中,并记录所述目标软件的所述当前状态,从而不会导致运行时环境信息的丢失,方便后续对异常的定位和修复。具体而言,可以在trap处理函数中通过类似以下伪代码的方式实现。
38.save %g0~%g7,%i0~%i7,%o0~%o7,%l0~%l7,%f0~%f15其中g0~g7、i0~i7、o0~o7、l0~l7、f0~f15为当前状态下寄存器窗口中的32+16个寄存器,每个寄存器在sparc中均有不同的固定作用,在此不做一一列举。
39.另一方面,可以通过留存的寄存器值,例如sparc的i7寄存器值用于保存目标软件在当前状态下运行的地址,进而可以根据所述i7寄存器值以及地址分区表确定所述目标软件运行的当前分区。
40.asm("set _restoreaddr,%l5")asm("set %i7, [ %l5 ]")tmppart = partition{_restoreaddr}上述代码中将i7寄存器值指示的运行地址信息可以保存到变量_restoreaddr中,然后通过以下代码实现读取软件异常时寄存器窗口的返回地址寄存器i7的值,并根据运行地址区表中起始地址和结束地址内容,判断出i7寄存器值所在的分区并将分区编号存储在变量tmppart中。
[0041]
本发明实施例中在设计trap处理函数之前需要对用于目标软件运行的ram/sram进行分区设计。其原因在于,当目标软件存在运行异常的情形时,其所运行的系统地址通常存在相应的故障,因此在设计嵌入式软件异常自主处理方法时需要保证目标软件出现异常时跳转到的状态所运行的地址不会反复存在故障,从而出现系统连续复位而造成系统业务中断的情况的发生。因此,可以对目标软件运行的ram/sram进行分区设计,从根本上保证跳转后目标软件所运行的分区不包括存在故障的分区。
[0042]
具体地,本发明实施例需要根据系统硬件配置,在编译链接过程中将软件的运行地址所在的ram/sram区进行分区设计,每个分区设置唯一编号,如分区1、分区2
……
分区n
(n>2),其中一个分区k(k∈[1,n])作为底层公共函数运行所在的分区,例如向量相加、向量相乘等基础算法的函数运行在该分区k内。
[0043]
相应地,本发明实施例会根据上述分区情况设计地址分区表,用于确定目标软件运行所在的分区。具体示例如下。
[0044]
typedef struct tag_partition_tab{ unsigned int partid; /* 分区编号 */ unsigned int startaddr;/* 起始地址 */ unsigned int endaddr;/* 结束地址 */} spartitiontab;spartitiontab mpartitiontab[7] ={{1, 0x1000000, 0x1020000}, /* 分区1 */{2, 0x1030000, 0x1050000}, /* 分区2 */{3, 0x1060000, 0x1080000}, /* 分区3 */{4, 0x1090000, 0x10b0000}, /* 分区4 */{5, 0x10c0000, 0x10e0000}, /* 分区5 */{6, 0x10f0000, 0x1110000}, /* 分区6 */{7, 0x1120000, 0x1140000}, /* 分区7 */};其中,tag_partition_tab示出了每一分区的具体数据结构,包括该分区的分区编号partid、起始地址startaddr和结束地址endaddr。mpartitiontab示出了一种具体的分区的实施方式,在该实例中系统被划分为了7个分区。例如分区1的编号为1,起始地址为0x1000000,结束地址为0x1020000。也就是说,当目标软件在当前状态下运行的地址包括0x1000000至0x1020000之间的地址时,表示该目标软件运行于该分区1中。其他分区可以通过类似的方式进行理解,此处不做赘述。
[0045]
因此,当获取了i7寄存器值指示的目标软件当前发生异常时的运行地址以及预先设计的地址分区表后,可以相应地确定出目标软件运行的当前分区。可以理解的是,由于当前分区处于异常发生时的场景,因此当前分区也是潜在的故障分区。
[0046]
寄存器窗口和叶子函数均是sparc的特性,将trap处理函数定义为叶子函数,可以避免在trap过程中寄存器窗口的切换,而sparc的寄存器窗口中各寄存器都保存有特定的运行时信息,从而保存了异常情形发生时sparc平台中寄存器的信息不丢失。
[0047]
步骤s120,判断所述当前分区是否为底层公共函数运行所在的分区,如果是,则将目标状态设置为系统最小模式运行状态,否则执行步骤s130。
[0048]
在步骤s110获取了目标软件运行的当前分区后,首先需要判断当前分区是否为底层公共函数运行所在的分区。前述步骤中介绍到本发明实施例在进行分区设计时会将其中一个分区作为底层公共函数运行所在的分区。由于底层公共函数是系统中所有软件运行都会频繁调用的基础函数,因此当该分区成为了异常发生时的潜在故障分区时,表明sparc平台中系统可能会遇到较大故障,此时应该选择将目标状态直接设置为系统最小模式运行状
态。本发明实施例中的系统最小模式运行状态是指暂停系统的绝大多数业务、仅使得系统保持基本的运行状态。本发明实施例在对每一目标软件的不同状态进行设计时,均会选择一种符合上述描述的状态作为系统最小模式运行状态。
[0049]
示例性地,对于无人机飞行器的控制系统而言,其系统最小模式运行状态可以是指standby状态,该状态下无人机稳定在某一大致位置进行悬停,控制上仅保证一个控制动力输出,暂停一切业务工作,维持住悬停姿态即可。
[0050]
本步骤中在底层公共函数运行所在的分区为潜在的故障分区时,其可能会对系统大部分业务造成影响,为了保证系统业务的连续性,故而将目标状态设置为系统最小模式运行状态并作为trap处理函数的输出。
[0051]
步骤s130,在所述目标软件对应的状态转换关系表中查找与所述目标软件的当前状态对应的状态转换链表集合;若所述状态转换链表集合为空,则将目标状态设置为系统最小模式运行状态;否则,根据所述状态转换链表集合的优先级字段,选取所述状态转换链表集合中优先级最高的状态转换链表作为备选状态转换链表。
[0052]
当步骤s120中的判断条件不满足时,trap处理函数开始执行步骤s130的功能,进一步判断目标软件需要跳转到的目标状态。本发明实施例在进一步确定目标状态时,需要考虑三个判断条件,即优先级条件、跳转条件和分区冲突条件。其中步骤s130主要考虑的是优先级条件。
[0053]
本发明实施例在确定目标软件处于异常时的跳转状态之前需要为目标软件设计一个状态转换关系表。状态转换关系表中记录了目标软件处于任一状态时能够跳转到的目标状态以及判断目标状态所需的相关信息。而状态转换关系表中又由多个状态转换链表集合构成,每一个状态转换链表集合对应所述目标软件的一个当前状态,并相应地记录该当前状态下能够跳转到的目标状态以及判断目标状态所需的相关信息。而每一个状态转换链表集合又包括多个状态转换链表,每一状态转换链表对应所述目标软件在某一当前状态下跳转到某一目标状态的相关信息。
[0054]
示例性地,通过以下例子对状态转换关系表、状态转换链表集合以及状态转换链表的概念进行说明。
[0055]
typedef struct tag_state_trans_ele{ unsigned int transenable; /* 状态跳转条件,1为允许,0为不允许 */ unsigned int statetarget; /* 目标状态编号 */} sstatetransele;上述定义的sstatetransele为一个状态转换链表,其具体结构包括状态跳转条件transenable以及目标状态编号statetarget。其中,transenable为1时表示跳转到目标状态statetarget的条件成立,可以进行跳转;transenable为0时表示跳转到目标状态statetarget的条件不成立,无法进行跳转。进一步地,状态转换链表tag_state_trans_ele中还可以包括跳转优先级变量(代码中未示出),用于指示跳转至目标状态statetarget的优先级高低。
[0056]
typedef struct tag_state_trans_link_tab{

unsigned int stateid; /* 当前状态编号 */ sstatetransele statenum[7];/* 目标状态及其跳转条件 */} sstatetranslinktab;上述定义的sstatetranslinktab为一个状态转换链表集合,其具体结构包括当前状态编号stateid,目标状态及其跳转条件statenum[7]。可见,一个状态转换链表集合sstatetranslinktab中包括7个状态转换链表,可见在该实例中定义的目标软件的状态不超过7个。sstatetranslinktab中指示了存在异常情形的当前状态为stateid时能够跳转到的目标状态以及判断目标状态所需的相关信息。
[0057]
sstateparttab sstatetranslinktab[6] ={{1, {{1,3},{1,6},{0,0},{0,0},{0,0},{0,0},{0,0}}}, /* 巡航状态 */{2, {{1,3},{1,6},{0,0},{0,0},{0,0},{0,0},{0,0}}}, /* 精稳悬停状态 */{3, {{1,2},{1,6},{0,0},{0,0},{0,0},{0,0},{0,0}}}, /* 粗稳悬停状态 */{4, {{1,3},{1,1},{1,6},{0,0},{0,0},{0,0},{0,0}}}, /* 上升状态 */{5, {{1,3},{1,1},{1,6},{0,0},{0,0},{0,0},{0,0}}}, /* 下降状态 */{6, {{1,6},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}}}, /* standby状态 */};上述定义的sstatetranslinktab[6]为目标软件无人机飞行器的控制软件对应的状态转换关系表的一个实例。可见,根据该目标软件的业务特点,将该软件划分为6个运行状态,分别为巡航状态、精稳悬停状态、粗稳悬停状态、上升状态、下降状态和standby状态。
[0058]
具体地,巡航状态是无人机按照稳定速率向前巡航飞行,可以进行业务性的拍照;悬停状态是指无人机稳定在某一位置进行悬停,可以进行业务性的拍照,悬停状态根据控制精度和控制策略分为精稳悬停状态和粗稳悬停状态;上升状态是指无人机按照预定策略进行向上飞行,暂停业务性的拍照;下降状态是指无人机按照预定策略进行向下飞行,暂停业务性的拍照;standby状态是指无人机稳定在某一大致位置进行悬停,控制上仅保证一个控制动力输出,暂停一切业务工作,维持住悬停姿态即可,即系统最小模式运行状态。
[0059]
进一步举例说明,“{4, {{1,3},{1,1},{1,6},{0,0},{0,0},{0,0},{0,0}}}”表示状态转换关系表其中的一个状态转换链表集合的实例,表示当前状态为上升状态时,其能够跳转到的目标状态的相关信息。再进一步地,其中“4”表示上升状态的状态编号,其中包括的“{1,3}”、“{1,1}”、“{1,6}”、“{0,0}”均为状态转换链表,分别对应跳转到不同目标状态的相关信息。例如,“{1,3}”中的“3”表示粗稳悬停状态,“1”表示目标软件可以从上升状态跳转至粗稳悬停状态。同理“{1,1}”和“{1,6}”分别表示目标软件可以从上升状态跳转至巡航状态或standby状态。此外,后续的状态转换链表均设置为了“{0,0}”,表示目标软件不允许从上升状态跳转至其他状态,此处状态转换链表也可以表示为“{0,2}”、“{0,5}”等,不会改变trap处理函数的执行逻辑。
[0060]
此外,前文介绍到状态转换链表中除了目标状态编号和跳转条件外,还可以包括跳转优先级变量,例如{1,3}也可以表示为{1,1,3},其中新增的第一个“1”表示目标软件处于上升状态时,跳转至粗稳悬停状态的优先级最高。也可以如上述示例中所示的,在状态转换链表中将优先级变量省去,通过状态转换链表的顺序来表达优先级信息,例如根据“{1,
3}”、“{1,1}”、“{1,6}”的记录顺序,表示目标软件处于上升状态时,跳转至粗稳悬停状态的优先级最高,跳转至巡航状态的优先级次之,跳转至standby状态的优先级最低。
[0061]
在预先设计目标软件的状态转换关系表时,当前状态能够跳转到哪些目标状态、跳转的优先级等信息都是系统设计人员根据系统业务运行的逻辑来确定的。示例性地,无人机飞行器处于上升状态时,通常在上升到一定位置后会在悬停后进行定点的业务性拍照,此时一般先跳转进入粗稳悬停状态;或者按照稳定速率向前巡航飞行,可以进行一定路线上的业务性拍照。此外,在特殊情形下,也可以切换到系统最小模式运行状态,即standby状态,维持住悬停姿态。而上升状态一般不会直接跳转到下降状态或精稳悬停状态。由此,可以设计出目标软件处于不同当前状态下的跳转条件。此外,根据业务运行中不同状态出现的频率,进而可以确定出不同跳转状态对应的优先级。
[0062]
同时,上述多个用于指示所述目标软件跳转信息的状态转换链表中的一个状态转换链表的跳转条件字段值为满足跳转条件、跳转状态字段值为系统最小模式运行状态的编号、优先级字段指示的优先级为最低,即示例中的“{1,6}”。
[0063]
因此,步骤s130中首先会在所述目标软件对应的状态转换关系表中查找与所述目标软件的当前状态对应的状态转换链表集合。例如无人机飞行器的控制软件处于上升状态时出现了运行异常的情形,通过查找上述示例中的状态转换关系表sstatetranslinktab,可以查找到状态转换链表集合“{4, {{1,3},{1,1},{1,6},{0,0},{0,0},{0,0},{0,0}}}”。
[0064]
特别地,若所述状态转换链表集合为空,则将目标状态设置为系统最小模式运行状态。示例性地,如果查找到当前状态对应的状态转换链表集合为“{0,0},{0,0},{0,0},{0,0}
……”
,表示当前状态没有符合条件的跳转状态,可直接将目标状态设置为系统最小模式运行状态,尽可能保持系统业务的连续运行。
[0065]
若状态转换链表集合不为空,步骤s130会根据所述状态转换链表集合的优先级字段,选取所述状态转换链表集合中优先级最高的状态转换链表作为备选状态转换链表。在上述示例中,状态转换链表集合“{4, {{1,3},{1,1},{1,6},{0,0},{0,0},{0,0},{0,0}}}”中的优先级字段是通过状态转换链表出现的顺序表示的,因此会选取优先级最高的状态转换链表“{1,3}”作为备选状态转换链表。此处体现了本发明实施例中trap处理函数在进一步确定目标状态时,需要考虑的三个判断条件中的优先级条件。
[0066]
步骤s140,根据所述运行状态分区表,判断所述备选状态转换链表对应的运行分区是否包括所述当前分区;若不包括,且所述备选状态转换链表对应的跳转条件字段指示的跳转条件能够满足,则根据所述备选状态转换链表确定所述目标状态;否则,将所述备选状态转换链表从所述状态转换链表集合中排除,并重新执行步骤s130。
[0067]
步骤s140体现了本发明实施例中trap处理函数在进一步确定目标状态时,需要考虑的三个判断条件中的分区冲突条件和跳转条件。
[0068]
在步骤s130确定了备选状态转换链表后,需要根据分区冲突条件和跳转条件进一步判断该备选状态转换链表对应的目标状态是否能够成为trap处理函数输出的目标状态。
[0069]
对于分区冲突条件,应该判断根据所述运行状态分区表,判断所述备选状态转换链表对应的运行分区是否与所述当前分区存在交集。本发明实施例中,该判断条件是通过预先设计的运行状态分区表来实现的。运行状态分区表是将所述sparc平台用于目标软件运行的ram/sram划分为多个分区之后,根据所述目标软件处于不同运行状态时占用的分区
情况构建得到的;其中,目标软件处于不同运行状态时占用一个或多个分区。运行状态分区表包括所述目标软件处于不同运行状态时对应的状态编号、占用分区的数量和占用分区的编号。
[0070]
以下通过一具体实例介绍运行状态分区表的含义。
[0071]
typedef struct tag_state_part_tab{ unsigned int stateid; /* 状态编号 */ unsigned int statenum;/* 涵盖的分区数 */ unsigned int parttab[8]; /* 涵盖的分区编号列表 */} sstateparttab;sstateparttab mstateparttab[6] ={{1, 2, {1,7,0,0,0,0,0,0}}, /* 巡航状态 */{2, 3, {2,3,7,0,0,0,0,0}}, /* 精稳悬停状态 */{3, 3, {4,5,7,0,0,0,0,0}}, /* 粗稳悬停状态 */{4, 2, {6,7,0,0,0,0,0,0}}, /* 上升状态 */{5, 2, {6,7,0,0,0,0,0,0}}, /* 下降状态 */{6, 1, {7,0,0,0,0,0,0,0}},/* standby状态 */}其中,tag_state_part_tab为描述目标软件处于特定状态时分区占用情况的数据结构,包括状态编号stateid、占用分区的数量statenum和占用分区的编号parttab[]。parttab[8]表示系统在进行分区设计时被划分为了7个分区,parttab最后一个元素为0,表征结束或者无意义的元素。
[0072]
具体针对目标软件为无人机飞行器的控制软件而言,mstateparttab是该软件对应的运行状态分区表。该软件可以处于6个不同的状态,整个系统划分为了7个分区。以巡航状态为例,其状态编号为1,占用分区的数量为2,具体占用的分区为分区1和分区7,其他状态对应的具体数值可以通过类似的方式理解,在此不做赘述。运行状态分区表是根据目标软件处于不同运行状态时实际会占用的分区情况所构建而成的。
[0073]
结合上述对于运行状态分区表的描述,判断分区冲突条件的一个示例如下:当无人机飞行器处于上升状态时,假设通过步骤s110得到的当前分区为分区6;通过步骤s130得到的备选状态转换链表为优先级最高的“{1,3}”,指向粗稳悬停状态为备选状态转换链表。此时查找运行状态分区表得到粗稳悬停状态对应的运行分区为分区4、分区5和分区7,然后判断备选状态转换链表对应的运行分区是否包括所述当前分区,判断结果是不包括,此时分区冲突条件满足,备选状态转换链表对应的目标状态与发生异常的当前分区不存在分区冲突。
[0074]
分区冲突条件设置的原因在于,如果备选状态转换链表对应的目标状态所运行的分区仍然包括潜在的故障分区,如果跳转到该目标状态后,仍然会使得目标软件存在潜在的运行异常,因此需要将这种目标状态进行排除。
[0075]
在判断完分区冲突条件后,需要进一步判断三个判断条件中的跳转条件。跳转条
件的判断方式较为简单。前文在介绍状态转换链表sstatetransele时,其包括状态跳转条件transenable字段。其中,transenable为1时表示跳转条件成立,可以进行跳转;transenable为0时表示跳转条件不成立,无法进行跳转。通过读取该字段即可判断:在根据系统业务逻辑设计状态之间的跳转情形时,当前状态能否跳转到目标状态。
[0076]
如果trap处理函数在确定目标状态时同时通过了优先级条件、跳转条件和分区冲突条件等三个判断条件,那么该目标状态可以作为trap处理函数最终输出的目标状态,trap处理函数执行完毕。
[0077]
在步骤s140中,如果跳转条件和分区冲突条件中的任何一个没有得到满足,说明步骤s130中根据优先级条件确定的备选状态转换链表对应的目标状态无法成功跳转。此时需要将所述备选状态转换链表从所述状态转换链表集合中排除后,重新执行步骤s130,代表着需要在状态转换链表集合中选择优先级第二高的状态转换链表作为备选状态转换链表,再次执行步骤s140。上述过程循环执行,直至确定出满足三个判断条件、可以作为trap处理函数最终输出的目标状态,并将目标状态对应的函数入口地址作为trap处理函数的输出。
[0078]
若通过上述方法最终未能确定出合适的目标状态,可以直接将系统最小模式运行状态确定为目标状态,将目标状态对应的函数入口地址作为trap处理函数的输出,然后退出trap处理函数。
[0079]
综上所述,本发明实施例提供的面向sparc平台的嵌入式软件异常自主处理方法,整个过程可以分为三个阶段,如附图2示出的该方法的流程示意图,包括系统设计阶段210,用于为目标软件设计系统分区并生成地址分区表和运行状态分区表,根据目标软件的业务逻辑为目标软件设计状态转换关系表;trap处理阶段220,用于在检测到目标软件存在运行异常的情况下,将trap处理函数挂接到所述sparc平台中的trap处理入口地址;然后根据所述trap处理函数确定的目标状态对应的函数入口地址,确定所述目标软件的执行地址;trap处理函数执行阶段230,用于执行trap处理函数的具体功能,基于系统设计阶段所确定的各类目标软件相关信息,基于本发明实施例中的优先级条件、跳转条件和分区冲突条件等三个判断条件,最终输出目标软件需要跳转到的目标状态对应的函数入口地址。
[0080]
本发明实施例提供的面向sparc平台的嵌入式软件异常自主处理方法,首先有别于现在技术中需要通过人工协助进行异常处理的方式,通过trap处理的方式以及所设计的trap处理函数的具体功能实现了异常的自主处理,且时延较小;其次,通过判定异常所发生的地址空间,尽可能避免目标软件异常导致系统连续复位进而造成系统业务中断的情况的发生;最后,通过sparc平台的寄存器窗口机制以及trap处理函数为叶子函数的特性,保存了寄存器组和堆栈内容等运行时信息,也利于后续异常问题的分析和定位。
[0081]
基于上述实施例,附图3示出了本发明实施例提供的面向sparc平台的嵌入式软件异常自主处理装置的结构示意图,具体包括如下内容。
[0082]
函数调用模块300,用于将trap处理函数挂接到所述sparc平台中的trap处理入口地址;然后根据所述trap处理函数确定的目标状态对应的函数入口地址,确定所述目标软件的执行地址;其中,所述trap处理函数为叶子函数,包括如下功能模块来确定所述目标状态:当前分区确定模块310,用于读取所述sparc平台中寄存器窗口的i7寄存器值,根
据所述i7寄存器值以及地址分区表确定所述目标软件运行的当前分区;特殊分区判断模块320,用于判断所述当前分区是否为底层公共函数运行所在的分区,如果是,则将目标状态设置为系统最小模式运行状态;备选状态确定模块330,用于在所述目标软件对应的状态转换关系表中查找与所述目标软件的当前状态对应的状态转换链表集合;若所述状态转换链表集合为空,则将目标状态设置为系统最小模式运行状态;否则,根据所述状态转换链表集合的优先级字段,选取所述状态转换链表集合中优先级最高的状态转换链表作为备选状态转换链表;目标状态确定模块340,用于根据所述运行状态分区表,判断所述备选状态转换链表对应的运行分区是否包括所述当前分区;若不包括,且所述备选状态转换链表对应的跳转条件字段指示的跳转条件能够满足,则根据所述备选状态转换链表确定所述目标状态;否则,将所述备选状态转换链表从所述状态转换链表集合中排除,并从所述状态转换链表集合中重新确定备选状态转换链表。
[0083]
本发明实施例提供的面向sparc平台的嵌入式软件异常自主处理装置,首先有别于现在技术中需要通过人工协助进行异常处理的方式,通过trap处理的方式以及所设计的trap处理函数的具体功能实现了异常的自主处理,且时延较小;其次,通过判定异常所发生的地址空间,尽可能避免目标软件异常导致系统连续复位进而造成系统业务中断的情况的发生;最后,通过sparc平台的寄存器窗口机制以及trap处理函数为叶子函数的特性,保存了寄存器组和堆栈内容等运行时信息,也利于后续异常问题的分析和定位。
[0084]
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0085]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0086]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1