CN103294544B - 嵌入式***及其中断处理方法与装置 - Google Patents
嵌入式***及其中断处理方法与装置 Download PDFInfo
- Publication number
- CN103294544B CN103294544B CN201210046907.2A CN201210046907A CN103294544B CN 103294544 B CN103294544 B CN 103294544B CN 201210046907 A CN201210046907 A CN 201210046907A CN 103294544 B CN103294544 B CN 103294544B
- Authority
- CN
- China
- Prior art keywords
- interruption
- interrupt
- service routine
- low level
- high level
- 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.)
- Active
Links
Landscapes
- Bus Control (AREA)
Abstract
嵌入式***及其中断处理方法与装置,所述中断处理方法包括:***启动后,基于设备中断事件注册低级中断服务例程以及高级中断服务例程;当接收到中断信号后,根据识别出中断的类型,跳转至相应的低级中断服务例程进行中断处理;基于所述低级中断服务例程中断处理后的返回结果,判断出未处理完所述中断时,将所述中断的待处理信息存入缓冲区,并由所述低级中断服务例程激活相应的高级中断服务例程,然后切换上下文以返回***去调度;被激活的高级中断服务例程在***的调度下,从所述缓存区中读取所述待处理信息后,执行上层应用注册进来的回调函数以实现对所述中断的处理。本方案能提高中断处理的效率,降低中断延迟,改善***运行的整体性能。
Description
技术领域
本发明涉及嵌入式***领域,特别涉及一种嵌入式***及其中断处理方法与装置。
背景技术
随着嵌入式技术的迅速发展,嵌入式实时操作***(embedded RTOS,embeddedReal-time operating system)正越来越广泛地应用在工业自动化、电子通讯、家电等各个领域。同时,嵌入式操作***运行的平台也越来越多样,对各种中断源的处理也越来越复杂。在这种情况下,为了保证嵌入式平台在处理中断过程中的***稳定性、实时性以及提高中断处理的效率,原来的中断处理技术也随之不断发展。
目前用于嵌入式实时操作***中的中断处理方法主要包括以下流程:
(1)硬件设备产生中断信号,并上报给中断控制器,由中断控制器进行中断优先级判断以及屏蔽控制后,再产生中断触发信号上报给中央处理器(CPU,Central ProcessingUnit);
(2)CPU再根据相应的中断向量查找中断向量表,从而跳转至中断服务例程(ISR,Interrupt Service Routine),开始执行用户设定的中断响应代码进行中断处理,并获取中断的相关信息;
(3)在底层的中断服务例程中调用上层注册的回调函数,进行上层中断业务的处理或业务的分发,在底层中断上下文中执行完上层的代码后中断返回。
由于中断面临复杂的场景应用,既有快速与慢速的各种外部设备的中断,又有数据量很少和很多的中断,而CPU的计算能力是有限的,如何充分的利用计算资源,合理的分配这些资源,就需要调整中断的处理策略。
在中断驱动的嵌入式***中,对中断延迟时间要求很苛刻,尤其在嵌入式消费电子设计中,这是一个热点的研究探讨方向。对于消费电子等应用领域,根据不同的芯片与软件,***的运行速度有明显差别。在同等的硬件环境下,针对外部输入给芯片的信号,如何使得这些应用处理器有更良好的反应速度,除了搭载适当且优良的操作***外,还需要有一套完备并且可适应性强、修改简单的中断反应机制,以提高中断处理的效率,降低中断延迟,进而改善***运行的整体性能。
相关技术还可参考公开号为US2010077120A1的美国专利申请,该专利申请公开了一种嵌入式***和中断处理方法。
发明内容
本发明要解决的问题是提供一种嵌入式***及其中断处理方法与装置,以提高中断处理的效率,降低中断延迟,从而改善***运行的整体性能。
为解决上述问题,本发明技术方案提供一种嵌入式***的中断处理方法,包括:
***启动后,基于设备中断事件注册低级中断服务例程以及高级中断服务例程;
当接收到中断信号后,根据识别出中断的类型,跳转至相应的低级中断服务例程进行中断处理;
基于所述低级中断服务例程中断处理后的返回结果,判断出未处理完所述中断时,将所述中断的待处理信息存入缓冲区,并由所述低级中断服务例程激活相应的高级中断服务例程,然后切换上下文以返回***去调度;
被激活的高级中断服务例程在***的调度下,从所述缓存区中读取所述待处理信息后,执行上层应用注册进来的回调函数以实现对所述中断的处理。
可选的,所述嵌入式***的中断处理方法还包括:在基于设备中断事件注册低级中断服务例程以及高级中断服务例程前,配置低级中断服务例程的数量和优先级、高级中断服务例程的数量和优先级以及低级中断服务例程的默认处理函数。
可选的,所述跳转至相应的低级中断服务例程进行中断处理包括:按低级中断服务例程的优先级由高至低的顺序遍历以查询到适于处理所述中断的低级中断服务例程,低级中断服务例程的优先级与中断优先级相对应。
可选的,所述低级中断服务例程的优先级以固定的顺序存储于静态数组中。
可选的,***按高级中断服务例程的优先级由高至低的顺序,调度所述高级中断服务例程处理所述中断。
可选的,所述低级中断服务例程激活相应的高级中断服务例程包括:所述低级中断服务例程将所述回调函数添加至适于处理所述中断的高级中断服务例程的待处理中断链表中并发送信号量至***的任务链表,所述信号量对应于所述任务链表中的所述高级中断服务例程,***是基于所述信号量调度所述高级中断服务例程的。
可选的,所述回调函数的执行是在所述高级中断服务例程遍历所述待处理中断链表时实现的。
可选的,所述嵌入式***的中断处理方法还包括:识别出中断的类型后,跳转至相应的低级中断服务例程进行中断处理之前,确定所述中断中需要由所述低级中断服务例程进行处理的子任务。
可选的,所述嵌入式***的中断处理方法还包括:从读取的所述待处理信息中确定所述中断中需要由所述高级中断服务例程进行处理的子任务。
可选的,所述中断为属于一个总中断的其中一个子中断,所述识别出中断的类型包括识别出所述子中断所属的总中断。
可选的,所述嵌入式***的中断处理方法还包括:将所述待处理信息存入所述缓冲区后,屏蔽所述子中断直至由所述高级中断服务例程完成对所述子中断的处理。
可选的,所述缓冲区的存储空间大小按照表示所有中断的数据量特征来确定。
可选的,所述高级中断服务例程是以***任务的方式模拟创建的。
为解决上述问题,本发明技术方案还提供一种嵌入式***的中断处理装置,包括:
注册单元,适于在***启动后,基于设备中断事件注册低级中断服务例程以及高级中断服务例程;
识别单元,适于当接收到中断信号后,识别出中断的类型;
跳转单元,适于根据识别出中断的类型,跳转至相应的低级中断服务例程进行中断处理;
判断单元,适于基于所述低级中断服务例程中断处理后的返回结果,判断是否处理完所述中断;
缓存单元,适于在判断出未处理完所述中断时,将所述中断的待处理信息存入缓冲区;
切换单元,适于在所述低级中断服务例程激活相应的高级中断服务例程后切换上下文以返回***去调度;
所述低级中断服务例程,适于处理所述中断,并在未处理完所述中断时激活相应的高级中断服务例程;被激活的高级中断服务例程,适于在***的调度下,从所述缓存区中读取所述待处理信息后,执行上层应用注册进来的回调函数以实现对所述中断的处理。
为解决上述问题,本发明技术方案还提供一种包括上述中断处理装置的嵌入式***。
与现有技术相比,本发明技术方案具有以下优点:
通过基于设备中断事件预先注册低级中断服务例程以及高级中断服务例程,在接收到中断信号并识别出中断类型后,先跳转至相应的低级中断服务例程进行中断处理,在判断出未处理完所述中断时,再由所述低级中断服务例程激活相应的高级中断服务例程对所述中断进行处理,如此分层的中断响应机制将中断处理的快速处理部分与慢速处理部分分离开,确保***能够及时响应和处理所发生的紧迫中断任务,增加***的中断响应速度;又通过在分层中断响应机制中加入数据缓冲机制,将所述低级中断服务例程未处理完的所述中断的待处理信息存入缓冲区,使所述高级中断服务例程在***调度下,从所述缓存区中读取所述待处理信息后处理完所述中断,从而实现低级中断服务例程与高级中断服务例程之间的高速通讯。引入所述缓冲机制的分层中断响应机制,能够有效提高中断处理的效率,降低中断延迟,从而改善***运行的整体性能。
通过按固定的低级中断服务例程的优先级顺序遍历以实现基于高效优先级的跳转,能够快速地查询到适于处理中断的低级中断服务例程,进一步加快中断响应速度的同时也降低了***复杂度;对注册的各高级中断服务例程配置多级优先级,由激活的高级中断服务例程以优先级顺序对接收到的中断依次进行处理,以便适应不同中断任务的紧急度,进一步提高中断处理的效率。
在上述分层中断响应机制的基础上,通过实现低级中断服务例程、高级中断服务例程的数量和优先级的灵活、便捷的配置,使得自适应性强。
以操作***任务的方式模拟创建高级中断服务例程,不需要依靠传统操作***本身实现类似高级中断服务例程的***组件,即可实现高级中断服务例程的功能,从而能够更好地满足嵌入式***的中断特征。
附图说明
图1是本发明实施方式提供的嵌入式***的中断处理方法的流程示意图;
图2是本发明实施例的嵌入式***的中断处理过程示意图;
图3是本发明实施例的嵌入式***的中断处理方法与现有技术的中断响应性能对比的示意图;
图4是本发明实施例提供的嵌入式***的中断处理装置的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。在以下描述中阐述了具体细节以便于充分理解本发明。但是本发明能够以多种不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广。因此本发明不受下面公开的具体实施方式的限制。
图1是本发明实施方式提供的嵌入式***的中断处理方法的流程示意图。如图1所示,所述嵌入式***的中断处理方法包括:
步骤S101,***启动后,基于设备中断事件注册低级中断服务例程以及高级中断服务例程;
步骤S102,当接收到中断信号后,根据识别出中断的类型,跳转至相应的低级中断服务例程进行中断处理;
步骤S103,基于所述低级中断服务例程中断处理后的返回结果,判断出未处理完所述中断时,将所述中断的待处理信息存入缓冲区,并由所述低级中断服务例程激活相应的高级中断服务例程,然后切换上下文以返回***去调度;
步骤S104,被激活的高级中断服务例程在***的调度下,从所述缓存区中读取所述待处理信息后,执行上层应用注册进来的回调函数以实现对所述中断的处理。
下面以具体实施例对上述嵌入式***的中断处理方法作详细说明。
本实施例中,所述嵌入式***为嵌入式实时操作***,具体以RTOS ThreadX为例。ThreadX是优秀的硬实时操作***,适用于深嵌入式应用中,具有规模小、实时性强、可靠性高、无产品版权费、易于使用等特点,并且支持大量的处理器和***级芯片(SoC,System onChip),包括ARM、PowerPC、SH4、MIPS、ADI DSP、TI DPS、Nios II等,因此广泛应用于消费电子(例如手机、平板电脑等)、汽车电子、工业自动化、网络解决方案、军事与航空航天等领域中。在其他实施例中,所述嵌入式***也可以为其他的嵌入式操作***。
首先,需要进行初始化的过程,即执行步骤S101,***启动后,基于设备中断事件注册低级中断服务例程以及高级中断服务例程。
本领域技术人员知晓,嵌入式操作***的一个基本功能就是对硬件资源进行抽像,向应用提供便捷易用的接口。这些硬件资源中,重要的一种是中断机制。中断机制在嵌入式***中用于响应内/外部事件,由中断服务例程(ISR,Interrupt Server Routine)进行处理。不同的处理器提供了不同类型的中断,包括硬件中断、软中断以及一些异常。嵌入式CPU一般包含了多类中断,每类中断对应于一个或多个中断源,即可能有多个中断由同一中断服务例程进行处理。在内存(具体可以为Flash、SDRAM等存储介质)中存有中断向量表,当中断发生时,程序计数器从该中断向量表中取指后跳转至相应的中断服务例程中进行事件的处理。
为使***(指的是操作***)能及时响应并处理发生的所有中断,***根据引起中断事件的重要性和紧迫程度,硬件将中断源分为若干个级别,称作中断优先级。多级中断的处理原则为:当多级中断同时发生时,CPU按照由高到低的顺序响应。高级中断可以打断低级中断处理程序的运行,转而执行高级中断处理程序。当同级中断同时到时,则按位响应。当多级中断同时发生时,CPU按照由高到低的顺序响应。引入多级中断是因为:为使***能及时的响应和处理所发生的紧迫中断,同时又不至于发生中断信号丢失,有的CPU在设计中断***硬件时根据各种中断的轻重在线路上做出安排,从而使中断响应能有一个优先次序。在常见的一些CPU的体系结构中,CPU都已经粗略的区分了几类紧急程度不一样的中断,如ARM公司的CPU,就分成了快速中断请求(FIQ,Fast Interrupt Request)与普通的慢速中断请求(IRQ,Interrupt Request)。快速中断由于CPU内部的FIQ备份寄存器较多,使得切换上下文更快。然而,如果CPU外部的SoC集成上述中断机制的硬件控制逻辑,会使硬件成本增加,因此,这种CPU级别的优先级速度区分方法还不能满足用户的需求。
本实施例中,提供了一套完备并且可适应性强、修改简单的中断响应机制。首先将进行中断处理的中断服务例程分为两层,分别是低级中断服务例程(LISR,low levelinterrupt server routine)和高级中断服务例程(HISR,high level interrupt serverroutine),以便适应不同任务的紧急度,增加***的响应速度。其中,LISR处理较为紧急的中断任务(简称为中断),只执行少量的必要的工作,以便尽快地响应高优先级的中断;大部分工作在HISR中完成,HISR由LISR激活,处理延后的中断。在具体实施时,即把中断发生后来处理相应任务的软件代码分为2个部分。一个是运行在中断模式(通常称为IRQ模式)下的LISR,适合处理紧急的中断任务,并且通常会立刻返回,保证***整个IRQ、FIQ的反应快速;一个是运行在超级用户模式(通常称为SVC模式)下的HISR,具体是以操作***任务(task)的方式模拟创建出的高优先级的几个任务,这几个任务也有自己的相应优先级,通过操作***的调度来实现优先级的关系,往往LISR把需要立刻处理的任务处理完然后就通知(可以通过信号量(Semaphore)、事件(event)等操作***原语)HISR处理,HISR接着在SVC模式下处理相对不太紧急的任务,使得***的分层相应级别更多。对于上述分层中断响应机制的具体实施将在下面详细描述。
需要说明的是,虽然现有技术中,有些开源的操作***(例如Linux)中也提出了中断分层机制,已存在LISR和HISR的概念,但具体操作复杂,整个***较为庞大,不适合在RTOS上应用。而本发明的技术方案,虽然使用了LISR和HISR的概念,但其针对嵌入式***的实际特点和需求,提供了不同与现有技术的中断处理的实现方式,以满足嵌入式***的中断特征,既高速又简单可靠可配置。
本实施例中,在***启动后,先会基于各个设备中断事件,完成低级中断服务例程以及高级中断服务例程的注册,具体内容主要包括:定义出处理各类中断对应的低级中断服务例程以及高级中断服务例程,即哪一类或哪几类中断会由对应哪个LISR进行中断处理,并且在该LISR未处理完的情况下,由该LISR激活对应的哪个HISR继续处理等。
本实施例中,在基于设备中断事件注册低级中断服务例程以及高级中断服务例程前,会预先配置低级中断服务例程的数量和优先级、高级中断服务例程的数量和优先级以及低级中断服务例程的默认处理函数。其中,通过配置LISR的数量和每个LISR的静态优先级,可以实现按LISR的优先级遍历,遍历最少次数,由此减少***复杂性,在遍历和获取优先级的时候直接从静态数组中取数据,提高了***性能;HISR的数量的多少决定了各HISR之间的优先级关系;配置LISR的默认处理函数的目的是:当某个中断没有注册处理函数的时候,又因为硬件等原因被错误触发,这样就会在LISR中调用该默认处理函数,可以有效地处理这个被错误触发的中断。如此,通过实现对LISR、HISR的数量和优先级的灵活、便捷的配置,使得上述分层中断响应机制的自适应性较强,用户能够根据实际需求进行相应的配置。
图2是本发明实施例的嵌入式***的中断处理过程示意图。下面结合图1和图2对本实施例中的嵌入式***的中断处理过程进行详细说明。
执行步骤S102,当接收到中断信号后,根据识别出中断的类型,跳转至相应的低级中断服务例程进行中断处理。步骤S102对应于图2中的步骤S201和步骤S202,发生中断并识别出中断类型后,跳转至相应的LISR进行中断处理。
本实施例中,步骤S102中所述跳转至相应的低级中断服务例程进行中断处理包括:按低级中断服务例程的优先级由高至低的顺序遍历以查询到适于处理所述中断的低级中断服务例程,低级中断服务例程的优先级与中断优先级相对应。具体实施时,所述低级中断服务例程的优先级通常即为中断优先级,以固定的顺序存储于静态数组中。
本实施例中,中断优先级的数据结构具体定义如下:
若将中断优先级数组表示为ISR_ARRAY,则需要定义一个类型为PRI_INDEX_GET_STATUS_T的ISR_ARRAY数组。比如***有32个中断,那么就需要定义一个类型为PRI_INDEX-GET_STATUS_T的ISR_ARRAY数组,大小为32,并且一般需要配置intLogicNum、IrqRegValueIndex、isrDefaultFunc几个域。
举例来说,当***中需要DSP、USB、SDIO三个外部中断定义时,可以使用该结构体定义如下数组,定义的顺序为最高优先级到最低优先级的顺序,当发生中断时,采用本实施例提供的遍历方法依次用状态寄存器数组的值和如下定义的相应比特位(bits)来确定是否有中断发生,应用程序可以通过接口注册Handlefunc,当没有注册时,会调用isrDefaultFunc。
为了使软件能够调整中断优先级,在中断服务机制中,设置了优先级对照表,表中每一项对应一个中断标志,每项的顺序就是各个中断的优先级顺序。当中断来了之后,首先会读取所有待读取的中断状态值,ISR_Handler程序依据优先级对照表来遍历(具体的遍历次序是按照配置的该中断的优先级来遍历的,对于ISR_ARRAY数组中,每个成员的优先级可以不一样),根据描述的位来看是否发生了中断,如果发生了中断则跳转到该中断源对应的中断处理程序(相应的LISR进行中断处理),响应此中断,否则,则继续遍历。
上述描述可以通过如下代码实现:
其中,UnitRegValue存储了一些状态寄存器的值;pri是优先级(priority)的意思。
需要说明的是,在注册/取消注册某个中断的时候(***启动后),需要根据中断优先级数组,重新对ISR_ARRAY做赋值操作,实现代码如下:
因为LISR是CPU在IRQ模式下运行的,按中断优先级查询适于处理中断的LISR体现在:当CPU发现来了中断后,需要查找是哪个中断来了,中断优先级体现在先查找哪一个,找到之后就跳转到相应的LISR进行中断处理,处理完后不会管是否还有未处理的中断,LISR会立刻退出(这样做的原因是大部分情况CPU同时只有一个中断,当然,如果有多个中断来了,则CPU会再次进入IRQ模式,再次进行上述流程)。
由于现有技术通常采用的中断优先级遍历方法为动态优先级遍历或根据链表方式遍历,而动态优先级遍历或者根据链表方式遍历速度比本实施例所述的静态优先级遍历方法慢,因此,在本实施例中,由高至低的中断优先级的顺序是固定不变的(静态优先级),按照这样的中断优先级顺序进行遍历(即按LISR的优先级顺序进行遍历),这样可以减少动态排序的开销,降低***的复杂性。
步骤S103,基于所述低级中断服务例程中断处理后的返回结果,判断出未处理完所述中断时,将所述中断的待处理信息存入缓冲区,并由所述低级中断服务例程激活相应的高级中断服务例程,然后切换上下文以返回***去调度。
步骤S103对应于图2中的步骤S203至步骤S207。
参阅图2,当跳转至相应的LISR对所述中断进行处理后,执行步骤S203,基于LISR中断处理后的返回结果,判断是否处理完所述中断,是则转到步骤S206,切换上下文(context),并返回***去调度(步骤S207),否则执行步骤S204,LISR将所述中断的待处理信息存入缓冲区。
LISR对所述中断进行处理时,若该中断属于很紧急的任务,则会由LISR将该中断处理完(具体可通过调用上层应用注册进该LISR的回调函数实现),若该中断属于相对不太紧急的任务,则由该LISR激活相应的HISR处理该中断。某个中断任务中还可能包括多个子任务,这些子任务有些属于较为紧急的,有些相对不太紧急,则可由LISR将较为紧急的子任务处理完(该中断任务仍处于未处理完的状态),而将相对不太紧急的子任务留给相应激活的HISR处理,子任务的紧急与否则是根据实际上层应用的需求而定。本实施例中,将至少一个中断中,LISR需要由HISR进行处理的子任务(可能为所有的子任务,即该中断任务)的相关信息称为待处理信息,所述待处理信息存储于一缓冲区中,HISR被激活后,在***的调度下,从所述缓冲区中读取所述待处理信息,根据所述待处理信息将未处理的子任务处理完。因此,本实施例中,所述嵌入式***的中断处理方法还包括:识别出中断的类型后,跳转至相应的低级中断服务例程进行中断处理之前,确定所述中断中需要由所述低级中断服务例程进行处理的子任务。举例来说,若某个中断中,包括显示和音频输出两项子任务,其中,对于上层应用来说,若显示是属于紧急的子任务,音频输出属于相对不太紧急的子任务,则由LISR先实现显示这一子任务,然后激活相应的HISR,由该HISR实现音频输出这一子任务。
本实施例中,LISR对HISR的激活是通过向***调度发送信号量的方式实现的,即执行步骤S205,LISR向适于处理所述中断的HISR的待处理中断链表中添加相应的回调函数并发送信号量至***的任务链表。需要说明的是,步骤S204和步骤S205的执行先后顺序并没有限制。
本实施例中,所述高级中断服务例程是以操作***任务(task)的方式模拟创建的,用于达到延后处理中断的目的。因此,HISR类似于任务(在RTOS上就是一个优先级较高的任务),有自己的堆栈,但它的优先级通常比一切正常任务的优先级高(即***一般总是首先调度HISR运行)。HISR是在CPU的SVC模式下运行的,由于HISR是以操作***的任务实现,那么HISR的数量就是选择了几个任务的数量,该数量可以任意设定,比如说***共有32个中断,那么可以选择创建32个HISR。但一般是选择创建3个HISR,其中,一个最高优先级,一个中优先级,一个低优先级。由于任务是由操作***来按照优先级调用的,那么HISR也可以区分优先级。举例来说,当***总共有32个中断的情况下,只有3个HISR的时候,那么必然有部分中断共享一个HISR,至于谁和谁共享最高优先级,则按照应用场景来划分,比如说4个中断公用一个最高优先级的HISR。若HISR具有3层优先级,则可以将HISR的优先级分为0到2,其中0的优先级别最高,2的优先级别最低。HISR的状态只有两种:激活状态和静止(睡眠)状态。LISR按需要激活相应的HISR,然后HISR进入对应的HISR优先级就绪队列,等待CPU调度。
本实施例中,***是按照所述高级中断服务例程的优先级由高至低的顺序,调度所述高级中断服务例程处理所述中断的。例如,若HISR有3个优先等级(等级的个数可按照***需求来设计)时,***在处理低优先级HISR时,如果高优先级的HISR被激活,则低优先级的被“抢占”,这一点与任务之间的抢占是一样的。相同优先级的HISR根据激活顺序,依次执行。除非超过HISR优先级的任务需要运行,一般情况下,在正常的任务调度以前,所有激活的HISR都将先被执行。
由于HISR是在***的调度下被执行的,而***去调度某个HISR则取决于该HISR是否处于被激活状态。操作***的调度是依据其具有的任务链表进行的,***根据任务链表中的任务顺序依次执行每个任务,如前所述,HISR也可以作为其中一个任务,在***启动初始化的时候,HISR就已被创建并加入到操作***的任务链表中,只是其处于睡眠状态无法运行,需要将任务链表中相应优先级的HISR激活,该HISR才能***作***所调用并执行,而激活的方式可以通过向所述任务链表发送信号量来实现。此外,处于睡眠状态的HISR的待处理中断链表中是不存在任何需要处理的中断任务的,而实现对中断的处理具体需要通过执行注册进所述待处理中断链表的回调函数,处理不同的中断任务所对应的回调函数通常不同。因此,当LISR需要通知相应的HISR处理其未处理完的中断任务时,只要向该HISR的待处理中断链表中添加相应的回调函数(以实现对所述中断的具体处理),并发送信号量至***的任务链表,所述信号量对应于所述任务链表中的所述高级中断服务例程,***正是基于所述信号量调度所述高级中断服务例程的,若任务链表中某个HISR对应的信号量大于零,表明该HISR需要处理中断任务,则***会调用该HISR。若所述待处理中断链表中已存在该回调函数,则仅需发送信号量通知即可。信号量(Semaphore)是进程间通讯(IPC,Inter-Process-Communication)的一种形式,是一个进程给另一个进程发送信息的方法。操作***根据信号量调度任务链表中的HISR,若存在多个具有信号量的HISR,则按照HISR的优先级依次进行调用。
需要说明的是,以操作***任务的方式模拟创建高级中断服务例程,不需要依靠传统操作***本身实现类似高级中断服务例程的***组件,即可实现高级中断服务例程的功能。由于即使很小型的操作***也有任务,所以可以用任务来模拟HISR,在较小型的操作***(例如嵌入式操作***)支持的平台上也可以使用本实施例提供的这种灵活高效的中断响应机制。
步骤S205完成之后,执行步骤S206,切换上下文,并返回***去调度(步骤S207)。步骤S207中所述的***调度具体包括根据信号量并按照HISR的优先级调度各HISR进行中断处理,调度过程如前所述。
本实施例中,对于HISR的实现,可以定义如下的数据结构:
定义好存储***固定的HISR的优先级,回调函数等数据内容。
Hisr_T HISR_list[MAX_ISR_NUM];//will related with interrupt array
在***初始化接口建立好几个优先级不一样的任务来作为HISR,通常这些任务的优先级要高于操作***的其他任务的优先级。
这些任务的具体实现为:
当发生中断的时候,LISR先处理,当LISR的注册的中断处理程序认为需要继续处理未完成的任务时则返回call_hisrs,这时候LISR就会把任务交给HISR来处理。
步骤S103之后,执行步骤S104,被激活的高级中断服务例程在***的调度下,从所述缓存区中读取所述待处理信息后,执行上层应用注册进来的回调函数以实现对所述中断的处理。
步骤S104对应于图2中的步骤S208和步骤S209。在***调度HISR进行中断处理时,执行步骤S208,HISR从所述缓存区中读取所述待处理信息,遍历待处理中断链表。在遍历所述待处理中断链表的过程中,即是执行步骤S209,依次执行注册(添加)进来的回调函数,直至执行完毕返回***去调度。
本实施例中,HISR从所述缓存区中读取所述待处理信息包括:确定所述中断中需要由所述高级中断服务例程进行处理的子任务。如前所述,所述待处理信息为至少一个中断中LISR需要由HISR进行处理的子任务(可能为所有的子任务,即该中断任务)的相关信息,因此,HISR在***的调度下,从所述缓存区中读取所述待处理信息便是为了确定所述中断中哪些子任务需要由其进行处理,HISR根据所述待处理信息处理完所有需要处理的子任务。
如前所述,所述高级中断服务例程具有待处理中断链表,所述回调函数被添加于所述待处理中断链表中,所述回调函数的执行是在遍历所述待处理中断链表时实现的。具体地,每一个HISR内部维护一个链表(待处理中断链表),该链表记录了要处理的中断传过来的要处理的函数(也就是HISR注册时候,上层应用注册进来的回调函数)。由于所述待处理中断链表中具有多个回调函数,每个回调函数对应至少一个中断任务或子任务,因此,当***调度某个HISR运行时,HISR需要遍历所述待处理中断链表,依次处理相应的回调函数,当处理完一个后,会将其从所述待处理中断链表中删除,直至处理完所述待处理中断链表中所有的回调函数。
下面给出操作***根据信号量调度HISR以及执行注册进来的回调函数的代码实现:
下面再对LISR与HISR之间的数据缓冲处理作进一步说明。
由于HISR的优先级较一般的任务高,如果多次来中断,按以往的方式,中断会延迟或者数据堵塞在低优先级的任务队列中。基于此,发明人考虑,可以在LISR与HISR中加一个缓冲机制,具体设置一缓冲区,如前所述,所述缓冲区存储的是LISR需要HISR处理的子任务的相关信息(可理解为需处理的子任务的清单),HISR只是按照清单对所有需要处理的子任务进行处理。
HISR在***的调度下,读取缓冲区中的待处理信息,再依次送往特定的任务中处理,由此可以实现LISR与HISR之间的高速通讯,从而提高中断处理效率。
本实施例中,可以将具体的缓冲buffer定义为:
使用方法是在要使用的源文件中定义如下的宏和函数:
INPUT_BUFFER_INIT(32);//指定buffer大小为32个INT类型。
threadReadBuffer(value);
IsrWriteBuffer(value);
现有技术中,当中断进来后,是直接关闭该中断源(屏蔽该中断以免其不断进来而造成操作***任务堵塞),然后直接在中断模式下全部处理,然后退出;或者关闭该中断源,通知中断第二处理部分(类似于HISR),然后中断返回,由中断第二处理部分再将剩下的任务或子任务处理完后,再打开该中断,然后返回***调度。如此,关闭这个中断源会导致依赖这个中断的子中断全都被关闭,而且处理时间长,效率低下。
由于在通常情况下,产生的一个中断为属于一个总中断的其中一个子中断,例如对于键盘产生的中断来说是一个总中断,而具体实施时,产生的中断往往是键盘中的某个键产生中断。因此,在本实施例中,所述中断为属于一个总中断的其中一个子中断,所述识别出中断的类型包括识别出所述子中断所属的总中断。
此外,本实施例所述嵌入式***的中断处理方法还包括:将所述待处理信息存入所述缓冲区后,屏蔽所述子中断直至由所述高级中断服务例程完成对所述子中断的处理。在所述高级中断服务例程完成对所述子中断的处理后,则解除对所述子中断的屏蔽。屏蔽所述子中断的目的在于避免该子中断不断进来从而造成操作***任务堵塞。
本实施例中,所述缓冲区的存储空间大小(即缓冲BUFFER的空间大小)可以按照表示所有中断的数据量特征来确定,这样能够避免存储空间的浪费。比如,一个键盘(keypad)总共有5行2列,也就是说10个键值,那么芯片如果有10个对应的键盘子中断,那么缓冲值可以设定为10,若以二维数组表示5行2列的话,则最少用7个值就可以表示。因为当键盘总中断来时,仅仅需要关闭其中一个子中断,然后缓冲本次子中断的待处理信息,给HISR去处理。而保持其他子中断原有的状态,当HISR很忙,***很繁忙的时候,这样能够使得其它未被关闭的无关的键盘子中断还能够正常被接收,提高效率。当然,所述缓冲区的存储空间大小并不限于根据子中断数量的特征来确定,在实际实施时,还会按照***硬件的实际中断特征来确定。其基本原则是:高级中断服务例程在处理某段功能函数的时候,该函数的操作相关的子中断应该被屏蔽,剩余的其他子中断可以不必要屏蔽,以提高***响应度。当然,如果有需求的话,也允许全部屏蔽。总之,具体实施时,可以由使用本技术方案的设计者根据***硬件需求等来选择。
下面以一个键盘的中断(总中断)举例说明。
(1)键盘注册LISR和HISR,并且指定HISR的优先级,LISR的优先级在***中根据键盘的总中断号进行相应的初始化操作。
ISR_RegHandler_Ex(TB_KPD_INT,KPD_ISR_Handler,KeypadHisrFunc,CHIPDRV_HISR_PRIO_2,NULL);
其中:
TB_KPD_INT这个是键盘的总中断,将会在底层注册的时候,按照***初期配置的优先级,注册到数组的特定位置;
KPD_ISR_Handler是LISR;
KeypadHisrFunc是HISR;
CHIPDRV_HISR_PRIO_2是HISR的优先级,也就是说任务会派发到这个优先级的HISR上。
初始化缓冲区:
INPUT_BUFFER_INIT(7);//指定buffer大小为7个整形数据类型的大小。这样允许只关闭特定的键。
(2)对于LISR的实现举例
(3)对于HISR的回调函数的举例。
另外,因为优先级高的中断源可以中断优先级低的中断服务例程,这就形成了中断服务例程中套着中断服务例程的情况,即形成了所谓的中断嵌套。由于中断嵌套在实时性较高,以及较为低端的嵌入式设备中用的比较少,要处理复杂的重入情况,要求中断栈较大,对存储资源的要求较高,而通过本实施例提供的嵌入式***的中断处理方法则完全能够适合对于中断嵌套的处理,由此能够提高中断处理效率。
如前所述,本实施例提供的分层中断响应机制包括LISR和HISR,两者均具有多级优先级,LISR的优先级即为中断优先级,这里是指总中断的优先级(可以被静态配置),如键盘产生的中断;HISR的优先级是由***创建而成的对应HISR任务的优先级。通过这样两种优先级的设计,可以达到灵活的搭配,较好地实现所述中断响应机制中的优先级控制。
举例来说,若有鼠标和键盘两个中断,由于鼠标的速度比键盘快,如果不迅速处理鼠标按键产生的中断的话,第二个鼠标按键产生的中断将会丢失,因此就决定了在***配置的时候,配置鼠标的总中断优先级应该高于键盘。但是,如果鼠标一般又有左右两个按键,由这两个按键产生的中断分别为鼠标这个总中断的两个子中断,而键盘则存在更多的按键,每一个按键产生的中断分别为键盘这个总中断的一个子中断。如果通常我们按鼠标右键不会特别快,而按键盘的回车键又要求特别快,那么可以指定处理鼠标的右键的子中断对应HISR的优先级低于处理键盘的回车键产生的子中断。这样,当某一个瞬间,硬件同时来了鼠标的右键和键盘的回车键所产生的子中断,那么按照LISR的优先级的顺序,会先处理来自于鼠标的总中断,以便鼠标第二次的按键不会丢失,然后通知对应的HISR准备处理。但由于任意HISR的优先级都低于LISR的优先级,所以***又会去处理来自于键盘的总中断,由处理该中断的LISR激活相应的HISR。这个时刻,两个HISR都处于准备执行的阶段,由于处理回车键的子中断对应HISR的优先级高于处理鼠标右键的子中断对应HISR的优先级,所以会先执行处理回车键的子中断对应HISR的待处理链表中的回调函数。
需要说明的是,本实施例中,对于上述的LISR、HISR的优先级控制均可以通过计算机程序实现,不需要硬件支持优先级,即可达到比较好的优先级控制,相对于现有技术的CPU级别的优先级控制中完全或部分由硬件实现的方案来说,其降低了成本,能够满足用户对于嵌入式实时操作***的中断响应处理的需求。
为了能够更好地说明本实施例中所述嵌入式***的中断处理方法所体现的优势,下面将本技术方案与现有技术的中断处理方法对于中断处理的性能进行比较。
首先对比较方法作简单介绍。
Timepegs原是一个Linux在内核中精确测试任意两个代码执行点之间的运行时间的工具。本实施例中,对原有代码作了若干改动,使得可以满足对于中断延时的测量。其基本原理是获取开机至当前CPU时间戳并进行记录运算保存。
它的两个重要的数据结构:
说明:TIMESTAMP是记录CPU运行周期数的数据结构,因为这是一个64位的数据,分成两个32位的数据存储:high存储高32位,low存储低32位。
说明:timepeg_arc是固定两个程序点间的路径的时间统计数据。其中,timepeg_slot*timepeg是最近进入该统计的一个timepeg_slot的指针,参见timepeg_slot的说明;acc_tp是该段统计的平均值;min_tp和max_tp是统计中的最大值和最小值;smin_tp和smax_tp是统计中的次大值和次小值;nr_times是统计的次数。
为了统计IRQ和FIQ的执行每一次花费的时间,依次在中断的入口和出口处使用接口来记录即可统计出以上的各种数据信息。
通过以上的性能比较方法,重点考察最大延时和平均延时,本实施例以下描述的是对于平均延时的比较。
以不带优先级的一个基于ThreadX的操作***(记录为A)来与本技术方案(记录为B,具备优先级和HISR的中断响应机制)对中断处理的性能进行比较,如下表所示:
表一
表一中示出了对于各种设备中断事件的响应情况,其中,单一中断、2中断交叉、3中断交叉是指某时间片刻内产生中断的数量不同,例如一个调度片刻10毫秒内,来了5个中断,那么就称为5中断交叉。从表一中可以看出,虽然对于单一中断来说,采用本技术方案(B)的延迟稍长,而在中断交叉的数量较多时,本技术方案(B)的性能优势则体现无遗。由于操作***一定是多中断的环境,往往现在的嵌入式设备,尤其是移动设备都是多中断,因此,在实际实施时,本技术方案(B)相对于现有技术的中断处理方法具有更高的中断处理性能(较低的中断延迟、较高的中断响应速度)。
图3是本发明实施例的嵌入式***的中断处理方法与现有技术的中断响应性能对比的示意图。如图3所示,横轴表示在1秒内混合随机发生的中断个数,纵轴表示随机选取的非最高优先级的中断的时间,曲线A示出了现有技术的中断处理方法的中断响应性能,曲线B示出了本发明实施例提供的嵌入式***的中断处理方法的中断响应性能。从图3中可以看出,随着中断个数的增多,曲线B的中断的时间变化不大,能够较稳定、快速地响应中断,中断响应性能较好;而曲线A的响应中断的时间增加非常明显,中断个数越大,中断时间越长,说明中断响应性能较差。由此表明,采用本发明实施例的嵌入式***的中断处理方法进行中断处理,中断数越多,中断处理的综合能力越高。实际上,传统方案的设计在没有区分中断的优先级的情况下,一旦一个低优先级进入了中断,一直占有CPU的时间,使得其他高优先级的中断来了却得不到处理,可能导致出现丢中断的情况。
对应于上述嵌入式***的中断处理方法,本实施例还提供了一种嵌入式***的中断处理装置。图4是本发明实施例提供的嵌入式***的中断处理装置的结构示意图,如图4所示,所述嵌入式***的中断处理装置包括:注册单元101,适于在***启动后,基于设备中断事件注册低级中断服务例程102以及高级中断服务例程103;识别单元104,适于当接收到中断信号后,识别出中断的类型;跳转单元105,与所述低级中断服务例程102、识别单元104相连,适于根据识别出中断的类型,跳转至相应的低级中断服务例程102进行中断处理;判断单元106,与所述低级中断服务例程102相连,适于基于所述低级中断服务例程102中断处理后的返回结果,判断是否处理完所述中断;缓存单元107,与所述判断单元106相连,适于在判断出未处理完所述中断时,将所述中断的待处理信息存入缓冲区;切换单元108,与所述低级中断服务例程102相连,适于在所述低级中断服务例程102激活相应的高级中断服务例程103后切换上下文以返回***去调度;所述低级中断服务例程102,适于处理所述中断,并在未处理完所述中断时激活相应的高级中断服务例程103;被激活的高级中断服务例程103,适于在***的调度下,从所述缓存区中读取所述待处理信息后,执行上层应用注册进来的回调函数以实现对所述中断的处理。
本实施例中,所述嵌入式***的中断处理装置还包括配置单元100,与所述注册单元101相连,适于配置低级中断服务例程的数量和优先级、高级中断服务例程的数量和优先级以及低级中断服务例程的默认处理函数。所述配置单元100所进行的配置通过所述注册单元101在***启动后完成初始化操作的过程。
本实施例中,所述跳转单元105按低级中断服务例程的优先级由高至低的顺序遍历以查询到适于处理所述中断的低级中断服务例程,低级中断服务例程的优先级与中断优先级相对应。所述低级中断服务例程的优先级以固定的顺序存储于静态数组中。
本实施例中,所述低级中断服务例程102包括:添加单元(图中未示出),适于将所述回调函数添加至适于处理所述中断的高级中断服务例程的待处理中断链表中;发送单元(图中未示出),适于向***的任务链表发送信号量,所述信号量对应于所述任务链表中的所述高级中断服务例程,***是基于所述信号量调度所述高级中断服务例程的。所述低级中断服务例程102激活相应的高级中断服务例程103具体是通过添加单元和发送单元实现。
具体实施时,所述高级中断服务例程是以***任务的方式模拟创建的。***按所述高级中断服务例程的优先级由高至低的顺序,调度所述高级中断服务例程处理所述中断。所述回调函数的执行是在所述高级中断服务例程遍历所述待处理中断链表时实现的。
本实施例中,所述嵌入式***的中断处理装置还包括第一确定单元109,与所述识别单元104、跳转单元105相连,适于在所述识别单元104识别出中断的类型后,所述跳转单元105跳转至相应的低级中断服务例程102进行中断处理之前,确定所述中断中需要由所述低级中断服务例程102进行处理的子任务。
本实施例中,所述被激活的高级中断服务例程103还适于从读取的所述待处理信息中确定所述中断中需要由其进行处理的子任务。
具体实施时,所述中断为属于一个总中断的其中一个子中断,所述跳转单元105识别出中断的类型包括识别出所述子中断所属的总中断。
本实施例中,所述嵌入式***的中断处理装置还包括屏蔽控制单元110,与所述缓存单元107、高级中断服务例程103相连,适于在将所述待处理信息存入所述缓冲区后,屏蔽所述子中断直至由所述高级中断服务例程103完成对所述子中断的处理。
本实施例中,所述嵌入式***的中断处理装置还包括第二确定单元111,与所述缓存单元107相连,适于按照表示所有中断的数据量特征确定所述缓冲区的存储空间大小。
本领域技术人员可以理解,实现上述实施例的嵌入式***的中断处理装置的全部或部分是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读存储介质中,所述存储介质可以是ROM、RAM、磁碟、光盘等。
此外,本实施例还提供了一种包括上述中断处理装置的嵌入式***。至于本实施例所述嵌入式***及其中断处理装置的具体实施,可参考上述嵌入式***的中断处理方法的实施,在此不再赘述。
综上,本发明实施方式提供的嵌入式***及其中断处理方法与装置,至少具有如下有益效果:
通过基于设备中断事件预先注册低级中断服务例程以及高级中断服务例程,在接收到中断信号并识别出中断类型后,先跳转至相应的低级中断服务例程进行中断处理,在判断出未处理完所述中断时,再由所述低级中断服务例程激活相应的高级中断服务例程对所述中断进行处理,如此分层的中断响应机制将中断处理的快速处理部分与慢速处理部分分离开,确保***能够及时响应和处理所发生的紧迫中断任务,增加***的中断响应速度;又通过在分层中断响应机制中加入数据缓冲机制,将所述低级中断服务例程未处理完的所述中断的待处理信息存入缓冲区,使所述高级中断服务例程在***调度下,从所述缓存区中读取所述待处理信息后处理完所述中断,从而实现低级中断服务例程与高级中断服务例程之间的高速通讯。引入所述缓冲机制的分层中断响应机制,能够有效提高中断处理的效率,降低中断延迟,从而改善***运行的整体性能。
通过按固定的低级中断服务例程的优先级的顺序遍历以实现基于高效优先级的跳转,能够快速地查询到适于处理中断的低级中断服务例程,进一步加快中断响应速度的同时也降低了***复杂度;对注册的各高级中断服务例程配置多级优先级,由激活的高级中断服务例程以优先级顺序对接收到的中断依次进行处理,以便适应不同中断任务的紧急度,进一步提高中断处理的效率。
在上述分层中断响应机制的基础上,通过实现对低级中断服务例程、高级中断服务例程的数量和优先级的灵活、便捷的配置,使得自适应性强。
以操作***任务的方式模拟创建高级中断服务例程,不需要依靠传统操作***本身实现类似高级中断服务例程的***组件,即可实现高级中断服务例程的功能,从而能够更好地满足嵌入式***的中断特征。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
Claims (25)
1.一种嵌入式***的中断处理方法,其特征在于,包括:
***启动后,基于设备中断事件注册低级中断服务例程以及高级中断服务例程;
当接收到中断信号后,根据识别出中断的类型,跳转至相应的低级中断服务例程进行中断处理;
基于所述低级中断服务例程中断处理后的返回结果,判断出未处理完所述中断时,将所述中断的待处理信息存入缓冲区,并由所述低级中断服务例程激活相应的高级中断服务例程,然后切换上下文以返回***去调度;
被激活的高级中断服务例程在***的调度下,从所述缓冲区中读取所述待处理信息后,执行上层应用注册进来的回调函数以实现对所述中断的处理;
其中,所述低级中断服务例程激活相应的高级中断服务例程包括:
所述低级中断服务例程将所述回调函数添加至适于处理所述中断的高级中断服务例程的待处理中断链表中并发送信号量至***的任务链表,所述信号量对应于所述任务链表中的所述高级中断服务例程,***是基于所述信号量调度所述高级中断服务例程的。
2.根据权利要求1所述的嵌入式***的中断处理方法,其特征在于,还包括:在基于设备中断事件注册低级中断服务例程以及高级中断服务例程前,配置低级中断服务例程的数量和优先级、高级中断服务例程的数量和优先级以及低级中断服务例程的默认处理函数。
3.根据权利要求2所述的嵌入式***的中断处理方法,其特征在于,所述跳转至相应的低级中断服务例程进行中断处理包括:按低级中断服务例程的优先级由高至低的顺序遍历以查询到适于处理所述中断的低级中断服务例程,低级中断服务例程的优先级与中断优先级相对应。
4.根据权利要求3所述的嵌入式***的中断处理方法,其特征在于,所述低级中断服务例程的优先级以固定的顺序存储于静态数组中。
5.根据权利要求2所述的嵌入式***的中断处理方法,其特征在于,***按高级中断服务例程的优先级由高至低的顺序,调度所述高级中断服务例程处理所述中断。
6.根据权利要求1所述的嵌入式***的中断处理方法,其特征在于,所述回调函数的执行是在所述高级中断服务例程遍历所述待处理中断链表时实现的。
7.根据权利要求1所述的嵌入式***的中断处理方法,其特征在于,识别出中断的类型后,跳转至相应的低级中断服务例程进行中断处理之前,还包括:确定所述中断中需要由所述低级中断服务例程进行处理的子任务。
8.根据权利要求7所述的嵌入式***的中断处理方法,其特征在于,还包括:从读取的所述待处理信息中确定所述中断中需要由所述高级中断服务例程进行处理的子任务。
9.根据权利要求1所述的嵌入式***的中断处理方法,其特征在于,所述中断为属于一个总中断的其中一个子中断,所述识别出中断的类型包括识别出所述子中断所属的总中断。
10.根据权利要求9所述的嵌入式***的中断处理方法,其特征在于,还包括:将所述待处理信息存入所述缓冲区后,屏蔽所述子中断直至由所述高级中断服务例程完成对所述子中断的处理。
11.根据权利要求1所述的嵌入式***的中断处理方法,其特征在于,所述缓冲区的存储空间大小按照表示所有中断的数据量特征来确定。
12.根据权利要求1所述的嵌入式***的中断处理方法,其特征在于,所述高级中断服务例程是以***任务的方式模拟创建的。
13.一种嵌入式***的中断处理装置,其特征在于,包括:
注册单元,适于在***启动后,基于设备中断事件注册低级中断服务例程以及高级中断服务例程;
识别单元,适于当接收到中断信号后,识别出中断的类型;
跳转单元,适于根据识别出中断的类型,跳转至相应的低级中断服务例程进行中断处理;
判断单元,适于基于所述低级中断服务例程中断处理后的返回结果,判断是否处理完所述中断;
缓存单元,适于在判断出未处理完所述中断时,将所述中断的待处理信息存入缓冲区;
切换单元,适于在所述低级中断服务例程激活相应的高级中断服务例程后切换上下文以返回***去调度;
所述低级中断服务例程,适于处理所述中断,并在未处理完所述中断时激活相应的高级中断服务例程;被激活的高级中断服务例程,适于在***的调度下,从所述缓冲区中读取所述待处理信息后,执行上层应用注册进来的回调函数以实现对所述中断的处理;
其中,所述低级中断服务例程包括:
添加单元,适于将所述回调函数添加至适于处理所述中断的高级中断服务例程的待处理中断链表中;
发送单元,适于向***的任务链表发送信号量,所述信号量对应于所述任务链表中的所述高级中断服务例程,***是基于所述信号量调度所述高级中断服务例程的。
14.根据权利要求13所述的嵌入式***的中断处理装置,其特征在于,还包括配置单元,适于配置低级中断服务例程的数量和优先级、高级中断服务例程的数量和优先级以及低级中断服务例程的默认处理函数。
15.根据权利要求14所述的嵌入式***的中断处理装置,其特征在于,所述跳转单元按低级中断服务例程的优先级由高至低的顺序遍历以查询到适于处理所述中断的所述低级中断服务例程,低级中断服务例程的优先级与中断优先级相对应。
16.根据权利要求15所述的嵌入式***的中断处理装置,其特征在于,所述低级中断服务例程的优先级以固定的顺序存储于静态数组中。
17.根据权利要求14所述的嵌入式***的中断处理装置,其特征在于,***按高级中断服务例程的优先级由高至低的顺序,调度所述高级中断服务例程处理所述中断。
18.根据权利要求13所述的嵌入式***的中断处理装置,其特征在于,所述回调函数的执行是在所述高级中断服务例程遍历所述待处理中断链表时实现的。
19.根据权利要求13所述的嵌入式***的中断处理装置,其特征在于,所述跳转单元包括第一确定单元,适于在识别出中断的类型后,跳转至相应的低级中断服务例程进行中断处理之前,确定所述中断中需要由所述低级中断服务例程进行处理的子任务。
20.根据权利要求19所述的嵌入式***的中断处理装置,其特征在于,所述被激活的高级中断服务例程还适于从读取的所述待处理信息中确定所述中断中需要由其进行处理的子任务。
21.根据权利要求13所述的嵌入式***的中断处理装置,其特征在于,所述中断为属于一个总中断的其中一个子中断,所述跳转单元识别出中断的类型包括识别出所述子中断所属的总中断。
22.根据权利要求21所述的嵌入式***的中断处理装置,其特征在于,还包括屏蔽控制单元,适于在将所述待处理信息存入所述缓冲区后,屏蔽所述子中断直至由所述高级中断服务例程完成对所述子中断的处理。
23.根据权利要求13所述的嵌入式***的中断处理装置,其特征在于,还包括第二确定单元,适于按照表示所有中断的数据量特征确定所述缓冲区的存储空间大小。
24.根据权利要求13所述的嵌入式***的中断处理装置,其特征在于,所述高级中断服务例程是以***任务的方式模拟创建的。
25.一种嵌入式***,其特征在于,包括权利要求13至24任一项所述的中断处理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210046907.2A CN103294544B (zh) | 2012-02-27 | 2012-02-27 | 嵌入式***及其中断处理方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210046907.2A CN103294544B (zh) | 2012-02-27 | 2012-02-27 | 嵌入式***及其中断处理方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103294544A CN103294544A (zh) | 2013-09-11 |
CN103294544B true CN103294544B (zh) | 2016-08-17 |
Family
ID=49095476
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210046907.2A Active CN103294544B (zh) | 2012-02-27 | 2012-02-27 | 嵌入式***及其中断处理方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103294544B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103955410B (zh) * | 2014-05-23 | 2017-10-27 | 苏州国芯科技有限公司 | 基于多中断源优先级排序的中断控制方法 |
CN104021043B (zh) * | 2014-06-23 | 2017-09-15 | 中国银行股份有限公司 | 批量应用程序的中断重入方法及*** |
CN104503836B (zh) * | 2015-01-08 | 2018-01-30 | 辽宁科技大学 | 多核处理器进程调度***和多核处理器进程调度方法 |
CN105183548A (zh) * | 2015-08-28 | 2015-12-23 | 浪潮软件集团有限公司 | 一种基于票据模块驱动处理上层应用中断事件的方法 |
CN106557441B (zh) * | 2015-09-29 | 2019-03-19 | 北京东土科技股份有限公司 | 一种基于中断控制器的低速接口中断处理方法及*** |
CN106200659B (zh) * | 2016-07-20 | 2019-05-31 | 深圳洲际通航投资控股有限公司 | 飞行器的中断控制方法及*** |
CN106406991B (zh) * | 2016-08-30 | 2019-12-17 | 西安航天华迅科技有限公司 | 一种ThreadX操作***在ARM处理器上的运行方法 |
CN106959931A (zh) * | 2017-03-14 | 2017-07-18 | 深圳航天科技创新研究院 | 实现中断控制器组件的方法及*** |
CN110737616B (zh) * | 2018-07-20 | 2021-03-16 | 瑞昱半导体股份有限公司 | 处理中断优先级的电路*** |
CN111353595A (zh) * | 2018-12-20 | 2020-06-30 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
CN109960589B (zh) * | 2019-03-25 | 2021-07-09 | 上海富士施乐有限公司 | 嵌入式***的***软件层的实现方法、装置及可读介质 |
CN111400078B (zh) * | 2020-03-09 | 2023-08-25 | 广州路派电子科技有限公司 | 一种嵌入式***中处理任务的方法及装置 |
CN114281492A (zh) * | 2021-11-12 | 2022-04-05 | 北京智芯微电子科技有限公司 | 中断处理方法、装置、芯片、电子设备及存储介质 |
CN114489801A (zh) * | 2022-02-11 | 2022-05-13 | 广州翼辉信息技术有限公司 | 高精度测量嵌入式***中断时长的方法、***及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1409209A (zh) * | 2001-09-24 | 2003-04-09 | 深圳市中兴通讯股份有限公司上海第二研究所 | 一种多任务实时操作***的实现方法 |
CN1690971A (zh) * | 2004-04-27 | 2005-11-02 | 松下电器产业株式会社 | 中断控制装置 |
CN101685429A (zh) * | 2008-09-25 | 2010-03-31 | 联发科技股份有限公司 | 嵌入式***与中断处理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7487339B2 (en) * | 2001-10-12 | 2009-02-03 | Mips Technologies, Inc. | Method and apparatus for binding shadow registers to vectored interrupts |
-
2012
- 2012-02-27 CN CN201210046907.2A patent/CN103294544B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1409209A (zh) * | 2001-09-24 | 2003-04-09 | 深圳市中兴通讯股份有限公司上海第二研究所 | 一种多任务实时操作***的实现方法 |
CN1690971A (zh) * | 2004-04-27 | 2005-11-02 | 松下电器产业株式会社 | 中断控制装置 |
CN101685429A (zh) * | 2008-09-25 | 2010-03-31 | 联发科技股份有限公司 | 嵌入式***与中断处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103294544A (zh) | 2013-09-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103294544B (zh) | 嵌入式***及其中断处理方法与装置 | |
WO2021088419A1 (zh) | 一种多业务请求进程调用fpga设备的方法及相关装置 | |
US11789895B2 (en) | On-chip heterogeneous AI processor with distributed tasks queues allowing for parallel task execution | |
US11782870B2 (en) | Configurable heterogeneous AI processor with distributed task queues allowing parallel task execution | |
CN105183698B (zh) | 一种基于多核dsp的控制处理***和方法 | |
US10733019B2 (en) | Apparatus and method for data processing | |
US10592218B2 (en) | Dynamic data and compute resource elasticity | |
CN101667284B (zh) | 用于中央处理单元和图形处理单元之间通信的设备和方法 | |
US9658890B2 (en) | Runtime agnostic representation of user code for execution with selected execution runtime | |
US10585653B2 (en) | Declarative programming model with a native programming language | |
CN110717574B (zh) | 一种神经网络运行方法、装置及异构智能芯片 | |
CN101196816B (zh) | 一种操作***及操作***管理方法 | |
CN114579285B (zh) | 一种任务运行***、方法及计算设备 | |
CN110837415B (zh) | 一种基于risc-v多核处理器的线程调度方法和装置 | |
CN101976204B (zh) | 面向服务的异构多核计算平台及其使用的任务调度方法 | |
CN101976206A (zh) | 一种中断处理方法和装置 | |
CN113032154B (zh) | 一种虚拟cpu的调度方法、装置、电子设备及存储介质 | |
CN114911538A (zh) | 一种运行***的启动方法及计算设备 | |
CN1997966A (zh) | 用于多个内核的并行执行的方法和*** | |
CN103019844A (zh) | 一种支持多线程调用mpi函数的方法和装置 | |
GB2482141A (en) | Implementing UML activity diagrams Via task sequencing | |
CN103019843B (zh) | Mpi函数调用方法和装置 | |
CN117667220B (zh) | 指令处理方法、装置、计算机设备和存储介质 | |
CN114327767B (zh) | 任务处理的方法、装置、电子设备及计算机可读存储介质 | |
CN110413317B (zh) | 基于配置化的流程接口调用方法 |
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 |