CN101923508B - 一种嵌入式系统中的异常处理方法及装置 - Google Patents
一种嵌入式系统中的异常处理方法及装置 Download PDFInfo
- Publication number
- CN101923508B CN101923508B CN200910203771XA CN200910203771A CN101923508B CN 101923508 B CN101923508 B CN 101923508B CN 200910203771X A CN200910203771X A CN 200910203771XA CN 200910203771 A CN200910203771 A CN 200910203771A CN 101923508 B CN101923508 B CN 101923508B
- Authority
- CN
- China
- Prior art keywords
- abnormality processing
- unusual
- processing function
- chained list
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/0715—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/0736—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in functional embedded systems, i.e. in a data processing system designed as a combination of hardware and software dedicated to performing a certain function
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0793—Remedial or corrective actions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种嵌入式系统中的异常处理方法,包括:运行应用程序时,为所运行的应用程序创建异常回调链表;应用程序向异常回调链表注册异常处理函数及异常处理函数与异常信息的对应关系;捕获到异常后,根据所捕获异常的异常信息,从异常处理函数与异常信息的对应关系中,查询与所捕获异常匹配的异常处理函数,在查询到匹配的异常处理函数后,调用并执行匹配的异常处理函数,进行异常处理。本发明采用异常回调链表结构,避免了异常处理函数对底层硬件的直接操作,提高了软件的可移植性和健壮性;本发明满足了当前嵌入式系统对异常处理的需求,具有扩展性好、系统运行可靠和应用范围广等特点。
Description
技术领域
本发明涉及软件容错技术领域,尤其涉及一种嵌入式系统中的异常处理方法及装置。
背景技术
随着后PC时代的到来,嵌入式系统已广泛应用于通讯、航空、国防和工业控制等可靠性要求较高的关键技术领域中,其复杂度及功能在日益增强。同时,为了高效使用资源,多应用多任务并行的软件设计方法也被普遍采用。这些变化不可避免地导致了系统中各类错误和异常的增多,当异常出现时,如果未进行有效地处理,很可能导致应用程序终止,系统崩溃,甚至引发灾难性事故,这是人们所不愿看到的。
异常处理作为嵌入式系统容错的常用机制,对保证嵌入式系统的可靠性具有十分重要的作用,但传统的异常处理机制已无法适应目前嵌入式系统的发展需要。
嵌入式系统中传统的异常处理采用类似中断响应的方式,如图1所示,当异常发生时,处理器会对异常现场进行简单保存,并通过查询异常向量表,跳转到对应的异常处理函数中进行处理。这种异常处理机制与处理器硬件架构紧密相关,需要使用大量的汇编代码编写异常处理程序,对寄存器进行操作。同时,对每一种需要捕获的异常,都要根据处理器架构对异常处理程序进行相应的修改,这导致异常处理程序的移植性和健壮性比较差。
缺少异常处理会降低系统的可靠性,而有缺陷或无效的异常处理也会导致严重的系统故障。随着嵌入式系统功能的不断增强,系统中往往运行着多个应用,每个应用又由若干个任务组成,任务是可以被操作系统调度并由处理器执行的能够竞争系统资源的最小单位,它可以独立运行以完成某一相对独立的功能。传统的异常处理机制只针对任务进行处理,如果异常处理程序本身有缺陷或无法处理出现的异常,系统将无法识别并予以解决,单个任务的异常很可能会扩散到所属的应用程序,进而影响整个系统的稳定运行。
中国专利申请公开说明书200610104447公开了一种计算机应用程序的监控及异常处理方法,提供了一种异常监控及处理方法,不仅能够对应用程序的工作状态进行监控,还可对程序内各个模块进行监控,并能对程序异常进行处理。中国专利申请公开说明书CN03157874公开了一种多任务系统的异常监控装置及其方法,提供了一种多任务系统的异常监控装置及方法,将异常监控的范围从单任务扩展到多任务,使得多任务系统中异常监控和自动复位到正常运行状态的功能得到实现。上述发明专利对异常监控的范围进行了细化及扩展,但异常处理策略单一,并没有解决异常处理过程中的二次异常,仍有可能异常扩散。二次异常是指异常处理程序在执行过程中自身发生异常。
美国专利申请公开说明书US2007022321公开的美国发明专利“Exception analysis methods and systems”,针对嵌入式系统提出了一种异常分析方法,对系统运行时出现的异常进行分类,但并未给出异常处理的策略。美国专利申请公开说明书US2005015579公开的美国发明专利“Handlingexceptions”,公开了一种嵌入式异常处理装置,该装置包括异常记录器、智能恢复代理和异常后分析工具。其中,异常记录器用于记录和异常相关的信息,智能恢复代理用于检测异常并决定采用适当的处理方式,异常后分析工具则负责识别出现异常的原因。然而,智能恢复代理无法判别异常处理方法本身的缺陷,无法解决异常处理方法无效和二次异常的问题。
综上所述,现有的异常处理方法已无法适应当前嵌入式系统的变化,必须引入新的异常处理机制,保证系统可靠稳定运行。
发明内容
本发明要解决的技术问题是提供一种嵌入式系统中的异常处理方法及装置,解决异常处理程序可移植性差,对于不同处理器架构需要进行相应修改的问题。
为解决上述技术问题,本发明的一种嵌入式系统中的异常处理方法,包括:
运行应用程序时,为所运行的应用程序创建异常回调链表;
应用程序向异常回调链表注册异常处理函数及异常处理函数与异常信息的对应关系;
捕获到异常后,根据所捕获异常的异常信息,从异常处理函数与异常信息的对应关系中,查询与所捕获异常匹配的异常处理函数,在查询到匹配的异常处理函数后,调用并执行匹配的异常处理函数,进行异常处理。
进一步地,为所运行的应用程序创建异常回调链表为创建一级或多级异常回调链表,若创建多级异常回调链表,则应用程序向每一级的异常回调链表分别注册异常处理函数及异常处理函数与异常信息的对应关系;查询与所捕获异常匹配的异常处理函数的过程为:逐级从异常处理函数与异常信息的对应关系中,查询与捕获的异常匹配的异常处理函数。
进一步地,创建多级异常回调链表时,异常回调链表包括:任务级异常回调链表和应用级异常回调链表,异常处理函数包括:任务级异常处理函数和应用级异常处理函数;
应用程序向每一级的异常回调链表分别注册异常处理函数及异常处理函数与异常信息的对应关系的过程包括:向任务级异常回调链表注册任务级异常处理函数及任务级异常处理函数与异常信息的对应关系,向应用级异常回调链表注册应用级异常处理函数及应用级异常处理函数与异常信息的对应关系。
进一步地,逐级从异常处理函数与异常信息的对应关系中,查询与捕获的异常匹配的异常处理函数的过程包括:
根据所捕获异常的异常信息,从任务级异常处理函数与异常信息的对应关系中,查询与该异常匹配的任务级异常处理函数;
若未查询出匹配的任务级异常处理函数或查询出的任务级异常处理函数未排除所捕获的异常,则根据所捕获异常的异常信息,从应用级异常处理函数与异常信息的对应关系中,查询与该异常匹配的应用级异常处理函数。
进一步地,系统中还配置有系统级异常处理策略,若在应用级异常处理函数与异常信息的对应关系中,未查询到与异常匹配的应用级异常处理函数或查询出的应用级异常处理函数未排除所捕获的异常,则执行所配置的系统级异常处理策略,进行异常处理。
进一步地,创建多级异常回调链表时,调用并执行匹配的异常处理函数,进行异常处理的过程中,若发生二次异常,则从发生异常的异常处理函数所属的异常回调链表中,查询是否还存在与捕获的异常匹配的异常处理函数,若不存在,则从上级的异常回调链表中查询是否存在与该异常匹配的异常处理函数,若从所述发生异常的异常处理函数所属的异常回调链表或所述上级的异常回调链表中查询到与捕获的异常匹配的异常处理函数,则调用并执行查询到的与捕获的异常匹配的异常处理函数。
进一步地,若发生异常的异常处理函数为任务级异常处理函数,则从该发生异常的任务级异常处理函数所属的任务级异常回调链表中,查询是否还存在与所捕获异常匹配的任务级异常处理函数,若不存在,则从应用级异常回调链表中查询是否存在与捕获的异常匹配的应用级异常处理函数,若不存在,则执行系统级异常处理策略。
进一步地,一种嵌入式系统中的异常处理装置,包括:异常控制模块、异常捕获模块和异常处理模块,其中:
异常控制模块,用于在运行应用程序时,为所运行的应用程序创建异常回调链表;
异常捕获模块,用于捕获异常,将所捕获异常的异常信息发送给异常处理模块;
异常处理模块,用于提供注册函数,该注册函数用于应用程序向异常回调链表注册异常处理函数及异常处理函数与异常信息的对应关系;
该异常处理模块,还用于在接收到异常信息后,从异常处理函数与异常信息的对应关系中,查询与该异常匹配的异常处理函数,在查询到匹配的异常处理函数后,调用并执行匹配的异常处理函数,进行异常处理。
进一步地,异常控制模块为所运行的应用程序创建一级或多级异常回调链表;
若创建多级异常回调链表,则应用程序向每一级的异常回调链表分别注册异常处理函数及异常处理函数与异常信息的对应关系;
异常处理模块查询与该异常匹配的异常处理函数的过程为:逐级从异常处理函数与异常信息的对应关系中,查询与捕获的异常匹配的异常处理函数。
进一步地,异常控制模块创建多级异常回调链表时,异常处理模块调用并执行匹配的异常处理函数,进行异常处理的过程中,若发生二次异常,则异常处理模块还用于从发生异常的异常处理函数所属的异常回调链表中,查询是否还存在与捕获的异常匹配的异常处理函数,若不存在,则从上级的异常回调链表中查询是否存在与该异常匹配的异常处理函数,若从所述发生异常的异常处理函数所属的异常回调链表或所述上级的异常回调链表中查询到与捕获的异常匹配的异常处理函数,则调用并执行查询到的与捕获的异常匹配的异常处理函数。
综上所述,本发明采用异常回调链表结构,避免了异常处理函数对底层硬件的直接操作,提高了软件的可移植性和健壮性;采用多级异常处理方法不仅可以处理任务级的异常,还可以将异常处理手段延伸至应用级和系统级,大大扩展了异常处理的范围,防止异常的扩散,为系统处理各类异常提供多层面的支持,本发明满足了当前嵌入式系统对异常处理的需求,具有扩展性好、系统运行可靠和应用范围广等特点,并且本发明不局限于任何具体的硬件平台架构和操作系统类型,具有较广泛的通用性。
附图说明
图1为传统嵌入式系统异常处理机制的模型图;
图2为本发明方法的流程图;
图3为本发明装置的架构图;
图4为本发明在Linux系统中实现的流程图。
具体实施方式
本发明为了方便应用开发,提供了一种开放式的多级处理方法,采用异常回调链表挂接异常处理函数,由于采用链表结构,因此可以支持程序中多层异常处理的嵌套。开发者可以根据应用情况在不同级别的异常回调链表中挂接自定义的异常处理函数,当出现异常时,挂接的异常处理函数会被调用,逐级完成异常处理功能,通过多级异常处理机制,满足现代嵌入式系统对异常处理的需求。
本实施例中,为应用开发提供了两个层次的异常回调链表:任务级异常回调链表和应用级异常回调链表。
运行任务时,为任务分配一个任务级异常回调链表,任务的异常处理函数挂接在其链表上,当任务出现异常时,从该任务的异常回调链表尾部开始搜索与所发生异常相匹配的异常处理函数,并执行搜索到的异常处理函数。退出任务时,注销任务级异常回调链表挂接的任务级异常处理函数,销毁该链表,为运行的新任务重新分配任务级异常回调链表。
应用级异常回调链表与应用程序对应,在运行应用程序时分配,挂接应用级异常处理函数,应用级异常处理函数对整个应用程序有效,当任务级异常处理函数无法处理异常时,从应用级异常回调链表尾部开始搜索与所发生异常相匹配的应用级异常处理函数,并执行搜索到的处理函数,退出应用程序时,注销应用级异常回调链表挂接的应用级异常处理函数,销毁链表。
下面结合附图对本发明的具体实施方式进行说明。
图2为本发明嵌入式系统中的异常处理方法,包括:
201:在异常处理模块中预设系统级异常处理策略,运行应用程序时,加载异常控制模块、异常捕获模块和异常处理模块,完成初始化过程;
系统级异常处理策略可以为:重启系统或关闭系统等。
202:异常控制模块为所运行的应用程序创建任务级异常回调链表和应用级异常回调链表;
203:应用程序通过调用异常处理模块的注册函数向任务级异常回调链表注册任务级异常处理函数及任务级异常处理函数与异常信息的对应关系,向应用级异常回调链表注册应用级异常处理函数及应用级异常处理函数与异常信息的对应关系;
所注册的任务级异常处理函数以节点形式依次在任务级异常回调链表尾部挂接;所注册的应用级异常处理函数以节点形式依次在应用级异常回调链表尾部挂接。
异常处理函数为编写在应用程序中,对应用程序运行中可能出现的问题进行异常处理的函数,一个任务可以对应一个或多个任务级异常处理函数,任务级异常处理函数只对本任务有效,一个应用可以对应一个或多个应用级异常处理函数,应用级异常处理函数对整个应用进程有效。
204:退出任务时,应用程序通过调用异常处理模块的注销函数,注销在任务级异常回调链表中注册的任务级异常处理函数,操作系统销毁该链表,异常控制模块为运行的新任务重新分配任务级异常回调链表,应用程序在任务级异常回调链表中为新任务注册异常处理函数;
205:异常捕获模块捕捉系统和应用程序的运行异常,捕捉到异常时,保存异常信息,将异常信息发送给异常处理模块;
异常捕获模块可以直接调用或向异常处理模块发信号。
对于不同的CPU体系,具体的异常编号和种类有所不同,但主要有以下几类:
(1)CPU运行异常,如浮点错误、除零错误、越权保护错误、非法指令和未定义指令等。
(2)内存管理异常,如数据写异常、页面异常、数据读异常、取指异常、未对齐异常和缓冲区异常。
206:异常处理模块接收到异常信息后,调用过滤函数遍历任务级异常处理函数与异常信息的对应关系,根据接收到的异常信息选择匹配的任务级异常处理函数,并调用并执行选择的任务级异常处理函数进行异常处理;
207:异常处理模块查询操作系统维护的异常表,判断异常是否排除,若未排除,则执行步骤208;否则,执行步骤215;
208:异常处理模块向异常控制模块发送任务级未排除异常通知消息,并将异常信息发送给异常控制模块;
209:异常控制模块根据异常信息判断是否对该异常进行升级处理,如果是,则执行步骤210;否则,丢弃任务级未排除异常通知消息;
若未查询到任务级异常处理函数,则异常处理模块同样请求异常控制模块判断是否对该异常进行升级处理。
异常控制模块可根据有无配置应用级异常回调链表、发生异常的任务的重要性或系统负载状态判断是否对异常进行升级处理,如果任务的重要性较低,其发生异常不会对系统运行产生影响或系统负载较大,则可以选择丢弃通知消息,不对异常进行升级处理。
210:异常控制模块通知异常处理模块将异常处理范围扩展到应用级,异常处理模块调用过滤函数遍历应用级异常处理函数与异常信息的对应关系,根据接收到的异常信息选择匹配的应用级异常处理函数,并执行选择的应用级异常处理函数;
211:异常处理模块查询异常表,判断异常是否排除,若未排除,则执行步骤212;否则,执行步骤215;
212:异常处理模块向异常控制模块发送应用级未排除异常通知消息,并将异常信息发送给异常控制模块;
213:异常控制模块根据异常信息判断是否对该异常进行升级处理,如果是,则执行步骤214;否则,丢弃应用级未排除异常通知消息;
214:异常控制模块通知异常处理模块将异常处理范围扩展到系统级,异常处理模块执行系统级异常处理策略;
215:退出应用程序时,通过注销函数注销应用级异常回调链表中注册的应用级异常处理函数。
需要说明的是,在各级异常处理函数执行中,若发生二次异常,异常捕获模块捕获到二次异常后,向异常处理模块发送二次异常通知消息,异常处理模块遍历出现异常的异常处理函数所挂接的异常回调链表,查找是否存在匹配的异常处理函数,如果不存在,则向异常控制模块转发二次异常通知消息,异常控制模块判断是否进行升级处理,如果是,则通知异常处理模块将异常处理范围升级。
例如,任务级异常处理函数在运行时出现异常,异常处理模块接收到异常捕获模块的二次异常通知后,未查找到替代的任务级异常处理函数,转发二次异常通知消息,若异常控制模块判定需要升级处理,则异常处理模块遍历应用级异常回调链表,查找匹配的应用级异常处理函数。
图3所示为本发明的嵌入式系统中的异常处理装置,包括:异常控制模块、异常捕获模块和异常处理模块,其中:
异常控制模块,用于在运行应用程序,加载异常控制模块、异常捕获模块和异常处理模块,完成初始化过程后,为所运行的应用程序创建任务级异常回调链表和应用级异常回调链表;在接收到任务级未排除异常通知消息后,根据异常信息判断是否对该异常进行升级处理,如果是,则通知异常处理模块将异常处理范围扩展到应用级;否则,丢弃任务级未排除异常通知消息;在接收到应用级未排除异常通知消息后,根据异常信息判断是否对该异常进行升级处理,如果是,通知异常处理模块将异常处理范围扩展到系统级;否则,丢弃应用级未排除异常通知消息。
该模块控制着整个处理流程,保证了异常处理流程能够有序地进行;同时,异常控制模块还可以调用运行监控等系统服务,进行错误信息的存储和告警操作。
异常捕获模块,用于捕捉系统和应用程序的运行异常,捕捉到异常时,保存异常信息,将异常信息发送给异常处理模块。
异常处理模块,用于为应用程序提供注册函数,向任务级异常回调链表注册任务级异常处理函数及任务级异常处理函数与异常信息的对应关系,向应用级异常回调链表注册应用级异常处理函数及应用级异常处理函数与异常信息的对应关系;为应用程序提供注销函数,退出任务时,应用程序通过调用注销函数,注销在任务级异常回调链表中注册的任务级异常处理函数,退出应用程序时,应用程序通过注销函数注销应用级异常回调链表中注册的应用级异常处理函数;
还用于在接收到异常信息后,调用过滤函数遍历任务级异常处理函数与异常信息的对应关系,根据接收到的异常信息选择匹配的任务级异常处理函数,并调用并执行选择的任务级异常处理函数进行异常处理;查询操作系统维护的异常表,判断异常是否排除,若未排除,则向异常控制模块发送任务级未排除异常通知消息,并将异常信息发送给异常控制模块;否则,退出应用程序时,注销应用级异常处理函数;接收到将异常处理范围扩展到应用级的通知后,调用过滤函数遍历应用级异常处理函数与异常信息的对应关系,根据接收到的异常信息选择匹配的应用级异常处理函数,并执行选择的应用级异常处理函数;执行应用级异常处理函数后,判断异常是否排除,若未排除,则向异常控制模块发送应用级未排除异常通知消息,并将异常信息发送给异常控制模块;否则,在退出应用程序时,注销应用级异常处理函数;在接收到将异常处理范围扩展到系统级的通知后,执行系统级异常处理策略。异常处理模块同时也支持用户自定义的处理手段。
应用示例:
下面以在Linux中实现本发明为例,对本发明的方法进行说明。为和标准Linux内核兼容,本示例基于标准的信号机制实现。
图4所示为本发明在Linux操作系统中实现异常处理的方法,包括:
401:在需要使用异常处理功能的应用程序运行时,加载并初始化异常处理装置,异常控制模块为应用程序构建任务级和应用级异常回调链表;
402:应用程序通过调用注册函数向异常回调链表注册异常处理函数及异常信息与异常处理函数的对应关系;
应用程序通过调用Usr_TrdExcHdlReg()函数注册任务级异常处理函数,当任务退出时,通过调用Usr_TrdExcHdlUnReg()函数注销任务级异常处理函数及对应关系,每个任务启动时,分配一个异常回调链表,任务级异常处理函数以节点形式挂接在链表尾部。
应用程序通过调用Usr_ProcExcHookReg()函数注册应用级异常处理函数及异常信息与应用级异常处理函数的对应关系,在退出应用程序时,通过调用Usr_ProcExcHookUnReg()函数注销应用级异常处理函数。
403:异常捕获模块对Linux系统及应用程序在运行中出现的异常进行捕捉,当捕捉到异常后,通过信号调用异常处理模块,将异常信息发送给异常处理模块;
本示例中异常捕获模块基于Linux异常捕获流程实现,只要CPU硬件能够捕获的异常,异常处理模块均可以捕获到。
404:异常处理模块接收到异常信息后,通过节点上的过滤函数从尾部节点开始遍历任务级异常回调链表,根据异常信息判断节点能否处理该异常,若不能,则回退链表,获取前一节点;若能,则调用该节点上挂接的异常处理函数;
405:若遍历任务级异常处理链表,未查找到匹配的异常处理函数,则将该异常处理升级为应用级异常处理,获取应用级异常回调链表gpf_UsrExcHook()予以处理;
406:如果在指定时间内,应用级处理未解决异常,则异常处理模块将异常处理升级到整个系统的异常处理;并根据用户在系统级异常处理函数Usr_SetExcExitAct()中设定的动作进行处理;
407:如果在异常处理过程中出现二次异常,异常处理模块首先遍历当前层次异常回调链表选择其他合适的异常处理函数,若无法解决异常,则将异常处理行为升级。
随着异常处理逐渐成为提升软件系统健壮性和可用性的关键因素,根据嵌入式系统异常处理的相关需求,结合主流操作系统异常处理机制的特点,本发明提出了一种结构化的异常处理装置,包含了三个主要功能模块:异常捕获模块、异常处理模块和异常控制模块,涵盖嵌入式系统异常处理的绝大多数特性,为系统处理各类异常提供多层面的支持。
Claims (8)
1.一种嵌入式系统中的异常处理方法,包括:
运行应用程序时,为所运行的应用程序创建异常回调链表;
所述应用程序向所述异常回调链表注册异常处理函数及所述异常处理函数与异常信息的对应关系;
捕获到异常后,根据所捕获异常的异常信息,从所述异常处理函数与异常信息的对应关系中,查询与所捕获异常匹配的异常处理函数,在查询到匹配的异常处理函数后,调用并执行所述匹配的异常处理函数,进行异常处理;
所述为所运行的应用程序创建异常回调链表为创建多级异常回调链表,所述应用程序向每一级的异常回调链表分别注册异常处理函数及所述异常处理函数与异常信息的对应关系;所述查询与所捕获异常匹配的异常处理函数的过程为:逐级从异常处理函数与异常信息的对应关系中,查询与捕获的异常匹配的异常处理函数。
2.如权利要求1所述的方法,其特征在于,
创建多级异常回调链表时,所述异常回调链表包括:任务级异常回调链表和应用级异常回调链表,所述异常处理函数包括:任务级异常处理函数和应用级异常处理函数;
所述应用程序向每一级的异常回调链表分别注册异常处理函数及所述异常处理函数与异常信息的对应关系的过程包括:向所述任务级异常回调链表注册所述任务级异常处理函数及任务级异常处理函数与异常信息的对应关系,向所述应用级异常回调链表注册应用级异常处理函数及应用级异常处理函数与异常信息的对应关系。
3.如权利要求2所述的方法,其特征在于,所述逐级从异常处理函数与异常信息的对应关系中,查询与捕获的异常匹配的异常处理函数的过程包括:
根据所捕获异常的异常信息,从所述任务级异常处理函数与异常信息的对应关系中,查询与该异常匹配的任务级异常处理函数;
若未查询出匹配的任务级异常处理函数或查询出的任务级异常处理函数未排除所捕获的异常,则根据所捕获异常的异常信息,从所述应用级异常处理函数与异常信息的对应关系中,查询与该异常匹配的应用级异常处理函数。
4.如权利要求3所述的方法,其特征在于,系统中还配置有系统级异常处理策略,若在所述应用级异常处理函数与异常信息的对应关系中,未查询到与所述异常匹配的应用级异常处理函数或查询出的应用级异常处理函数未排除所捕获的异常,则执行所配置的系统级异常处理策略,进行异常处理。
5.如权利要求4所述的方法,其特征在于,创建多级异常回调链表时,所述调用并执行所述匹配的异常处理函数,进行异常处理的过程中,若发生二次异常,则从发生异常的异常处理函数所属的异常回调链表中,查询是否还存在与捕获的异常匹配的异常处理函数,若不存在,则从上级的异常回调链表中查询是否存在与该异常匹配的异常处理函数,若从所述发生异常的异常处理函数所属的异常回调链表或所述上级的异常回调链表中查询到与捕获的异常匹配的异常处理函数,则调用并执行查询到的与捕获的异常匹配的异常处理函数。
6.如权利要求5所述的方法,其特征在于,若所述发生异常的异常处理函数为任务级异常处理函数,则从该发生异常的任务级异常处理函数所属的任务级异常回调链表中,查询是否还存在与所捕获异常匹配的任务级异常处理函数,若不存在,则从应用级异常回调链表中查询是否存在与捕获的异常匹配的应用级异常处理函数,若不存在,则执行所述系统级异常处理策略。
7.一种嵌入式系统中的异常处理装置,包括:异常控制模块、异常捕获模块和异常处理模块,其中:
所述异常控制模块,用于在运行应用程序时,为所运行的应用程序创建异常回调链表;
所述异常捕获模块,用于捕获异常,将所捕获异常的异常信息发送给所述异常处理模块;
所述异常处理模块,用于提供注册函数,该注册函数用于应用程序向所述异常回调链表注册异常处理函数及所述异常处理函数与异常信息的对应关系;
该异常处理模块,还用于在接收到异常信息后,从所述异常处理函数与异常信息的对应关系中,查询与该异常匹配的异常处理函数,在查询到匹配的异常处理函数后,调用并执行所述匹配的异常处理函数,进行异常处理;
所述异常控制模块为所运行的应用程序创建多级异常回调链表;
所述应用程序向每一级的异常回调链表分别注册异常处理函数及所述异常处理函数与异常信息的对应关系;
所述异常处理模块查询与该异常匹配的异常处理函数的过程为:逐级从异常处理函数与异常信息的对应关系中,查询与捕获的异常匹配的异常处理函数。
8.如权利要求7所述的装置,其特征在于,
所述异常控制模块创建多级异常回调链表时,所述异常处理模块调用并执行所述匹配的异常处理函数,进行异常处理的过程中,若发生二次异常,则所述异常处理模块还用于从发生异常的异常处理函数所属的异常回调链表中,查询是否还存在与捕获的异常匹配的异常处理函数,若不存在,则从上级的异常回调链表中查询是否存在与该异常匹配的异常处理函数,若从所述发生异常的异常处理函数所属的异常回调链表或所述上级的异常回调链表中查询到与捕获的异常匹配的异常处理函数,则调用并执行查询到的与捕获的异常匹配的异常处理函数。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910203771XA CN101923508B (zh) | 2009-06-12 | 2009-06-12 | 一种嵌入式系统中的异常处理方法及装置 |
PCT/CN2009/075806 WO2010142121A1 (zh) | 2009-06-12 | 2009-12-21 | 一种嵌入式系统中的异常处理方法及装置 |
BRPI0924874-9A BRPI0924874A2 (pt) | 2009-06-12 | 2009-12-21 | Método e dispositivo para tratamento de exceções no sistema incorporado |
US13/258,405 US8762785B2 (en) | 2009-06-12 | 2009-12-21 | Method and device for handling exceptions in embedded system |
EP09845730.2A EP2431876B1 (en) | 2009-06-12 | 2009-12-21 | Method and device for exception handling in embedded system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910203771XA CN101923508B (zh) | 2009-06-12 | 2009-06-12 | 一种嵌入式系统中的异常处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101923508A CN101923508A (zh) | 2010-12-22 |
CN101923508B true CN101923508B (zh) | 2012-12-19 |
Family
ID=43308383
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910203771XA Expired - Fee Related CN101923508B (zh) | 2009-06-12 | 2009-06-12 | 一种嵌入式系统中的异常处理方法及装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8762785B2 (zh) |
EP (1) | EP2431876B1 (zh) |
CN (1) | CN101923508B (zh) |
BR (1) | BRPI0924874A2 (zh) |
WO (1) | WO2010142121A1 (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9230258B2 (en) | 2010-04-01 | 2016-01-05 | International Business Machines Corporation | Space and time for entity resolution |
CN102833120B (zh) * | 2011-06-14 | 2017-06-13 | 中兴通讯股份有限公司 | 一种快速自动化测试中处理网管服务器异常的方法及系统 |
CN102306119A (zh) * | 2011-06-30 | 2012-01-04 | 北京新媒传信科技有限公司 | 捕获全局异常的系统及方法 |
US10387780B2 (en) | 2012-08-14 | 2019-08-20 | International Business Machines Corporation | Context accumulation based on properties of entity features |
US9239743B2 (en) * | 2012-10-11 | 2016-01-19 | Ittiam Systems (P) Ltd. | Method and architecture for exception and event management in an embedded software system |
US9110803B2 (en) * | 2012-10-19 | 2015-08-18 | Verizon Patent And Licensing Inc. | Solvable exceptions |
CN104423994B (zh) * | 2013-09-03 | 2018-05-11 | 华为技术有限公司 | 一种代码生成方法、编译器、调度方法、装置及调度系统 |
US9270451B2 (en) | 2013-10-03 | 2016-02-23 | Globalfoundries Inc. | Privacy enhanced spatial analytics |
CN104217163B (zh) * | 2014-09-10 | 2017-04-26 | 珠海市君天电子科技有限公司 | 一种检测结构化异常处理攻击的方法及装置 |
US10122805B2 (en) | 2015-06-30 | 2018-11-06 | International Business Machines Corporation | Identification of collaborating and gathering entities |
CN106610890B (zh) * | 2015-10-21 | 2019-08-20 | 北京国双科技有限公司 | 异常处理方法和装置 |
CN105446822B (zh) * | 2015-11-13 | 2019-06-18 | 上海斐讯数据通信技术有限公司 | 基于Linux的软件异常处理系统及方法 |
CN106886488A (zh) * | 2015-12-16 | 2017-06-23 | 阿里巴巴集团控股有限公司 | 异常处理方法及装置 |
CN106055419A (zh) * | 2016-03-31 | 2016-10-26 | 惠州市德赛西威汽车电子股份有限公司 | 一种车载嵌入式系统的异常处理装置及方法 |
US20170371627A1 (en) * | 2016-06-28 | 2017-12-28 | International Business Machines Corporation | Object-oriented container class callbacks |
CA3225845A1 (en) * | 2017-03-25 | 2018-10-04 | Gen-Probe Incorporated | Methods and compositions to detect combinations of viral nucleic acids |
CN110287051A (zh) * | 2019-06-21 | 2019-09-27 | 四川盛趣时代网络科技有限公司 | 基于windows异常处理机制的主动防护方法 |
CN111026659B (zh) * | 2019-12-05 | 2023-04-21 | 南开大学 | 一种基于嵌入表示的移动应用回调分析研究方法 |
US11720067B2 (en) | 2020-03-30 | 2023-08-08 | General Electric Company | Method for handling a simultaneous failure of all channels of a multi-channel engine controller for a gas turbine engine |
CN111949009B (zh) * | 2020-08-14 | 2022-04-08 | 深圳市中物互联技术发展有限公司 | 嵌入式控制器自诊断自维护方法、装置及存储介质 |
CN112527556A (zh) * | 2020-12-01 | 2021-03-19 | 上海施能电器设备有限公司 | 一种充电机故障管理方法 |
CN113778870B (zh) * | 2021-09-07 | 2024-09-17 | 杭州雾联科技有限公司 | 一种蓝屏回调方法、装置、设备及计算机可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452420A (zh) * | 2008-12-30 | 2009-06-10 | 中兴通讯股份有限公司 | 一种嵌入式软件异常监控和处理装置及其方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5305455A (en) * | 1990-12-21 | 1994-04-19 | International Business Machines Corp. | Per thread exception management for multitasking multithreaded operating system |
CN1275155C (zh) | 2002-08-24 | 2006-09-13 | 中兴通讯股份有限公司 | 嵌入式操作系统中异常故障定位方法 |
US7634778B2 (en) * | 2003-06-26 | 2009-12-15 | Microsoft Corporation | Operating system managing a linked list of callback dynamic function tables for acquiring exception handling information from a runtime environment |
US20050015579A1 (en) | 2003-07-15 | 2005-01-20 | Rajeev Grover | Handling exceptions |
CN100359481C (zh) | 2003-09-13 | 2008-01-02 | 华为技术有限公司 | 多任务系统的异常监控装置及其方法 |
US20070022321A1 (en) | 2005-07-07 | 2007-01-25 | Mediatek Incorporation | Exception analysis methods and systems |
CN100389404C (zh) | 2006-08-01 | 2008-05-21 | 西安西电捷通无线网络通信有限公司 | 一种计算机应用程序的监控及异常处理方法 |
CN101192192B (zh) * | 2006-11-21 | 2010-08-18 | 华为技术有限公司 | 用于实时操作系统的任务异常诊断方法及系统 |
US8689215B2 (en) * | 2006-12-19 | 2014-04-01 | Intel Corporation | Structured exception handling for application-managed thread units |
WO2008122746A1 (en) * | 2007-04-10 | 2008-10-16 | Cambridge Consultants Limited | Data processing apparatus |
-
2009
- 2009-06-12 CN CN200910203771XA patent/CN101923508B/zh not_active Expired - Fee Related
- 2009-12-21 EP EP09845730.2A patent/EP2431876B1/en active Active
- 2009-12-21 US US13/258,405 patent/US8762785B2/en active Active
- 2009-12-21 WO PCT/CN2009/075806 patent/WO2010142121A1/zh active Application Filing
- 2009-12-21 BR BRPI0924874-9A patent/BRPI0924874A2/pt not_active Application Discontinuation
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452420A (zh) * | 2008-12-30 | 2009-06-10 | 中兴通讯股份有限公司 | 一种嵌入式软件异常监控和处理装置及其方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2010142121A1 (zh) | 2010-12-16 |
US8762785B2 (en) | 2014-06-24 |
CN101923508A (zh) | 2010-12-22 |
EP2431876A1 (en) | 2012-03-21 |
BRPI0924874A2 (pt) | 2015-06-30 |
US20120089859A1 (en) | 2012-04-12 |
EP2431876B1 (en) | 2020-07-22 |
EP2431876A4 (en) | 2017-04-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101923508B (zh) | 一种嵌入式系统中的异常处理方法及装置 | |
CN102141947B (zh) | 一种对采用嵌入式操作系统的计算机应用系统中异常任务的处理方法及系统 | |
WO2020211222A1 (zh) | 基于数据服务平台提供微服务的方法、装置、存储介质 | |
JP5128944B2 (ja) | コンピュータアプリケーションにおけるデータ損失を最小限にする方法およびシステム | |
CN104461876B (zh) | 一种基于运行快照序列的并行程序重现调试方法 | |
US11321078B2 (en) | Continuous in-place software updates with fault isolation and resiliency | |
US8589727B1 (en) | Methods and apparatus for providing continuous availability of applications | |
US20160055066A1 (en) | Fault tolerance for complex distributed computing operations | |
US20080295113A1 (en) | Managing memory resident objects to optimize a runtime environment | |
CN110225078B (zh) | 一种应用服务更新方法、系统及终端设备 | |
CN109471711B (zh) | 一种任务处理的方法及装置 | |
CN102999343A (zh) | 禁止启动项目自启动的方法和装置 | |
CN105988798B (zh) | 补丁处理方法及装置 | |
CN110413432B (zh) | 一种信息处理方法、电子设备及存储介质 | |
CN104077220A (zh) | Mips架构操作系统内核的调试方法和装置 | |
Kim et al. | WakeScope: Runtime WakeLock anomaly management scheme for Android platform | |
CN107239313A (zh) | Spring应用服务的升级方法和存储介质 | |
US10740166B2 (en) | Thread based dynamic data collection | |
CN103019706A (zh) | 针对启动项目的处理方法和装置 | |
CN106997313B (zh) | 一种应用程序的信号处理方法、系统及终端设备 | |
US7877629B2 (en) | Facilitating handling of exceptions in a program implementing a M-on-N threading model | |
US20090019273A1 (en) | Exception-based error handling in an array-based language | |
CN100419689C (zh) | 中断处理方法及装置 | |
US8359602B2 (en) | Method and system for task switching with inline execution | |
US8695022B2 (en) | Context for replacement functions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121219 Termination date: 20170612 |
|
CF01 | Termination of patent right due to non-payment of annual fee |