CN103778009A - 中断处理方法及装置 - Google Patents
中断处理方法及装置 Download PDFInfo
- Publication number
- CN103778009A CN103778009A CN201210397619.1A CN201210397619A CN103778009A CN 103778009 A CN103778009 A CN 103778009A CN 201210397619 A CN201210397619 A CN 201210397619A CN 103778009 A CN103778009 A CN 103778009A
- Authority
- CN
- China
- Prior art keywords
- interrupt
- interruption
- stack
- task
- priority
- 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.)
- Pending
Links
Images
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了一种中断处理方法及装置。该方法包括:步骤1,在***进行初始化时,对中断及其驱动程序进行初始化,在执行当前任务时发生中断的情况下,将中断现场的上下文信息保存到预先设置的中断堆栈中,并判断是否为中断嵌套,步骤2,将当前任务现场的上下文信息保存到预先设置的任务堆栈中,并将堆栈指针SP移到中断堆栈;步骤3,通知***开始进入中断处理,读取中断优先级,打开中断,使能中断嵌套,并在执行中断处理程序后,禁止中断,通知***退出中断处理,并判断是否处于中断嵌套;步骤4,恢复保存的当前中断现场的上下文信息,并返回上层中断;步骤5,恢复保存的当前任务现场的上下文信息,并返回当前任务。
Description
技术领域
本发明涉及移动通讯领域,特别是涉及一种中断处理方法及装置。
背景技术
在现有技术中,嵌入式***对实时性和响应速度上有比较高的要求,支持不同优先级的中断控制器,对软件也提出了支持中断嵌套的要求。随着嵌入式***的复杂性越来越高,实时操作***的引入也越来越普遍,如何在实时操作***中支持中断嵌套成为一个难题。
μCOS-Ⅱ是一个基于抢占式的实时多任务内核,可固化、可剪裁、具有高稳定性和可靠性。它总是运行最高优先级的就绪任务。μCOS-Ⅱ支持的中断嵌套层数可以高达255层。
在嵌入式方面,无互锁流水级微处理器(Microcomputer without interlockedpipeline stages,简称为MIPS)32系列微处理器是目前仅次于ARM用得最多的处理器之一,其应用领域覆盖游戏机、路由器、激光打印机、掌上电脑等各个方面。其中,MIPS32处理器支持的中断方式有以下三种:
普通中断:支持八个独立的中断位,中断之间不区分优先级,所有中断拥有同一个中断入口。
向量中断:支持八个独立的中断位,中断之间不区分优先级,每个中断拥有自己的中断入口。
外部向量(EIC)中断:支持最多64个中断,中断之间可以设置优先级,每个中断拥有自己的中断入口。
普通中断和向量中断支持的中断个数有限,且不区分优先级,限制了在实际中的使用,因此,下述的中断均为EIC中断。
现有的实现方案中,已经出现了将μCOS-Ⅱ移植到MIPS的相关技术,现有的这些技术中,对于中断处理都是不支持嵌套中断的,所用的做法都是在处理中断的过程中,关闭全局中断使能位,禁止中断,处理完成之后,在打开中断。这样存在一个问题,当高优先级的中断来临时,由于中断禁止,而CPU不能及时进行处理,从而影响了中断的实时性。
此外,μCOS-Ⅱ中有自己的中断处理机制,但它的中断处理都是在任务堆栈上进行的。而EIC支持64级中断,而且允许中断嵌套,如果按照μCOS-Ⅱ本身的中断处理流程,每个任务堆栈都必须预留允许64级中断嵌套的空间,这大大增加了任务堆栈占用的RAM空间,影响了RAM的使用效率。
发明内容
本发明提供一种中断处理方法及装置,以解决现有技术中将μCOS-Ⅱ移植到MIPS后不能够支持嵌套中断的问题。
本发明提供一种中断处理方法,适用于基于MIPS32作为处理器并且以μCOS-Ⅱ作为操作***的平台,包括:步骤1,在***进行初始化时,对中断及其驱动程序进行初始化,在执行当前任务时发生中断的情况下,将中断现场的上下文信息保存到预先设置的中断堆栈中,并判断是否为中断嵌套,如果判断为否,执行步骤2,否则,执行步骤3;步骤2,将当前任务现场的上下文信息保存到预先设置的任务堆栈中,并将堆栈指针SP移到中断堆栈,执行步骤3;步骤3,通知***开始进入中断处理,读取中断优先级,打开中断,使能中断嵌套,并在执行中断处理程序后,禁止中断,通知***退出中断处理,并判断是否处于中断嵌套,如果判断为是,执行步骤4,否则,执行步骤5;步骤4,从中断堆栈中恢复保存的当前中断现场的上下文信息,并返回上层中断继续执行;步骤5,从任务堆栈中恢复保存的当前任务现场的上下文信息,并返回被打断的当前任务继续执行。
优选地,在***进行初始化时,对中断及其驱动程序进行初始化具体包括:配置所有中断的优先级和触发模式,并禁用所有中断,其中,触发模式包括:电平触发或者边缘触发;获取所有中断的中断号,将相应的中断处理程序与中断号相对应;在使能中断之前将中断处理程序拷贝到其对应的中断向量入口地址上,其中,中断向量之间的间隔为32字节。
优选地,将中断现场的上下文信息保存到预先设置的中断堆栈中具体包括:将中断现场的无内部互锁流水级的微处理器MIPS通用寄存器、状态寄存器SR、以及例外程序寄存器EPC中的信息保存到预先设置的中断堆栈中。
优选地,将当前任务现场的上下文信息保存到预先设置的任务堆栈中具体包括:依次将当前任务现场的程序计数器PC、SP、相关寄存器中的信息、以及中断返回地址保存到预先设置的任务堆栈中,其中相关寄存器包括SR和其他相关通用寄存器;将指向最后一个压栈内容的当前任务现场指针保存到预定函数中,其中,当前任务现场指针在恢复当前任务时出栈使用。
优选地,通知***开始进入中断处理,读取中断优先级,打开中断,使能中断嵌套,并在执行中断处理程序后,禁止中断,通知***退出中断处理具体包括:跳转至操作***中断进入OS_IntEnter函数,通知***开始进入中断处理;读取原因CAUSE寄存器的请求中断优先级RIPL位,获取中断的优先级,并将中断的优先级设置到SR的中断优先级IPL位上;将SR中的KSU位、ERL位、以及EXL位清零;将SP递减,分配中断堆栈给中断处理程序的参数;从SR的IPL位上获取中断的优先级,根据该优先级跳转到中断处理程序进行处理;修改SR的IPL位,并将SR的ERL位和EXL位设置为零,同时打开中断,使能中断嵌套;释放中断堆栈,并将SR的EXL位置为1,禁止中断;跳转至***中断退出OS_IntExit函数,通知***退出中断处理。
本发明还提供了一种中断处理装置,适用于基于MIPS32作为处理器并且以μCOS-Ⅱ作为操作***的平台,包括:初始化模块,用于在***进行初始化时,对中断及其驱动程序进行初始化;第一中断处理模块,用于在执行当前任务时发生中断的情况下,将中断现场的上下文信息保存到预先设置的中断堆栈中,并判断是否为中断嵌套,如果判断为否,调用第二中断处理模块,否则,调用第三中断处理模块;第二中断处理模块,用于将当前任务现场的上下文信息保存到预先设置的任务堆栈中,并将堆栈指针SP移到中断堆栈,调用第三中断处理模块;第三中断处理模块,用于通知***开始进入中断处理,读取中断优先级,打开中断,使能中断嵌套,并在执行中断处理程序后,禁止中断,通知***退出中断处理,并判断是否处于中断嵌套,如果判断为是,调用中断恢复模块,否则,调用任务恢复模块;中断恢复模块,用于从中断堆栈中恢复保存的当前中断现场的上下文信息,并返回上层中断继续执行;任务恢复模块,用于从任务堆栈中恢复保存的当前任务现场的上下文信息,并返回被打断的当前任务继续执行。
优选地,初始化模块具体用于:配置所有中断的优先级和触发模式,并禁用所有中断,其中,触发模式包括:电平触发或者边缘触发;获取所有中断的中断号,将相应的中断处理程序与中断号相对应;在使能中断之前将中断处理程序拷贝到其对应的中断向量入口地址上,其中,中断向量之间的间隔为32字节。
优选地,第一中断处理模块具体用于:将中断现场的无内部互锁流水级的微处理器MIPS通用寄存器、状态寄存器SR、以及例外程序寄存器EPC中的信息保存到预先设置的中断堆栈中。
优选地,第二中断处理模块具体用于:依次将当前任务现场的程序计数器PC、SP、相关寄存器中的信息、以及中断返回地址保存到预先设置的任务堆栈中,其中相关寄存器包括SR和其他相关通用寄存器;将指向最后一个压栈内容的当前任务现场指针保存到预定函数中,其中,当前任务现场指针在恢复当前任务时出栈使用。
优选地,第三中断处理模块具体用于:跳转至操作***中断进入OS_IntEnter函数,通知***开始进入中断处理;读取原因CAUSE寄存器的请求中断优先级RIPL位,获取中断的优先级,并将中断的优先级设置到SR的中断优先级IPL位上;将SR中的KSU位、ERL位、以及EXL位清零;将SP递减,分配中断堆栈给中断处理程序的参数;从SR的IPL位上获取中断的优先级,根据该优先级跳转到中断处理程序进行处理;修改SR的IPL位,并将SR的ERL位和EXL位设置为零,同时打开中断,使能中断嵌套;释放中断堆栈,并将SR的EXL位置为1,禁止中断;跳转至***中断退出OS_IntExit函数,通知***退出中断处理。
本发明有益效果如下:
通过在内存中专门开辟出一块区域,作为中断堆栈使用,发生中断嵌套时的压栈和出栈操作都只使用中断堆栈,从而将任务堆栈与中断堆栈分离,使得在计算任务堆栈大小时,不需要把中断处理(包括中断嵌套)中的内存占用计算到任务堆栈中,只需考虑任务本身及首次中断时所占用的RAM空间大小,提高了RAM的使用效率,进而给上层预留了更多的RAM空间。此外,将所有的中断嵌套中的寄存器压栈都压在中断堆栈中,这样对于任务堆栈内存大小的要求大大降低。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明实施例的中断处理方法的流程图;
图2是本发明实施例的任务堆栈初始化的示意图;
图3是本发明实施例的中断堆栈与任务堆栈分开后任务执行过程中首次中断时堆栈变化情况示意图;
图4是本发明实施例的中断嵌套时中断堆栈变化情况的示意图;
图5是本发明实施例的中断堆栈与任务堆栈分开设计时中断处理流程图;
图6是本发明实施例的中断处理装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为了解决现有技术中将μCOS-Ⅱ移植到MIPS后不能够支持嵌套中断的问题,本发明提供了一种中断处理方法及装置,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
方法实施例
根据本发明的实施例,提供了一种中断处理方法,适用于基于MIPS32作为处理器并且以μCOS-Ⅱ作为操作***的平台,图1是本发明实施例的中断处理方法的流程图,如图1所示,根据本发明实施例的中断处理方法包括如下处理:
步骤101,在***进行初始化时,对中断及其驱动程序进行初始化,在执行当前任务时发生中断的情况下,将中断现场的上下文信息保存到预先设置的中断堆栈中,并判断是否为中断嵌套,如果判断为否,执行步骤102,否则,执行步骤103;
具体地,在步骤101中,在***进行初始化时,对中断及其驱动程序进行初始化具体包括:配置所有中断的优先级和触发模式,并禁用所有中断,其中,触发模式包括:电平触发或者边缘触发;获取所有中断的中断号,将相应的中断处理程序与中断号相对应;在使能中断之前将中断处理程序拷贝到其对应的中断向量入口地址上,其中,中断向量之间的间隔为32字节。
将中断现场的上下文信息保存到预先设置的中断堆栈中具体包括:将中断现场的无内部互锁流水级的微处理器MIPS通用寄存器、状态寄存器SR、以及例外程序寄存器EPC中的信息保存到预先设置的中断堆栈中。
步骤102,将当前任务现场的上下文信息保存到预先设置的任务堆栈中,并将堆栈指针SP移到中断堆栈,执行步骤103;
在步骤102中,将当前任务现场的上下文信息保存到预先设置的任务堆栈中具体包括:依次将当前任务现场的程序计数器PC、SP、相关寄存器中的信息、以及中断返回地址保存到预先设置的任务堆栈中,其中相关寄存器包括SR和其他相关通用寄存器;将指向最后一个压栈内容的当前任务现场指针保存到预定函数中,其中,当前任务现场指针在恢复当前任务时出栈使用。
步骤103,通知***开始进入中断处理,读取中断优先级,打开中断,使能中断嵌套,并在执行中断处理程序后,禁止中断,通知***退出中断处理,并判断是否处于中断嵌套,如果判断为是,执行步骤104,否则,执行步骤105;
步骤103具体包括如下处理:1、跳转至操作***中断进入OS_IntEnter函数,通知***开始进入中断处理;2、读取原因CAUSE寄存器的请求中断优先级RIPL位,获取中断的优先级,并将中断的优先级设置到SR的中断优先级IPL位上;3、将SR中的KSU位、ERL位、以及EXL位清零;4、将SP递减,分配中断堆栈给中断处理程序的参数;5、从SR的IPL位上获取中断的优先级,根据该优先级跳转到中断处理程序进行处理;6、修改SR的IPL位,并将SR的ERL位和EXL位设置为零,同时打开中断,使能中断嵌套;7、释放中断堆栈,并将SR的EXL位置为1,禁止中断;8、跳转至***中断退出OS_IntExit函数,通知***退出中断处理。
步骤104,从中断堆栈中恢复保存的当前中断现场的上下文信息,并返回上层中断继续执行;
步骤105,从任务堆栈中恢复保存的当前任务现场的上下文信息,并返回被打断的当前任务继续执行。
以下结合附图,对本发明实施例的上述技术方案进行详细的说明。
图2是本发明实施例的任务堆栈初始化的示意图,如图2所示,在任务堆栈在初始化时,主要进行如下处理:1、准备好将来任务运行开始时CPU寄存器应处的状态(正确值);2、定位好程序计数器(PC),如果数据设计合理,任务被执行时,CPU便会按照预设计划运行。
在任务首次运行时,PC指针(即任务函数指针)将定位到任务代码的第一行,由于任务代码尚未被执行过,故代码中的变量与CPU的其它寄存器没有关系,简单的方法是将其赋为0;经过入栈和出栈,此时堆栈指针(StackPointer,简称为SP)指向任务堆栈的最底端(就是已经定义好的任务堆栈数组的最后一个元素)。
通过在内存中专门开辟出一块区域,作为中断堆栈使用,发生中断嵌套时的压栈和出栈操作都只使用它。从而将任务堆栈与中断堆栈分离,使得在计算任务堆栈大小时,不需要把中断处理(包括中断嵌套)中的内存占用计算到任务堆栈中,只需考虑任务本身及首次中断时所占用的RAM空间大小,提高了RAM的使用效率,进而给上层预留了更多的RAM空间。
图3是本发明实施例的中断堆栈与任务堆栈分开后任务执行过程中首次中断时堆栈变化情况示意图,如图3所示,中断堆栈与任务堆栈分开后,当任务执行过程中发生中断时,首先,在任务堆栈中,PC和SP被***压栈,然后将CPU的相关寄存器压栈,同时将CPU的状态寄存器(Staus Register,简称为SR)以及中断返回地址压栈,任务堆栈压栈后任务现场指针指向最后一个压栈内容,并将该值赋值给OSTCBCur,以便出栈使用,然后把SP调整到中断堆栈处。在中断处理过程中,可能会出现压栈的操作(中断处理的函数调用),那么这种情况下SP的指针会随之移动。
图4是本发明实施例的中断嵌套时中断堆栈变化情况的示意图,如图4所示,当中断发生嵌套时,SP已经被移到中断堆栈中,只有到中断退出时(中断嵌套最外层)才把SP移到任务堆栈。所以在中断嵌套时,对于中断的处理和第一次产生中断是一样的,所不同的是:保存在堆栈中的不是任务运行中的寄存器,而是中断处理中的寄存器,而且不是保存在任务堆栈而是中断堆栈中。MIPS的EIC模式支持64个中断源,0级不能用,因此最多有62层的中断嵌套。考虑最深嵌套时所需的堆栈大小为:62*(32*4)=8K,如果用任务堆栈保存,则需要任务数N*8K,从这里可以看出优化内存的效果:所有的中断嵌套中的寄存器压栈都压在中断堆栈中,这样对于任务堆栈内存大小的要求大大降低。
从上面描述可以看出,本发明实施例针对原有的MIPS32下移植μCOS-Ⅱ的不足进行改进,提供了一种新的中断处理方法,提高了中断的响应速度和减少了RAM的使用。
图5是本发明实施例的中断堆栈与任务堆栈分开设计时中断处理流程图,如图5所示,具体包括如下处理:
步骤1,定义一个中断堆栈数组,用于后续在进行中断处理时,保存嵌套中断的上下文。
步骤2,在操作***初始化时,驱动程序初始化之前,先对中断进行初始化,配置所有中断的优先级,以及触发模式(电平触发或者边缘触发),并禁用所有中断。
步骤3,在驱动程序的初始化中,取得相关的中断号,然后将相关的中断处理程序与中断号相对应。在EIC模式下,每个中断对应的入口地址都不同,因此,必须在使能中断之前将中断处理程序拷贝到其对应的向量入口地址去。设置中断向量间隔为32字节,处理代码为跳转指令,让所有的中断都跳转到同一个通用处理流程中。
步骤4,当中断发生时,首先保存现场:保存MIPS通用寄存器和SR、EPC寄存器等到堆栈上。可以使用K0和K1这两个保留给中断的专用寄存器,根据ABI规范,t0~t9寄存器在使用前不需保存,可以不用保存它们。
步骤5,读取OSIntNesting的数值,判断当前是否处于中断嵌套状态,如果是首次进入中断,则保存任务现场到任务堆栈中。
步骤6,更新堆栈指针,使其指向到步骤1定义的中断堆栈。这样后续在发生中断的时候,就把前面中断的上下文保存在该中断堆栈上。
步骤7,跳转至OS_IntEnter函数,通知操作***开始中断处理。
步骤8,读取Cause寄存器的请求中断优先级(Requested Interrupt Priority,简称为RIPL)数值,获取该中断的优先级,将该值设置到SR的IPL位上,这样只有高于此优先级的中断才会被CPU识别。
步骤9,将SR中的KSU位、ERL位、以及EXL位清零。
步骤10,将堆栈指针递减,分配堆栈给中断处理程序的参数。
步骤11,获取当前中断优先级,跳转到中断处理程序进行处理。
步骤12,修改SR中的IPL位,进入kernel模式:ERL位、EXL位为0,同时打开中断,允许中断嵌套。
步骤13,释放堆栈。
步骤14,修改SR中的EXL位,使其置1,禁止中断。
步骤15,调用OS_IntExit函数,通知操作***退出中断处理,如果是嵌套中断最外层,则触发一次任务调度。
步骤16,通过读取OSIntNesting来判断中断是否还在嵌套,如果没有中断嵌套,则进行步骤17处理,如果是中断嵌套,则进行步骤18处理。
步骤17,从任务堆栈中恢复现场,通过eret指令,退出中断,返回被打断的任务继续执行。
步骤18,从中断堆栈中恢复CPU状态寄存器。
步骤19,从中断堆栈中恢复CPU的异常返回地址寄存器EPC。
步骤20,从中断堆栈中恢复CPU的通用寄存器。
步骤21,通过eret指令,从中断返回。
综上所述,借助于本发明实施例的技术方案,通过在内存中专门开辟出一块区域,作为中断堆栈使用,发生中断嵌套时的压栈和出栈操作都只使用中断堆栈,从而将任务堆栈与中断堆栈分离,使得在计算任务堆栈大小时,不需要把中断处理(包括中断嵌套)中的内存占用计算到任务堆栈中,只需考虑任务本身及首次中断时所占用的RAM空间大小,提高了RAM的使用效率,进而给上层预留了更多的RAM空间。此外,将所有的中断嵌套中的寄存器压栈都压在中断堆栈中,这样对于任务堆栈内存大小的要求大大降低。
装置实施例
根据本发明的实施例,提供了一种中断处理装置,适用于基于MIPS32作为处理器并且以μCOS-Ⅱ作为操作***的平台,图6是本发明实施例的中断处理装置的结构示意图,如图6所示,根据本发明实施例的中断处理装置包括:初始化模块60、第一中断处理模块61、第二中断处理模块62、第三中断处理模块63、中断恢复模块64、以及任务恢复模块65以下对本发明实施例的各个模块进行详细的说明。
初始化模块60,用于在***进行初始化时,对中断及其驱动程序进行初始化;
初始化模块60具体用于:配置所有中断的优先级和触发模式,并禁用所有中断,其中,触发模式包括:电平触发或者边缘触发;获取所有中断的中断号,将相应的中断处理程序与中断号相对应;在使能中断之前将中断处理程序拷贝到其对应的中断向量入口地址上,其中,中断向量之间的间隔为32字节。
第一中断处理模块61,用于在执行当前任务时发生中断的情况下,将中断现场的上下文信息保存到预先设置的中断堆栈中,并判断是否为中断嵌套,如果判断为否,调用第二中断处理模块62,否则,调用第三中断处理模块63;
第一中断处理模块61具体用于:将中断现场的无内部互锁流水级的微处理器MIPS通用寄存器、状态寄存器SR、以及例外程序寄存器EPC中的信息保存到预先设置的中断堆栈中。
第二中断处理模块62,用于将当前任务现场的上下文信息保存到预先设置的任务堆栈中,并将堆栈指针SP移到中断堆栈,调用第三中断处理模块63;
第二中断处理模块62具体用于:依次将当前任务现场的程序计数器PC、SP、相关寄存器中的信息、以及中断返回地址保存到预先设置的任务堆栈中,其中相关寄存器包括SR和其他相关通用寄存器;将指向最后一个压栈内容的当前任务现场指针保存到预定函数中,其中,当前任务现场指针在恢复当前任务时出栈使用。
第三中断处理模块63,用于通知***开始进入中断处理,读取中断优先级,打开中断,使能中断嵌套,并在执行中断处理程序后,禁止中断,通知***退出中断处理,并判断是否处于中断嵌套,如果判断为是,调用中断恢复模块64,否则,调用任务恢复模块65;
第三中断处理模块63具体用于:跳转至操作***中断进入OS_IntEnter函数,通知***开始进入中断处理;读取原因CAUSE寄存器的请求中断优先级RIPL位,获取中断的优先级,并将中断的优先级设置到SR的中断优先级IPL位上;将SR中的KSU位、ERL位、以及EXL位清零;将SP递减,分配中断堆栈给中断处理程序的参数;从SR的IPL位上获取中断的优先级,根据该优先级跳转到中断处理程序进行处理;修改SR的IPL位,并将SR的ERL位和EXL位设置为零,同时打开中断,使能中断嵌套;释放中断堆栈,并将SR的EXL位置为1,禁止中断;跳转至***中断退出OS_IntExit函数,通知***退出中断处理。
中断恢复模块64,用于从中断堆栈中恢复保存的当前中断现场的上下文信息,并返回上层中断继续执行;
任务恢复模块65,用于从任务堆栈中恢复保存的当前任务现场的上下文信息,并返回被打断的当前任务继续执行。
以下结合附图,对本发明实施例的上述技术方案进行详细的说明。
图2是本发明实施例的任务堆栈初始化的示意图,如图2所示,在任务堆栈在初始化时,主要进行如下处理:1、准备好将来任务运行开始时CPU寄存器应处的状态(正确值);2、定位好程序计数器(PC),如果数据设计合理,任务被执行时,CPU便会按照预设计划运行。
在任务首次运行时,PC指针(即任务函数指针)将定位到任务代码的第一行,由于任务代码尚未被执行过,故代码中的变量与CPU的其它寄存器没有关系,简单的方法是将其赋为0;经过入栈和出栈,此时堆栈指针(StackPointer,简称为SP)指向任务堆栈的最底端(就是已经定义好的任务堆栈数组的最后一个元素)。
通过在内存中专门开辟出一块区域,作为中断堆栈使用,发生中断嵌套时的压栈和出栈操作都只使用它。从而将任务堆栈与中断堆栈分离,使得在计算任务堆栈大小时,不需要把中断处理(包括中断嵌套)中的内存占用计算到任务堆栈中,只需考虑任务本身及首次中断时所占用的RAM空间大小,提高了RAM的使用效率,进而给上层预留了更多的RAM空间。
图3是本发明实施例的中断堆栈与任务堆栈分开后任务执行过程中首次中断时堆栈变化情况示意图,如图3所示,中断堆栈与任务堆栈分开后,当任务执行过程中发生中断时,首先,在任务堆栈中,PC和SP被***压栈,然后将CPU的相关寄存器压栈,同时将CPU的状态寄存器(Staus Register,简称为SR)以及中断返回地址压栈,任务堆栈压栈后任务现场指针指向最后一个压栈内容,并将该值赋值给OSTCBCur,以便出栈使用,然后把SP调整到中断堆栈处。在中断处理过程中,可能会出现压栈的操作(中断处理的函数调用),那么这种情况下SP的指针会随之移动。
图4是本发明实施例的中断嵌套时中断堆栈变化情况的示意图,如图4所示,当中断发生嵌套时,SP已经被移到中断堆栈中,只有到中断退出时(中断嵌套最外层)才把SP移到任务堆栈。所以在中断嵌套时,对于中断的处理和第一次产生中断是一样的,所不同的是:保存在堆栈中的不是任务运行中的寄存器,而是中断处理中的寄存器,而且不是保存在任务堆栈而是中断堆栈中。MIPS的EIC模式支持64个中断源,0级不能用,因此最多有62层的中断嵌套。考虑最深嵌套时所需的堆栈大小为:62*(32*4)=8K,如果用任务堆栈保存,则需要任务数N*8K,从这里可以看出优化内存的效果:所有的中断嵌套中的寄存器压栈都压在中断堆栈中,这样对于任务堆栈内存大小的要求大大降低。
从上面描述可以看出,本发明实施例针对原有的MIPS32下移植μCOS-Ⅱ的不足进行改进,提供了一种新的中断处理方法,提高了中断的响应速度和减少了RAM的使用。
图5是本发明实施例的中断堆栈与任务堆栈分开设计时中断处理流程图,如图5所示,具体包括如下处理:
步骤1,定义一个中断堆栈数组,用于后续在进行中断处理时,保存嵌套中断的上下文。
步骤2,在操作***初始化时,驱动程序初始化之前,先对中断进行初始化,配置所有中断的优先级,以及触发模式(电平触发或者边缘触发),并禁用所有中断。
步骤3,在驱动程序的初始化中,取得相关的中断号,然后将相关的中断处理程序与中断号相对应。在EIC模式下,每个中断对应的入口地址都不同,因此,必须在使能中断之前将中断处理程序拷贝到其对应的向量入口地址去。设置中断向量间隔为32字节,处理代码为跳转指令,让所有的中断都跳转到同一个通用处理流程中。
步骤4,当中断发生时,首先保存现场:保存MIPS通用寄存器和SR、EPC寄存器等到堆栈上。可以使用K0和K1这两个保留给中断的专用寄存器,根据ABI规范,t0~t9寄存器在使用前不需保存,可以不用保存它们。
步骤5,读取OSIntNesting的数值,判断当前是否处于中断嵌套状态,如果是首次进入中断,则保存任务现场到任务堆栈中。
步骤6,更新堆栈指针,使其指向到步骤1定义的中断堆栈。这样后续在发生中断的时候,就把前面中断的上下文保存在该中断堆栈上。
步骤7,跳转至OS_IntEnter函数,通知操作***开始中断处理。
步骤8,读取Cause寄存器的请求中断优先级(Requested Interrupt Priority,简称为RIPL)数值,获取该中断的优先级,将该值设置到SR的IPL位上,这样只有高于此优先级的中断才会被CPU识别。
步骤9,将SR中的KSU位、ERL位、以及EXL位清零。
步骤10,将堆栈指针递减,分配堆栈给中断处理程序的参数。
步骤11,获取当前中断优先级,跳转到中断处理程序进行处理。
步骤12,修改SR中的IPL位,进入kernel模式:ERL位、EXL位为0,同时打开中断,允许中断嵌套。
步骤13,释放堆栈。
步骤14,修改SR中的EXL位,使其置1,禁止中断。
步骤15,调用OS_IntExit函数,通知操作***退出中断处理,如果是嵌套中断最外层,则触发一次任务调度。
步骤16,通过读取OSIntNesting来判断中断是否还在嵌套,如果没有中断嵌套,则进行步骤17处理,如果是中断嵌套,则进行步骤18处理。
步骤17,从任务堆栈中恢复现场,通过eret指令,退出中断,返回被打断的任务继续执行。
步骤18,从中断堆栈中恢复CPU状态寄存器。
步骤19,从中断堆栈中恢复CPU的异常返回地址寄存器EPC。
步骤20,从中断堆栈中恢复CPU的通用寄存器。
步骤21,通过eret指令,从中断返回。
综上所述,借助于本发明实施例的技术方案,通过在内存中专门开辟出一块区域,作为中断堆栈使用,发生中断嵌套时的压栈和出栈操作都只使用中断堆栈,从而将任务堆栈与中断堆栈分离,使得在计算任务堆栈大小时,不需要把中断处理(包括中断嵌套)中的内存占用计算到任务堆栈中,只需考虑任务本身及首次中断时所占用的RAM空间大小,提高了RAM的使用效率,进而给上层预留了更多的RAM空间。此外,将所有的中断嵌套中的寄存器压栈都压在中断堆栈中,这样对于任务堆栈内存大小的要求大大降低。
在此提供的算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与基于在此的示教一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (10)
1.一种中断处理方法,其特征在于,适用于基于MIPS32作为处理器并且以μCOS-Ⅱ作为操作***的平台,所述方法包括:
步骤1,在***进行初始化时,对中断及其驱动程序进行初始化,在执行当前任务时发生中断的情况下,将中断现场的上下文信息保存到预先设置的中断堆栈中,并判断是否为中断嵌套,如果判断为否,执行步骤2,否则,执行步骤3;
步骤2,将当前任务现场的上下文信息保存到预先设置的任务堆栈中,并将堆栈指针SP移到所述中断堆栈,执行步骤3;
步骤3,通知***开始进入中断处理,读取中断优先级,打开中断,使能中断嵌套,并在执行中断处理程序后,禁止中断,通知***退出中断处理,并判断是否处于中断嵌套,如果判断为是,执行步骤4,否则,执行步骤5;
步骤4,从所述中断堆栈中恢复保存的所述当前中断现场的上下文信息,并返回上层中断继续执行;
步骤5,从所述任务堆栈中恢复保存的所述当前任务现场的上下文信息,并返回被打断的所述当前任务继续执行。
2.如权利要求1所述的方法,其特征在于,在***进行初始化时,对中断及其驱动程序进行初始化具体包括:
配置所有中断的优先级和触发模式,并禁用所有中断,其中,所述触发模式包括:电平触发或者边缘触发;
获取所有中断的中断号,将相应的中断处理程序与所述中断号相对应;
在使能中断之前将中断处理程序拷贝到其对应的中断向量入口地址上,其中,所述中断向量之间的间隔为32字节。
3.如权利要求1所述的方法,其特征在于,将中断现场的上下文信息保存到预先设置的中断堆栈中具体包括:将中断现场的无内部互锁流水级的微处理器MIPS通用寄存器、状态寄存器SR、以及例外程序寄存器EPC中的信息保存到预先设置的中断堆栈中。
4.如权利要求1所述的方法,其特征在于,将当前任务现场的上下文信息保存到预先设置的任务堆栈中具体包括:
依次将当前任务现场的程序计数器PC、SP、相关寄存器中的信息、以及中断返回地址保存到预先设置的任务堆栈中,其中所述相关寄存器包括SR和其他相关通用寄存器;
将指向最后一个压栈内容的当前任务现场指针保存到预定函数中,其中,所述当前任务现场指针在恢复当前任务时出栈使用。
5.如权利要求1所述的方法,其特征在于,通知***开始进入中断处理,读取中断优先级,打开中断,使能中断嵌套,并在执行中断处理程序后,禁止中断,通知***退出中断处理具体包括:
跳转至操作***中断进入OS_IntEnter函数,通知***开始进入中断处理;
读取原因CAUSE寄存器的请求中断优先级RIPL位,获取所述中断的优先级,并将所述中断的优先级设置到SR的中断优先级IPL位上;
将SR中的KSU位、ERL位、以及EXL位清零;
将SP递减,分配所述中断堆栈给所述中断处理程序的参数;
从所述SR的IPL位上获取所述中断的优先级,根据该优先级跳转到所述中断处理程序进行处理;
修改所述SR的IPL位,并将所述SR的ERL位和EXL位设置为零,同时打开中断,使能中断嵌套;
释放所述中断堆栈,并将所述SR的EXL位置为1,禁止中断;
跳转至***中断退出OS_IntExit函数,通知***退出中断处理。
6.一种中断处理装置,其特征在于,适用于基于MIPS32作为处理器并且以μCOS-Ⅱ作为操作***的平台,所述装置包括:
初始化模块,用于在***进行初始化时,对中断及其驱动程序进行初始化;
第一中断处理模块,用于在执行当前任务时发生中断的情况下,将中断现场的上下文信息保存到预先设置的中断堆栈中,并判断是否为中断嵌套,如果判断为否,调用第二中断处理模块,否则,调用第三中断处理模块;
第二中断处理模块,用于将当前任务现场的上下文信息保存到预先设置的任务堆栈中,并将堆栈指针SP移到所述中断堆栈,调用第三中断处理模块;
第三中断处理模块,用于通知***开始进入中断处理,读取中断优先级,打开中断,使能中断嵌套,并在执行中断处理程序后,禁止中断,通知***退出中断处理,并判断是否处于中断嵌套,如果判断为是,调用中断恢复模块,否则,调用任务恢复模块;
中断恢复模块,用于从所述中断堆栈中恢复保存的所述当前中断现场的上下文信息,并返回上层中断继续执行;
任务恢复模块,用于从所述任务堆栈中恢复保存的所述当前任务现场的上下文信息,并返回被打断的所述当前任务继续执行。
7.如权利要求6所述的装置,其特征在于,所述初始化模块具体用于:
配置所有中断的优先级和触发模式,并禁用所有中断,其中,所述触发模式包括:电平触发或者边缘触发;
获取所有中断的中断号,将相应的中断处理程序与所述中断号相对应;
在使能中断之前将中断处理程序拷贝到其对应的中断向量入口地址上,其中,所述中断向量之间的间隔为32字节。
8.如权利要求6所述的装置,其特征在于,所述第一中断处理模块具体用于:
将中断现场的无内部互锁流水级的微处理器MIPS通用寄存器、状态寄存器SR、以及例外程序寄存器EPC中的信息保存到预先设置的中断堆栈中。
9.如权利要求6所述的装置,其特征在于,所述第二中断处理模块具体用于:
依次将当前任务现场的程序计数器PC、SP、相关寄存器中的信息、以及中断返回地址保存到预先设置的任务堆栈中,其中所述相关寄存器包括SR和其他相关通用寄存器;
将指向最后一个压栈内容的当前任务现场指针保存到预定函数中,其中,所述当前任务现场指针在恢复当前任务时出栈使用。
10.如权利要求6所述的装置,其特征在于,所述第三中断处理模块具体用于:
跳转至操作***中断进入OS_IntEnter函数,通知***开始进入中断处理;
读取原因CAUSE寄存器的请求中断优先级RIPL位,获取所述中断的优先级,并将所述中断的优先级设置到SR的中断优先级IPL位上;
将SR中的KSU位、ERL位、以及EXL位清零;
将SP递减,分配所述中断堆栈给所述中断处理程序的参数;
从所述SR的IPL位上获取所述中断的优先级,根据该优先级跳转到所述中断处理程序进行处理;
修改所述SR的IPL位,并将所述SR的ERL位和EXL位设置为零,同时打开中断,使能中断嵌套;
释放所述中断堆栈,并将所述SR的EXL位置为1,禁止中断;
跳转至***中断退出OS_IntExit函数,通知***退出中断处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210397619.1A CN103778009A (zh) | 2012-10-18 | 2012-10-18 | 中断处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210397619.1A CN103778009A (zh) | 2012-10-18 | 2012-10-18 | 中断处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103778009A true CN103778009A (zh) | 2014-05-07 |
Family
ID=50570285
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210397619.1A Pending CN103778009A (zh) | 2012-10-18 | 2012-10-18 | 中断处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103778009A (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786597A (zh) * | 2014-12-17 | 2016-07-20 | 普天信息技术有限公司 | uCOS-III操作***实现任务切换的方法及装置 |
CN106528461A (zh) * | 2015-09-14 | 2017-03-22 | 三星电子株式会社 | 储存设备及其中断生成方法 |
CN107003965A (zh) * | 2014-12-23 | 2017-08-01 | 英特尔公司 | 向用户级应用传递中断 |
CN107608331A (zh) * | 2017-08-24 | 2018-01-19 | 北京龙鼎源科技股份有限公司 | 非随机中断的诊断方法和装置 |
CN109343950A (zh) * | 2018-10-16 | 2019-02-15 | 南京国电南自维美德自动化有限公司 | 一种适用于Xilinx软核处理器的中断通用处理方法 |
CN109766273A (zh) * | 2018-12-27 | 2019-05-17 | 百富计算机技术(深圳)有限公司 | 死循环的定位方法、装置、计算机设备和存储介质 |
CN110851384A (zh) * | 2018-08-21 | 2020-02-28 | 北京嘉楠捷思信息技术有限公司 | 一种中断处理方法、***及计算机可读存储介质 |
CN111240816A (zh) * | 2020-01-03 | 2020-06-05 | 上海瀚之友信息技术服务有限公司 | 一种程序可中断运行***及方法 |
CN111353595A (zh) * | 2018-12-20 | 2020-06-30 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
CN111782368A (zh) * | 2020-06-30 | 2020-10-16 | 珠海全志科技股份有限公司 | 中断嵌套处理方法、装置、终端及存储介质 |
CN112559047A (zh) * | 2021-02-22 | 2021-03-26 | 南京沁恒微电子股份有限公司 | 一种基于risc-v的中断控制***及方法 |
CN112685147A (zh) * | 2019-10-18 | 2021-04-20 | 龙芯中科技术股份有限公司 | 中断响应方法、装置及可读存储介质 |
CN112988349A (zh) * | 2021-02-24 | 2021-06-18 | 长沙海格北斗信息技术有限公司 | 支持eCos***的中断栈处理方法、打印方法及接收机 |
CN113377511A (zh) * | 2021-06-09 | 2021-09-10 | 杭州电子科技大学 | 用于ARMv7处理器仿真***内的中断嵌套的实现***及方法 |
CN113495759A (zh) * | 2020-04-07 | 2021-10-12 | 北京君正集成电路股份有限公司 | 一种在mips体系实现快速中断响应的方法 |
CN113495760A (zh) * | 2020-04-07 | 2021-10-12 | 北京君正集成电路股份有限公司 | 一种实现在mips体系快速中断响应的*** |
CN116382856A (zh) * | 2023-06-02 | 2023-07-04 | 麒麟软件有限公司 | 基于虚拟化嵌套增强***实时性的方法 |
CN117193979A (zh) * | 2023-09-08 | 2023-12-08 | 上海合芯数字科技有限公司 | 基于独立中断栈的任务处理方法、装置、终端设备及介质 |
CN117573318A (zh) * | 2023-11-24 | 2024-02-20 | 北京智芯微电子科技有限公司 | 中断控制方法、处理器***、芯片及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5161226A (en) * | 1991-05-10 | 1992-11-03 | Jmi Software Consultants Inc. | Microprocessor inverse processor state usage |
US20020019902A1 (en) * | 2000-08-09 | 2002-02-14 | Christie David S | Stack switching mechanism in a computer system |
CN101819539A (zh) * | 2010-04-28 | 2010-09-01 | 中国航天科技集团公司第五研究院第五一三研究所 | 一种μCOS-Ⅱ移植到ARM7的中断嵌套方法 |
CN102012842A (zh) * | 2010-11-09 | 2011-04-13 | 北京神舟航天软件技术有限公司 | 基于独立中断栈的中断退出时抢占调度方法 |
-
2012
- 2012-10-18 CN CN201210397619.1A patent/CN103778009A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5161226A (en) * | 1991-05-10 | 1992-11-03 | Jmi Software Consultants Inc. | Microprocessor inverse processor state usage |
US20020019902A1 (en) * | 2000-08-09 | 2002-02-14 | Christie David S | Stack switching mechanism in a computer system |
CN101819539A (zh) * | 2010-04-28 | 2010-09-01 | 中国航天科技集团公司第五研究院第五一三研究所 | 一种μCOS-Ⅱ移植到ARM7的中断嵌套方法 |
CN102012842A (zh) * | 2010-11-09 | 2011-04-13 | 北京神舟航天软件技术有限公司 | 基于独立中断栈的中断退出时抢占调度方法 |
Non-Patent Citations (2)
Title |
---|
李新颖: "μC/OS-II中的中断机制分析与改进", 《兰州交通大学学报(自然科学版)》 * |
申明远: "32位MIPS构架的流水线的逻辑设计", 《中国优秀硕士论文全文数据库 信息科技辑》 * |
Cited By (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786597A (zh) * | 2014-12-17 | 2016-07-20 | 普天信息技术有限公司 | uCOS-III操作***实现任务切换的方法及装置 |
CN107003965A (zh) * | 2014-12-23 | 2017-08-01 | 英特尔公司 | 向用户级应用传递中断 |
US11797464B2 (en) | 2014-12-23 | 2023-10-24 | Intel Corporation | Delivering interrupts to user-level applications |
US11113217B2 (en) | 2014-12-23 | 2021-09-07 | Intel Corporation | Delivering interrupts to user-level applications |
US10572415B2 (en) | 2014-12-23 | 2020-02-25 | Intel Corporation | Delivering interrupts to user-level applications |
CN106528461A (zh) * | 2015-09-14 | 2017-03-22 | 三星电子株式会社 | 储存设备及其中断生成方法 |
CN107608331A (zh) * | 2017-08-24 | 2018-01-19 | 北京龙鼎源科技股份有限公司 | 非随机中断的诊断方法和装置 |
CN110851384A (zh) * | 2018-08-21 | 2020-02-28 | 北京嘉楠捷思信息技术有限公司 | 一种中断处理方法、***及计算机可读存储介质 |
CN110851384B (zh) * | 2018-08-21 | 2024-06-21 | 嘉楠明芯(北京)科技有限公司 | 一种中断处理方法、***及计算机可读存储介质 |
CN109343950A (zh) * | 2018-10-16 | 2019-02-15 | 南京国电南自维美德自动化有限公司 | 一种适用于Xilinx软核处理器的中断通用处理方法 |
CN109343950B (zh) * | 2018-10-16 | 2021-06-08 | 南京国电南自维美德自动化有限公司 | 一种适用于Xilinx软核处理器的中断通用处理方法 |
CN111353595A (zh) * | 2018-12-20 | 2020-06-30 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
CN109766273A (zh) * | 2018-12-27 | 2019-05-17 | 百富计算机技术(深圳)有限公司 | 死循环的定位方法、装置、计算机设备和存储介质 |
CN112685147A (zh) * | 2019-10-18 | 2021-04-20 | 龙芯中科技术股份有限公司 | 中断响应方法、装置及可读存储介质 |
CN111240816A (zh) * | 2020-01-03 | 2020-06-05 | 上海瀚之友信息技术服务有限公司 | 一种程序可中断运行***及方法 |
CN113495760A (zh) * | 2020-04-07 | 2021-10-12 | 北京君正集成电路股份有限公司 | 一种实现在mips体系快速中断响应的*** |
CN113495759A (zh) * | 2020-04-07 | 2021-10-12 | 北京君正集成电路股份有限公司 | 一种在mips体系实现快速中断响应的方法 |
CN111782368B (zh) * | 2020-06-30 | 2024-02-09 | 珠海全志科技股份有限公司 | 中断嵌套处理方法、装置、终端及存储介质 |
CN111782368A (zh) * | 2020-06-30 | 2020-10-16 | 珠海全志科技股份有限公司 | 中断嵌套处理方法、装置、终端及存储介质 |
CN112559047A (zh) * | 2021-02-22 | 2021-03-26 | 南京沁恒微电子股份有限公司 | 一种基于risc-v的中断控制***及方法 |
US11880706B2 (en) | 2021-02-22 | 2024-01-23 | Nanjing qinheng Microelectronics Co., Ltd. | Interrupt control system and method based on RISC-V |
CN112988349A (zh) * | 2021-02-24 | 2021-06-18 | 长沙海格北斗信息技术有限公司 | 支持eCos***的中断栈处理方法、打印方法及接收机 |
CN113377511B (zh) * | 2021-06-09 | 2024-03-26 | 杭州电子科技大学 | 用于ARMv7处理器仿真***内的中断嵌套的实现***及方法 |
CN113377511A (zh) * | 2021-06-09 | 2021-09-10 | 杭州电子科技大学 | 用于ARMv7处理器仿真***内的中断嵌套的实现***及方法 |
CN116382856A (zh) * | 2023-06-02 | 2023-07-04 | 麒麟软件有限公司 | 基于虚拟化嵌套增强***实时性的方法 |
CN116382856B (zh) * | 2023-06-02 | 2023-09-26 | 麒麟软件有限公司 | 基于虚拟化嵌套增强***实时性的方法 |
CN117193979A (zh) * | 2023-09-08 | 2023-12-08 | 上海合芯数字科技有限公司 | 基于独立中断栈的任务处理方法、装置、终端设备及介质 |
CN117193979B (zh) * | 2023-09-08 | 2024-02-23 | 上海合芯数字科技有限公司 | 基于独立中断栈的任务处理方法、装置、终端设备及介质 |
CN117573318A (zh) * | 2023-11-24 | 2024-02-20 | 北京智芯微电子科技有限公司 | 中断控制方法、处理器***、芯片及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103778009A (zh) | 中断处理方法及装置 | |
CN100432931C (zh) | 嵌入式***动态补丁长跳转的实现方法 | |
US7689749B2 (en) | Interrupt control function adapted to control the execution of interrupt requests of differing criticality | |
CN104115155A (zh) | 在具有安全域和次安全域的数据处理设备中的异常处理 | |
CN103699437A (zh) | 一种资源调度方法及设备 | |
CN102567090A (zh) | 在计算机处理器中创建执行线程的方法和*** | |
CN101847096B (zh) | 包含栈变量函数的优化方法 | |
WO2006132807A2 (en) | Microprocessor instruction that allows system routine calls and returns from all contexts | |
CN106354524A (zh) | 实时更新固件的***和方法 | |
CN101819539A (zh) | 一种μCOS-Ⅱ移植到ARM7的中断嵌套方法 | |
US7607133B2 (en) | Interrupt processing control | |
CN102436390A (zh) | 多核处理器软件升级方法及设备 | |
US7206884B2 (en) | Interrupt priority control within a nested interrupt system | |
US7080178B2 (en) | Interrupt pre-emption and ordering within a data processing system | |
CN105786597A (zh) | uCOS-III操作***实现任务切换的方法及装置 | |
CN103019865A (zh) | 虚拟机监控方法和*** | |
CN108399330B (zh) | 监控可编程逻辑控制器的执行***的***和方法 | |
CN110780999A (zh) | 一种多核cpu的调度***和方法 | |
CN115167977A (zh) | 基于Docker虚拟隔离的目标检测方法及***、设备、存储介质 | |
GB2622349A (en) | Program event recording storage alteration processing for a neural network accelerator instruction | |
CN104424032A (zh) | 多线程处理器中分支预测资源的调度方法、设备和*** | |
US9396044B2 (en) | Memory efficient thread-level speculation | |
CN100495328C (zh) | 用于开发计算机***的装置及其方法 | |
CN113687909A (zh) | 基于微内核的分时vcpu多核调度方法及*** | |
CN112084013B (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140507 |
|
RJ01 | Rejection of invention patent application after publication |