程序中断的处理方法、装置、电子设备及可读存储介质与流程
未命名
09-23
阅读:62
评论:0
1.本发明实施例涉及计算机
技术领域:
:,尤其涉及一种程序中断的处理方法、装置、电子设备及可读存储介质。
背景技术:
::2.中断是指在微处理器运行期间,被微处理器内部或外部事件所打断、暂停当前程序的执行而转去执行一段特定的处理内部或外部时间程序的过程。3.目前,对于存在启动程序和应用程序的微处理器,采用中断偏移寄存器vtor或者ram地址映射特性实现中断处理。由于很多微处理器没有设置vtor寄存器,采用中断偏移寄存器vtor实现中断处的方案应用范围有很大的局限性;ram地址映射特性实现中断处理,具体为将中断向量表完整地复制到ram中,该方案的应用会占用大量的ram资源,降低可用于执行其他业务的ram容量,对微处理器的性能造成严重的消极影响。技术实现要素:4.本发明实施例提供一种程序中断的处理方法、装置、电子设备及可读存储介质,以解决现有的中断处理方案局限性大、占用大量的ram资源对微处理器性能造成严重的消极影响的问题。5.为了解决上述技术问题,本发明是这样实现的:6.第一方面,本发明实施例提供了一种程序中断的处理方法,包括:7.获取中断号;8.若所述中断号指示程序中断,获取目标中断向量表基址,所述目标中断向量表基址与被中断程序对应;9.根据所述中断号以及所述目标中断向量表基址,确定目标中断服务程序地址;10.执行与所述目标中断服务程序地址对应的目标中断服务程序。11.可选地,应用于包括随机存取存储器ram的处理器,12.所述随机存取存储器ram中预设有第一目标数据段,所述第一目标数据段用于存储所述目标中断向量表基址;13.获取目标中断向量表基址,包括:14.从所述第一目标数据段获取所述目标中断向量表基址。15.可选地,还包括:16.若所述中断号指示程序在启动,获取在启动程序的中断向量表基址;17.将所述在启动程序的中断向量表基址存储至所述第一目标数据段,作为所述目标中断向量表基址。18.可选地,所述获取中断号之前,还包括:19.程序在运行,并且所述目标中断向量表基址与在运行程序的中断向量表基址不相同的情况下,采用所述在运行程序的中断向量表基址更新所述目标中断向量表基址。20.可选地,应用于包括只读存储器rom的处理器,21.所述只读存储器rom上预设有第二目标数据段;所述第二目标数据段位于rom起始地址,以使得程序被中断时由被中断地址跳转至所述第二目标数据段;22.执行与所述目标中断服务程序地址对应的目标中断服务程序,包括:23.由所述第二目标数据段跳转至所述目标中断服务程序地址,执行与所述目标中断服务程序地址对应的目标中断服务程序。24.可选地,25.所述第二目标数据段用于存储预设的自定义中断向量表;26.所述执行与所述目标中断服务程序地址对应的目标中断服务程序之前,还包括:27.由被中断地址跳转至所述第二目标数据段,执行与所述自定义中断向量表对应的自定义中断服务程序。28.可选地,29.所述自定义中断向量表包括:30.主堆栈指针msp;31.以及若干自定义中断向量,全部的所述自定义中断向量均指向同一所述自定义中断服务程序。32.第二方面,本发明实施例提供了一种程序中断的处理装置,包括:33.获取模块,用于获取中断号;34.处理模块,用于若所述中断号指示程序中断,获取目标中断向量表基址,所述目标中断向量表基址与被中断程序对应;35.所述处理模块,还用于根据所述中断号以及所述目标中断向量表基址,确定目标中断服务程序地址;36.所述处理模块,还用于执行与所述目标中断服务程序地址对应的目标中断服务程序。37.第三方面,本发明实施例提供了一种电子设备,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面中任一项所述的程序中断的处理方法中的步骤。38.第四方面,本发明实施例提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面中任一项所述的程序中断的处理方法中的步骤。39.在本发明实施例中,通过获取与被中断程序对应的目标中断向量表基址,确定目前中断向量表,并根据中断号以及目标中断向量表基址,确定目标中断服务程序地址;再执行与目标中断服务程序地址对应的目标中断服务程序,实现了不需要中断偏移寄存器vtor的硬件支持的中断处理,能够广泛应用到各类微处理器中,应用范围大;并且,本发明实施例无需将中断向量表完整地复制到ram中,节约了微处理器的ram资源,有利于微处理器保持高性能。附图说明40.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:41.图1为本发明实施例程序中断的处理方法的流程示意图之一;42.图2为本发明实施例程序中断的处理方法的原理示意图;43.图3为本发明实施例程序中断的处理方法的程序空间分布示意图之一;44.图4为本发明实施例程序中断的处理方法的流程示意图之二;45.图5为本发明实施例程序中断的处理方法的程序空间分布示意图之二;46.图6为本发明实施例程序中断的处理方法中自定义中断向量表的内部结构示意图;47.图7为本发明实施例程序中断的处理方法的流程示意图之三;48.图8为本发明实施例程序中断的处理装置的内部结构示意图;49.图9为本发明实施例电子设备的内部结构示意图。具体实施方式50.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。51.本发明实施例提供了一种程序中断的处理方法,参见图1所示,图1为本发明实施例程序中断的处理方法的流程示意图之一,包括:52.步骤11:获取中断号;53.步骤12:若中断号指示程序中断,获取目标中断向量表基址,目标中断向量表基址与被中断程序对应;54.步骤13:根据中断号以及目标中断向量表基址,确定目标中断服务程序地址;55.步骤14:执行与目标中断服务程序地址对应的目标中断服务程序。56.中断是指在微处理器运行期间,被微处理器内部或外部事件所打断、暂停当前程序的执行而转去执行一段特定的处理内部或外部时间程序的过程。外部设备进行i/o操作时,会随机产生中断请求信号。这个信号中会有特定的标志,使计算机能够判断是哪个设备提出中断请求,这个信号就叫做中断号。57.中断号是系统分配给每个中断源的代号,以便识别和处理。中断号在中断处理过程中起到很重要的作用,在采用向量中断方式的中断系统中,微处理器必须通过它才可以找到中断服务程序的入口地址,实现程序的转移。为了在中断向量表中查找中断服务程序的入口地址,可由中断号(n)×4得到一个指针,指向中断向量(即中断服务程序的入口地址)存放在中断向量表的位置,从中取出这个地址(cs:ip),装入代码段寄存器cs和指令指针寄存器ip,即转移到了中断服务程序。58.本发明实施例中,获取中断号,中断号的数值不为0指示程序中断;获取目标中断向量表基址,本发明实施例中的目标中断向量表基址是添加偏移量的基础地址,目标中断向量表基址与被中断程序对应,即目标中断向量表基址用于指示与被中断程序对应的中断向量表;中断向量表基址加上由中断号×4得到的偏移量,得到目标中断向量(即中断服务程序的入口地址);执行与目标中断向量(即中断服务程序的入口地址)对应的目标中断服务程序。59.参见图2所示,图2为本发明实施例程序中断的处理方法的原理示意图,微处理器的存储区中分配第一固定地址,用于存放中断向量表基址。然后构造统一中断入口程序,用于实现中断的跳转。程序包括启动程序和应用程序,上述两种程序在启动及中断过程中,均跳转到统一中断入口程序。示例性的,以启动程序为例,启动程序在自身启动时,获取与启动程序对应的中断向量表基址,将其存储至第一固定地址中;当启动程序被中断时,不再根据物理设置直接跳转至中断服务程序,而是跳转至统一中断入口程序;根据与该次中断对应的中断号、第一固定位置存储的中断向量表基址,得到目标中断服务程序地址;进一步,由统一中断入口程序跳转至目标中断服务程序地址,运行与目标中断程序地址对应的中断服务程序实现正确的中断处理。60.参见图3所示,图3为本发明实施例程序中断的处理方法的程序空间分布示意图之一。示例性的,以应用程序为例,阐述中断向量表基址的作用。在不获取中断向量表基址的情况下,当启动程序被中断时,程序将根据硬件设置由位于图中应用程序区的中断地址跳转至程序的起始地址,即为图中0x00000000;而该地址与启动程序中断向量表对应,不具有与应用程序对应的中断服务程序,无法完成正确的中断处理。在获取中断向量表基址的情况下,当启动程序被中断时,程序将根据中断向量表基址,跳转至应用程序的起始地址,即为图中0x00004000;该地址存储有应用程序中断向量表,具有与应用程序对应的中断服务程序,进一步运行中断服务程序实现正确的中断处理。61.在本发明实施例中,通过获取与被中断程序对应的目标中断向量表基址,确定目前中断向量表,并根据中断号以及目标中断向量表基址,确定目标中断服务程序地址;再执行与目标中断服务程序地址对应的目标中断服务程序,实现了不需要中断偏移寄存器vtor的硬件支持的中断处理,能够广泛应用到各类微处理器中,应用范围大;并且,本发明实施例无需将中断向量表完整地复制到ram中,节约了微处理器的ram资源,有利于微处理器保持高性能。62.本发明的一些实施例中,可选地,应用于包括随机存取存储器ram的处理器,随机存取存储器ram中预设有第一目标数据段,第一目标数据段用于存储目标中断向量表基址;63.获取目标中断向量表基址,包括:64.从第一目标数据段获取目标中断向量表基址。65.随机存取存储器(randomaccessmemory,缩写为ram),也叫主存,是与微处理器直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。ram工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。它与rom的最大区别是数据的易失性,即一旦断电所存储的数据将随之丢失。ram在计算机和数字系统中用来暂时存储程序、数据和中间结果。66.由于ram读写速率快,上述将目标中断向量表基址存储至ram中的第一目标数据段的设置,能够提高获取目标中断向量表基址的速率,也能够提高将目标中断向量表基址保存至ram中的速率,有利于提高程序中断处理的处理效率;并且,相较于现有ram地址映射特性实现中断处理的方案(将中断向量表完整地复制到ram中),上述设置仅将目标中断向量表基址存储至ram中,节约了微处理器的ram资源,有利于微处理器保持高性能。67.本发明的一些实施例中,可选地,参见图4所示,图4为本发明实施例程序中断的处理方法的流程示意图之二,还包括:68.步骤21:若中断号指示程序在启动,获取在启动程序的中断向量表基址;69.步骤22:将在启动程序的中断向量表基址存储至第一目标数据段,作为目标中断向量表基址。70.本发明实施例中,在微处理器由断电状态转为通电状态情况下,所获取的中断号的数值为0,指示程序在启动。ram具有数据易失性,一旦断电所存储的数据将随之丢失。由此,若中断号指示程序在启动,获取在启动程序的中断向量表基址,将在启动程序的中断向量表基址存储至第一目标数据段,作为目标中断向量表基址。上述设置实现了目标中断向量基址的初始设置,使得后续发生中断的情况下,能够从第一目标数据段获取目标中断向量表。71.本发明的一些实施例中,可选地,获取中断号之前,还包括:72.程序在运行,并且目标中断向量表基址与在运行程序的中断向量表基址不相同的情况下,采用在运行程序的中断向量表基址更新目标中断向量表基址。73.示例性的,a程序运行时,a程序为在运行程序,目标中断向量表基址与a程序对应;现a程序运行结束,转为b程序运行,b程序为在运行程序,上述设置即是将目标中断向量表基址由与a程序对应转换为与b程序对应。具体地,采用与b程序对应的中断向量表基址更新与a程序对应的目标中断向量表基址,此后,若发生中断,则获取到的目标中断向量表基址与b程序相同。74.上述设置采用运行程序的中断向量表基址更新目标中断向量表基址,保证了获取到的目标中断向量表基址与被中断程序对应,避免了由于目标中断向量表基址与被中断程序不对应造成的中断处理错误的情况,避免了为改正上述处理错误增加时间成本,提高了中断处理的处理效率。75.本发明的一些实施例中,可选地,应用于包括只读存储器rom的处理器,76.只读存储器rom上预设有第二目标数据段;第二目标数据段位于rom起始地址,以使得程序被中断时由被中断地址跳转至第二目标数据段;77.执行与目标中断服务程序地址对应的目标中断服务程序,包括:78.由第二目标数据段跳转至目标中断服务程序地址,执行与目标中断服务程序地址对应的目标中断服务程序。79.本发明的一些实施例中,可选地,80.第二目标数据段用于存储预设的自定义中断向量表;81.执行与目标中断服务程序地址对应的目标中断服务程序之前,还包括:82.由被中断地址跳转至第二目标数据段,执行与自定义中断向量表对应的自定义中断服务程序。83.参见图5所示,图5为本发明实施例程序中断的处理方法的程序空间分布示意图之二,第二目标数据段位于程序的初始地址,当中断发生时,程序由被中断地址跳转至第二目标数据段,根据存储至第二目标数据段的自定义中断向量表,确定自定义中断服务程序,并执行自定义中断服务程序;得到目标中断服务程序地址之后,由第二目标数据段跳转至目标中断服务程序地址,执行与目标中断服务程序地址对应的目标中断服务程序,实现正确的中断处理。84.示例性的,以启动程序为例,当启动程序被中断时,跳转至自定义中断向量表①;根据与该次中断对应的中断号、从ram中获取(目标)中断向量表基址,得到目标中断服务程序地址,此处的目标中断服务程序地址即为启动程序的中断向量表地址;之后,由自定义中断向量表①跳转至启动程序的中断向量表地址,得到目标中断服务程序地址;进一步运行与目标中断程序地址对应的中断服务程序实现正确的中断处理。85.本发明的一些实施例中,可选地,86.自定义中断向量表包括:87.主堆栈指针msp;88.以及若干自定义中断向量,全部的自定义中断向量均指向同一自定义中断服务程序。89.主堆栈指针msp(mainstackpointer),主堆栈指针总是指向栈顶位置。一般堆栈的栈底不能动,所以数据入栈前要先修改堆栈指针,使它指向新的空余空间然后再把数据存进去,出栈的时候相反。按"先进后出"的原则存取数据。90.参见图6所示,图6为本发明实施例程序中断的处理方法中自定义中断向量表的内部结构示意图。启动程序中,自定义中断向量表①与启动程序中断向量表的容量一致,自定义中断向量表①的初始地址为主栈指针msp,自定义中断向量均为cotex_m_vector_entry,自定义中断向量cotex_m_vector_entry所对应的自定义中断服务程序即为图2所示的同一中断入口程序。应用程序中,自定义中断向量表②的容量小于应用程序中断向量表,自定义中断向量表②包括:位于自身初始地址的一个msp,以及自定义中断向量cotex_m_vector_entry。自定义中断向量cotex_m_vector_entry所对应的自定义中断服务程序即为图2所示的同一中断入口程序。自定义中断向量表①与自定义中断向量表②存在容量差别的原因在于:无论启动程序被中断,还是应用程序被中断,均通过启动程序中的自定义中断向量①中的统一中断入口程序跳转至目标中断服务程序;应用程序中的自定义中断向量表②,仅在应用程序启动时提供msp和复位向量地址。91.示例性的,当启动程序被中断时,不再根据物理设置直接跳转至中断服务程序,而是跳转至与cotex_m_vector_entry对应的自定义中断服务程序;根据与该次中断对应的中断号及中断向量表基址,得到目标中断服务程序地址;之后,由与cotex_m_vector_entry对应的自定义中断服务程序跳转至目标中断服务程序地址,运行与目标中断程序地址对应的中断服务程序实现正确的中断处理。92.本发明的一些实施例中,可选地,实施本发明实施例程序中断的处理方法的步骤,包括:93.a)定义数据段94.链接文件中,在rom的起始地址定义一个数据段(vtor_table),用于存放自定义中断向量表;在ram的起始地址,定义一个数据段(reserved_ram),用于存放中断向量表的基址。95.b)构造自定义中断向量表96.定义一个参数和返回值均为void类型的程序指针类型的数组,指定其链接到vtor_table段。97.c)初始化中断向量表基址98.定义一个32位大小的变量(rsv_ram),指定其链接reserved_ram段,rsv_ram初始化值为0。程序启动时,rsv_ram被赋值为与在运行程序对应的中断向量表基址。99.d)实现统一中断入口程序100.定义一个参数和返回值均为void类型的程序(cotex_m_vector_entry),用以实现中断服务程序的跳转。101.本发明的一些实施例中,可选地,基于上述实施本发明实施例程序中断的处理方法的步骤,参见图7所示,图7为本发明实施例程序中断的处理方法的流程示意图之三,中断处理的具体步骤为:102.①取中断源:读取中断程序状态寄存器(ipsr),获取中断源对应的中断号。103.②判断中断号:若中断号为0,表示微处理器处于程序启动过程中,将当前运行程序的中断向量表基址存储至rsv_ram中,为后续中断跳转提供目标中断向量基址(基址被保存到特殊的变量中,例如keil中为__vectors,gcc中为g_pfnvectors)。启动过程中需手动将中断号置为1,调用复位中断服务程序reset_handler,完成初始化。104.③判断中断号:若中断号不为0,表示微处理器处于程序中断过程中,rsv_ram中存储的目标中断向量表基址加上由中断号×4得到的偏移值,计算得到目标中断服务程序地址。105.④中断跳转:根据计算得到中断服务程序地址,跳转到中断服务程序。106.上述中断处理的步骤中,存在4种组合过程,具体如下:107.a.启动程序的启动过程108.微处理器从地址0x00000000获取msp,从0x0000000获取到统一中断入口程序地址,执行统一中断入口程序。读取当前中断号为0,取出启动程序的原始中断向量表基址,填入rsv_ram中,并将中断号置为1。跳转到目标中断向量表中的复位向量,以执行初始化程序。最后跳转到main程序,完成启动。109.b.启动程序的中断过程110.执行统一中断入口程序,读取当前中断号为n,获取rsv_ram中的中断向量表基址,偏移值为n×4,跳转到基址+n×4对应的地址,运行与基址+n×4地址对应的中断服务程序,完成中断处理。111.c.应用程序的启动过程112.微处理器从启动程序跳转到应用程序,执行统一中断入口程序。获取中断号为0,获取应用程序的中断向量表基址,填入rsv_ram中,并将中断号置为1。跳转到目标中断向量表中的复位向量,以执行初始化程序。最后跳转到main程序,完成启动。113.d.应用程序的中断过程114.执行统一中断入口程序,读取当前中断号为n,获取rsv_ram中的中断向量表基址(已经在启动过程中修改为应用程序的中断向量表基址),偏移值为n×4,跳转到基址+n×4对应的地址,运行与基址+n×4地址对应的中断服务程序,完成中断处理。115.综上,在采用向量表重映射特性和ram地址映射特性的情况下,启动程序和应用程序都可以实现各自的启动过程和中断过程。实现了不需要中断偏移寄存器vtor的硬件支持的中断处理,能够广泛应用到各类微处理器中,应用范围大;并且,相较于现有ram地址映射特性实现中断处理的方案(将中断向量表完整地复制到ram中),上述设置仅将目标中断向量表基址存储至ram中,仅占用4个字节的ram空间,节约了微处理器的ram资源,有利于微处理器保持高性能。116.本发明实施例提供了一种程序中断的处理装置,参见图8所示,图8为本发明实施例程序中断的处理装置30的内部结构示意图,包括:117.获取模块31,用于获取中断号;118.处理模块32,用于若中断号指示程序中断,获取目标中断向量表基址,目标中断向量表基址与被中断程序对应;119.处理模块32,还用于根据中断号以及目标中断向量表基址,确定目标中断服务程序地址;120.处理模块32,还用于执行与目标中断服务程序地址对应的目标中断服务程序。121.本发明的一些实施例中,可选地,122.处理模块32,还用于从第一目标数据段获取目标中断向量表基址。123.本发明的一些实施例中,可选地,124.处理模块32,用于若中断号指示程序在启动,获取在启动程序的中断向量表基址;125.处理模块32,用于将在启动程序的中断向量表基址存储至第一目标数据段,作为目标中断向量表基址。126.本发明的一些实施例中,可选地,127.处理模块32,用于程序在运行,并且目标中断向量表基址与在运行程序的中断向量表基址不相同的情况下,采用在运行程序的中断向量表基址更新目标中断向量表基址。128.本发明的一些实施例中,可选地,129.处理模块32,用于由第二目标数据段跳转至目标中断服务程序地址,执行与目标中断服务程序地址对应的目标中断服务程序。130.本发明的一些实施例中,可选地,131.处理模块32,用于第二目标数据段用于存储预设的自定义中断向量表;132.处理模块32,用于执行与目标中断服务程序地址对应的目标中断服务程序之前,还包括:133.处理模块32,用于由被中断地址跳转至第二目标数据段,执行与自定义中断向量表对应的自定义中断服务程序。134.本技术实施例提供的程序中断的处理装置能够实现图1至图7的方法实施例实现的各个过程,并达到相同的技术效果,为避免重复,这里不再赘述。135.本发明实施例提供了一种电子设备40,参见图9所示,图9为本发明实施例电子设备40的内部结构示意图,包括处理器41,存储器42及存储在存储器42上并可在处理器41上运行的程序或指令,程序或指令被处理器执行时实现本发明的任一项程序中断的处理方法中的步骤。136.本发明实施例提供了一种可读存储介质,可读存储介质上存储程序或指令,程序或指令被处理器执行时实现如上述任一项的程序中断的处理方法的实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。137.其中,所述的可读存储介质,如只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁碟或者光盘等。138.上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。当前第1页12当前第1页12
技术特征:
1.一种程序中断的处理方法,其特征在于:包括:获取中断号;若所述中断号指示程序中断,获取目标中断向量表基址,所述目标中断向量表基址与被中断程序对应;根据所述中断号以及所述目标中断向量表基址,确定目标中断服务程序地址;执行与所述目标中断服务程序地址对应的目标中断服务程序。2.根据权利要求1所述的程序中断的处理方法,其特征在于:应用于包括随机存取存储器ram的处理器,所述随机存取存储器ram中预设有第一目标数据段,所述第一目标数据段用于存储所述目标中断向量表基址;获取目标中断向量表基址,包括:从所述第一目标数据段获取所述目标中断向量表基址。3.根据权利要求2所述的程序中断的处理方法,其特征在于:还包括:若所述中断号指示程序在启动,获取在启动程序的中断向量表基址;将所述在启动程序的中断向量表基址存储至所述第一目标数据段,作为所述目标中断向量表基址。4.根据权利要求1所述的程序中断的处理方法,其特征在于:所述获取中断号之前,还包括:程序在运行,并且所述目标中断向量表基址与在运行程序的中断向量表基址不相同的情况下,采用所述在运行程序的中断向量表基址更新所述目标中断向量表基址。5.根据权利要求1所述的程序中断的处理方法,其特征在于:应用于包括只读存储器rom的处理器,所述只读存储器rom上预设有第二目标数据段;所述第二目标数据段位于rom起始地址,以使得程序被中断时由被中断地址跳转至所述第二目标数据段;执行与所述目标中断服务程序地址对应的目标中断服务程序,包括:由所述第二目标数据段跳转至所述目标中断服务程序地址,执行与所述目标中断服务程序地址对应的目标中断服务程序。6.根据权利要求5所述的程序中断的处理方法,其特征在于:所述第二目标数据段用于存储预设的自定义中断向量表;所述执行与所述目标中断服务程序地址对应的目标中断服务程序之前,还包括:由被中断地址跳转至所述第二目标数据段,执行与所述自定义中断向量表对应的自定义中断服务程序。7.根据权利要求6所述的程序中断的处理方法,其特征在于:所述自定义中断向量表包括:主堆栈指针msp;以及若干自定义中断向量,全部的所述自定义中断向量均指向同一所述自定义中断服务程序。8.一种程序中断的处理装置,其特征在于:包括:获取模块,用于获取中断号;
处理模块,用于若所述中断号指示程序中断,获取目标中断向量表基址,所述目标中断向量表基址与被中断程序对应;所述处理模块,还用于根据所述中断号以及所述目标中断向量表基址,确定目标中断服务程序地址;所述处理模块,还用于执行与所述目标中断服务程序地址对应的目标中断服务程序。9.一种电子设备,其特征在于:包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1至7中任一项所述的程序中断的处理方法中的步骤。10.一种可读存储介质,其特征在于:所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如权利要求1至7中任一项所述的程序中断的处理方法中的步骤。
技术总结
本发明提供一种程序中断的处理方法、装置、电子设备及可读存储介质,其中,方法包括:获取中断号;若所述中断号指示程序中断,获取目标中断向量表基址,所述目标中断向量表基址与被中断程序对应;根据所述中断号以及所述目标中断向量表基址,确定目标中断服务程序地址;执行与所述目标中断服务程序地址对应的目标中断服务程序。本发明不需要中断偏移寄存器VTOR的硬件支持,能够广泛应用到各类微处理器中,应用范围大;并且,本发明无需将中断向量表完整地复制到RAM中,节约了微处理器的RAM资源,有利于微处理器保持高性能。有利于微处理器保持高性能。有利于微处理器保持高性能。
技术研发人员:周建华 张猛 覃攀
受保护的技术使用者:中国移动通信集团有限公司
技术研发日:2022.03.17
技术公布日:2023/9/22
技术领域:
:,尤其涉及一种程序中断的处理方法、装置、电子设备及可读存储介质。
背景技术:
::2.中断是指在微处理器运行期间,被微处理器内部或外部事件所打断、暂停当前程序的执行而转去执行一段特定的处理内部或外部时间程序的过程。3.目前,对于存在启动程序和应用程序的微处理器,采用中断偏移寄存器vtor或者ram地址映射特性实现中断处理。由于很多微处理器没有设置vtor寄存器,采用中断偏移寄存器vtor实现中断处的方案应用范围有很大的局限性;ram地址映射特性实现中断处理,具体为将中断向量表完整地复制到ram中,该方案的应用会占用大量的ram资源,降低可用于执行其他业务的ram容量,对微处理器的性能造成严重的消极影响。技术实现要素:4.本发明实施例提供一种程序中断的处理方法、装置、电子设备及可读存储介质,以解决现有的中断处理方案局限性大、占用大量的ram资源对微处理器性能造成严重的消极影响的问题。5.为了解决上述技术问题,本发明是这样实现的:6.第一方面,本发明实施例提供了一种程序中断的处理方法,包括:7.获取中断号;8.若所述中断号指示程序中断,获取目标中断向量表基址,所述目标中断向量表基址与被中断程序对应;9.根据所述中断号以及所述目标中断向量表基址,确定目标中断服务程序地址;10.执行与所述目标中断服务程序地址对应的目标中断服务程序。11.可选地,应用于包括随机存取存储器ram的处理器,12.所述随机存取存储器ram中预设有第一目标数据段,所述第一目标数据段用于存储所述目标中断向量表基址;13.获取目标中断向量表基址,包括:14.从所述第一目标数据段获取所述目标中断向量表基址。15.可选地,还包括:16.若所述中断号指示程序在启动,获取在启动程序的中断向量表基址;17.将所述在启动程序的中断向量表基址存储至所述第一目标数据段,作为所述目标中断向量表基址。18.可选地,所述获取中断号之前,还包括:19.程序在运行,并且所述目标中断向量表基址与在运行程序的中断向量表基址不相同的情况下,采用所述在运行程序的中断向量表基址更新所述目标中断向量表基址。20.可选地,应用于包括只读存储器rom的处理器,21.所述只读存储器rom上预设有第二目标数据段;所述第二目标数据段位于rom起始地址,以使得程序被中断时由被中断地址跳转至所述第二目标数据段;22.执行与所述目标中断服务程序地址对应的目标中断服务程序,包括:23.由所述第二目标数据段跳转至所述目标中断服务程序地址,执行与所述目标中断服务程序地址对应的目标中断服务程序。24.可选地,25.所述第二目标数据段用于存储预设的自定义中断向量表;26.所述执行与所述目标中断服务程序地址对应的目标中断服务程序之前,还包括:27.由被中断地址跳转至所述第二目标数据段,执行与所述自定义中断向量表对应的自定义中断服务程序。28.可选地,29.所述自定义中断向量表包括:30.主堆栈指针msp;31.以及若干自定义中断向量,全部的所述自定义中断向量均指向同一所述自定义中断服务程序。32.第二方面,本发明实施例提供了一种程序中断的处理装置,包括:33.获取模块,用于获取中断号;34.处理模块,用于若所述中断号指示程序中断,获取目标中断向量表基址,所述目标中断向量表基址与被中断程序对应;35.所述处理模块,还用于根据所述中断号以及所述目标中断向量表基址,确定目标中断服务程序地址;36.所述处理模块,还用于执行与所述目标中断服务程序地址对应的目标中断服务程序。37.第三方面,本发明实施例提供了一种电子设备,包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面中任一项所述的程序中断的处理方法中的步骤。38.第四方面,本发明实施例提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面中任一项所述的程序中断的处理方法中的步骤。39.在本发明实施例中,通过获取与被中断程序对应的目标中断向量表基址,确定目前中断向量表,并根据中断号以及目标中断向量表基址,确定目标中断服务程序地址;再执行与目标中断服务程序地址对应的目标中断服务程序,实现了不需要中断偏移寄存器vtor的硬件支持的中断处理,能够广泛应用到各类微处理器中,应用范围大;并且,本发明实施例无需将中断向量表完整地复制到ram中,节约了微处理器的ram资源,有利于微处理器保持高性能。附图说明40.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:41.图1为本发明实施例程序中断的处理方法的流程示意图之一;42.图2为本发明实施例程序中断的处理方法的原理示意图;43.图3为本发明实施例程序中断的处理方法的程序空间分布示意图之一;44.图4为本发明实施例程序中断的处理方法的流程示意图之二;45.图5为本发明实施例程序中断的处理方法的程序空间分布示意图之二;46.图6为本发明实施例程序中断的处理方法中自定义中断向量表的内部结构示意图;47.图7为本发明实施例程序中断的处理方法的流程示意图之三;48.图8为本发明实施例程序中断的处理装置的内部结构示意图;49.图9为本发明实施例电子设备的内部结构示意图。具体实施方式50.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。51.本发明实施例提供了一种程序中断的处理方法,参见图1所示,图1为本发明实施例程序中断的处理方法的流程示意图之一,包括:52.步骤11:获取中断号;53.步骤12:若中断号指示程序中断,获取目标中断向量表基址,目标中断向量表基址与被中断程序对应;54.步骤13:根据中断号以及目标中断向量表基址,确定目标中断服务程序地址;55.步骤14:执行与目标中断服务程序地址对应的目标中断服务程序。56.中断是指在微处理器运行期间,被微处理器内部或外部事件所打断、暂停当前程序的执行而转去执行一段特定的处理内部或外部时间程序的过程。外部设备进行i/o操作时,会随机产生中断请求信号。这个信号中会有特定的标志,使计算机能够判断是哪个设备提出中断请求,这个信号就叫做中断号。57.中断号是系统分配给每个中断源的代号,以便识别和处理。中断号在中断处理过程中起到很重要的作用,在采用向量中断方式的中断系统中,微处理器必须通过它才可以找到中断服务程序的入口地址,实现程序的转移。为了在中断向量表中查找中断服务程序的入口地址,可由中断号(n)×4得到一个指针,指向中断向量(即中断服务程序的入口地址)存放在中断向量表的位置,从中取出这个地址(cs:ip),装入代码段寄存器cs和指令指针寄存器ip,即转移到了中断服务程序。58.本发明实施例中,获取中断号,中断号的数值不为0指示程序中断;获取目标中断向量表基址,本发明实施例中的目标中断向量表基址是添加偏移量的基础地址,目标中断向量表基址与被中断程序对应,即目标中断向量表基址用于指示与被中断程序对应的中断向量表;中断向量表基址加上由中断号×4得到的偏移量,得到目标中断向量(即中断服务程序的入口地址);执行与目标中断向量(即中断服务程序的入口地址)对应的目标中断服务程序。59.参见图2所示,图2为本发明实施例程序中断的处理方法的原理示意图,微处理器的存储区中分配第一固定地址,用于存放中断向量表基址。然后构造统一中断入口程序,用于实现中断的跳转。程序包括启动程序和应用程序,上述两种程序在启动及中断过程中,均跳转到统一中断入口程序。示例性的,以启动程序为例,启动程序在自身启动时,获取与启动程序对应的中断向量表基址,将其存储至第一固定地址中;当启动程序被中断时,不再根据物理设置直接跳转至中断服务程序,而是跳转至统一中断入口程序;根据与该次中断对应的中断号、第一固定位置存储的中断向量表基址,得到目标中断服务程序地址;进一步,由统一中断入口程序跳转至目标中断服务程序地址,运行与目标中断程序地址对应的中断服务程序实现正确的中断处理。60.参见图3所示,图3为本发明实施例程序中断的处理方法的程序空间分布示意图之一。示例性的,以应用程序为例,阐述中断向量表基址的作用。在不获取中断向量表基址的情况下,当启动程序被中断时,程序将根据硬件设置由位于图中应用程序区的中断地址跳转至程序的起始地址,即为图中0x00000000;而该地址与启动程序中断向量表对应,不具有与应用程序对应的中断服务程序,无法完成正确的中断处理。在获取中断向量表基址的情况下,当启动程序被中断时,程序将根据中断向量表基址,跳转至应用程序的起始地址,即为图中0x00004000;该地址存储有应用程序中断向量表,具有与应用程序对应的中断服务程序,进一步运行中断服务程序实现正确的中断处理。61.在本发明实施例中,通过获取与被中断程序对应的目标中断向量表基址,确定目前中断向量表,并根据中断号以及目标中断向量表基址,确定目标中断服务程序地址;再执行与目标中断服务程序地址对应的目标中断服务程序,实现了不需要中断偏移寄存器vtor的硬件支持的中断处理,能够广泛应用到各类微处理器中,应用范围大;并且,本发明实施例无需将中断向量表完整地复制到ram中,节约了微处理器的ram资源,有利于微处理器保持高性能。62.本发明的一些实施例中,可选地,应用于包括随机存取存储器ram的处理器,随机存取存储器ram中预设有第一目标数据段,第一目标数据段用于存储目标中断向量表基址;63.获取目标中断向量表基址,包括:64.从第一目标数据段获取目标中断向量表基址。65.随机存取存储器(randomaccessmemory,缩写为ram),也叫主存,是与微处理器直接交换数据的内部存储器。它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。ram工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。它与rom的最大区别是数据的易失性,即一旦断电所存储的数据将随之丢失。ram在计算机和数字系统中用来暂时存储程序、数据和中间结果。66.由于ram读写速率快,上述将目标中断向量表基址存储至ram中的第一目标数据段的设置,能够提高获取目标中断向量表基址的速率,也能够提高将目标中断向量表基址保存至ram中的速率,有利于提高程序中断处理的处理效率;并且,相较于现有ram地址映射特性实现中断处理的方案(将中断向量表完整地复制到ram中),上述设置仅将目标中断向量表基址存储至ram中,节约了微处理器的ram资源,有利于微处理器保持高性能。67.本发明的一些实施例中,可选地,参见图4所示,图4为本发明实施例程序中断的处理方法的流程示意图之二,还包括:68.步骤21:若中断号指示程序在启动,获取在启动程序的中断向量表基址;69.步骤22:将在启动程序的中断向量表基址存储至第一目标数据段,作为目标中断向量表基址。70.本发明实施例中,在微处理器由断电状态转为通电状态情况下,所获取的中断号的数值为0,指示程序在启动。ram具有数据易失性,一旦断电所存储的数据将随之丢失。由此,若中断号指示程序在启动,获取在启动程序的中断向量表基址,将在启动程序的中断向量表基址存储至第一目标数据段,作为目标中断向量表基址。上述设置实现了目标中断向量基址的初始设置,使得后续发生中断的情况下,能够从第一目标数据段获取目标中断向量表。71.本发明的一些实施例中,可选地,获取中断号之前,还包括:72.程序在运行,并且目标中断向量表基址与在运行程序的中断向量表基址不相同的情况下,采用在运行程序的中断向量表基址更新目标中断向量表基址。73.示例性的,a程序运行时,a程序为在运行程序,目标中断向量表基址与a程序对应;现a程序运行结束,转为b程序运行,b程序为在运行程序,上述设置即是将目标中断向量表基址由与a程序对应转换为与b程序对应。具体地,采用与b程序对应的中断向量表基址更新与a程序对应的目标中断向量表基址,此后,若发生中断,则获取到的目标中断向量表基址与b程序相同。74.上述设置采用运行程序的中断向量表基址更新目标中断向量表基址,保证了获取到的目标中断向量表基址与被中断程序对应,避免了由于目标中断向量表基址与被中断程序不对应造成的中断处理错误的情况,避免了为改正上述处理错误增加时间成本,提高了中断处理的处理效率。75.本发明的一些实施例中,可选地,应用于包括只读存储器rom的处理器,76.只读存储器rom上预设有第二目标数据段;第二目标数据段位于rom起始地址,以使得程序被中断时由被中断地址跳转至第二目标数据段;77.执行与目标中断服务程序地址对应的目标中断服务程序,包括:78.由第二目标数据段跳转至目标中断服务程序地址,执行与目标中断服务程序地址对应的目标中断服务程序。79.本发明的一些实施例中,可选地,80.第二目标数据段用于存储预设的自定义中断向量表;81.执行与目标中断服务程序地址对应的目标中断服务程序之前,还包括:82.由被中断地址跳转至第二目标数据段,执行与自定义中断向量表对应的自定义中断服务程序。83.参见图5所示,图5为本发明实施例程序中断的处理方法的程序空间分布示意图之二,第二目标数据段位于程序的初始地址,当中断发生时,程序由被中断地址跳转至第二目标数据段,根据存储至第二目标数据段的自定义中断向量表,确定自定义中断服务程序,并执行自定义中断服务程序;得到目标中断服务程序地址之后,由第二目标数据段跳转至目标中断服务程序地址,执行与目标中断服务程序地址对应的目标中断服务程序,实现正确的中断处理。84.示例性的,以启动程序为例,当启动程序被中断时,跳转至自定义中断向量表①;根据与该次中断对应的中断号、从ram中获取(目标)中断向量表基址,得到目标中断服务程序地址,此处的目标中断服务程序地址即为启动程序的中断向量表地址;之后,由自定义中断向量表①跳转至启动程序的中断向量表地址,得到目标中断服务程序地址;进一步运行与目标中断程序地址对应的中断服务程序实现正确的中断处理。85.本发明的一些实施例中,可选地,86.自定义中断向量表包括:87.主堆栈指针msp;88.以及若干自定义中断向量,全部的自定义中断向量均指向同一自定义中断服务程序。89.主堆栈指针msp(mainstackpointer),主堆栈指针总是指向栈顶位置。一般堆栈的栈底不能动,所以数据入栈前要先修改堆栈指针,使它指向新的空余空间然后再把数据存进去,出栈的时候相反。按"先进后出"的原则存取数据。90.参见图6所示,图6为本发明实施例程序中断的处理方法中自定义中断向量表的内部结构示意图。启动程序中,自定义中断向量表①与启动程序中断向量表的容量一致,自定义中断向量表①的初始地址为主栈指针msp,自定义中断向量均为cotex_m_vector_entry,自定义中断向量cotex_m_vector_entry所对应的自定义中断服务程序即为图2所示的同一中断入口程序。应用程序中,自定义中断向量表②的容量小于应用程序中断向量表,自定义中断向量表②包括:位于自身初始地址的一个msp,以及自定义中断向量cotex_m_vector_entry。自定义中断向量cotex_m_vector_entry所对应的自定义中断服务程序即为图2所示的同一中断入口程序。自定义中断向量表①与自定义中断向量表②存在容量差别的原因在于:无论启动程序被中断,还是应用程序被中断,均通过启动程序中的自定义中断向量①中的统一中断入口程序跳转至目标中断服务程序;应用程序中的自定义中断向量表②,仅在应用程序启动时提供msp和复位向量地址。91.示例性的,当启动程序被中断时,不再根据物理设置直接跳转至中断服务程序,而是跳转至与cotex_m_vector_entry对应的自定义中断服务程序;根据与该次中断对应的中断号及中断向量表基址,得到目标中断服务程序地址;之后,由与cotex_m_vector_entry对应的自定义中断服务程序跳转至目标中断服务程序地址,运行与目标中断程序地址对应的中断服务程序实现正确的中断处理。92.本发明的一些实施例中,可选地,实施本发明实施例程序中断的处理方法的步骤,包括:93.a)定义数据段94.链接文件中,在rom的起始地址定义一个数据段(vtor_table),用于存放自定义中断向量表;在ram的起始地址,定义一个数据段(reserved_ram),用于存放中断向量表的基址。95.b)构造自定义中断向量表96.定义一个参数和返回值均为void类型的程序指针类型的数组,指定其链接到vtor_table段。97.c)初始化中断向量表基址98.定义一个32位大小的变量(rsv_ram),指定其链接reserved_ram段,rsv_ram初始化值为0。程序启动时,rsv_ram被赋值为与在运行程序对应的中断向量表基址。99.d)实现统一中断入口程序100.定义一个参数和返回值均为void类型的程序(cotex_m_vector_entry),用以实现中断服务程序的跳转。101.本发明的一些实施例中,可选地,基于上述实施本发明实施例程序中断的处理方法的步骤,参见图7所示,图7为本发明实施例程序中断的处理方法的流程示意图之三,中断处理的具体步骤为:102.①取中断源:读取中断程序状态寄存器(ipsr),获取中断源对应的中断号。103.②判断中断号:若中断号为0,表示微处理器处于程序启动过程中,将当前运行程序的中断向量表基址存储至rsv_ram中,为后续中断跳转提供目标中断向量基址(基址被保存到特殊的变量中,例如keil中为__vectors,gcc中为g_pfnvectors)。启动过程中需手动将中断号置为1,调用复位中断服务程序reset_handler,完成初始化。104.③判断中断号:若中断号不为0,表示微处理器处于程序中断过程中,rsv_ram中存储的目标中断向量表基址加上由中断号×4得到的偏移值,计算得到目标中断服务程序地址。105.④中断跳转:根据计算得到中断服务程序地址,跳转到中断服务程序。106.上述中断处理的步骤中,存在4种组合过程,具体如下:107.a.启动程序的启动过程108.微处理器从地址0x00000000获取msp,从0x0000000获取到统一中断入口程序地址,执行统一中断入口程序。读取当前中断号为0,取出启动程序的原始中断向量表基址,填入rsv_ram中,并将中断号置为1。跳转到目标中断向量表中的复位向量,以执行初始化程序。最后跳转到main程序,完成启动。109.b.启动程序的中断过程110.执行统一中断入口程序,读取当前中断号为n,获取rsv_ram中的中断向量表基址,偏移值为n×4,跳转到基址+n×4对应的地址,运行与基址+n×4地址对应的中断服务程序,完成中断处理。111.c.应用程序的启动过程112.微处理器从启动程序跳转到应用程序,执行统一中断入口程序。获取中断号为0,获取应用程序的中断向量表基址,填入rsv_ram中,并将中断号置为1。跳转到目标中断向量表中的复位向量,以执行初始化程序。最后跳转到main程序,完成启动。113.d.应用程序的中断过程114.执行统一中断入口程序,读取当前中断号为n,获取rsv_ram中的中断向量表基址(已经在启动过程中修改为应用程序的中断向量表基址),偏移值为n×4,跳转到基址+n×4对应的地址,运行与基址+n×4地址对应的中断服务程序,完成中断处理。115.综上,在采用向量表重映射特性和ram地址映射特性的情况下,启动程序和应用程序都可以实现各自的启动过程和中断过程。实现了不需要中断偏移寄存器vtor的硬件支持的中断处理,能够广泛应用到各类微处理器中,应用范围大;并且,相较于现有ram地址映射特性实现中断处理的方案(将中断向量表完整地复制到ram中),上述设置仅将目标中断向量表基址存储至ram中,仅占用4个字节的ram空间,节约了微处理器的ram资源,有利于微处理器保持高性能。116.本发明实施例提供了一种程序中断的处理装置,参见图8所示,图8为本发明实施例程序中断的处理装置30的内部结构示意图,包括:117.获取模块31,用于获取中断号;118.处理模块32,用于若中断号指示程序中断,获取目标中断向量表基址,目标中断向量表基址与被中断程序对应;119.处理模块32,还用于根据中断号以及目标中断向量表基址,确定目标中断服务程序地址;120.处理模块32,还用于执行与目标中断服务程序地址对应的目标中断服务程序。121.本发明的一些实施例中,可选地,122.处理模块32,还用于从第一目标数据段获取目标中断向量表基址。123.本发明的一些实施例中,可选地,124.处理模块32,用于若中断号指示程序在启动,获取在启动程序的中断向量表基址;125.处理模块32,用于将在启动程序的中断向量表基址存储至第一目标数据段,作为目标中断向量表基址。126.本发明的一些实施例中,可选地,127.处理模块32,用于程序在运行,并且目标中断向量表基址与在运行程序的中断向量表基址不相同的情况下,采用在运行程序的中断向量表基址更新目标中断向量表基址。128.本发明的一些实施例中,可选地,129.处理模块32,用于由第二目标数据段跳转至目标中断服务程序地址,执行与目标中断服务程序地址对应的目标中断服务程序。130.本发明的一些实施例中,可选地,131.处理模块32,用于第二目标数据段用于存储预设的自定义中断向量表;132.处理模块32,用于执行与目标中断服务程序地址对应的目标中断服务程序之前,还包括:133.处理模块32,用于由被中断地址跳转至第二目标数据段,执行与自定义中断向量表对应的自定义中断服务程序。134.本技术实施例提供的程序中断的处理装置能够实现图1至图7的方法实施例实现的各个过程,并达到相同的技术效果,为避免重复,这里不再赘述。135.本发明实施例提供了一种电子设备40,参见图9所示,图9为本发明实施例电子设备40的内部结构示意图,包括处理器41,存储器42及存储在存储器42上并可在处理器41上运行的程序或指令,程序或指令被处理器执行时实现本发明的任一项程序中断的处理方法中的步骤。136.本发明实施例提供了一种可读存储介质,可读存储介质上存储程序或指令,程序或指令被处理器执行时实现如上述任一项的程序中断的处理方法的实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。137.其中,所述的可读存储介质,如只读存储器(read-onlymemory,简称rom)、随机存取存储器(randomaccessmemory,简称ram)、磁碟或者光盘等。138.上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。当前第1页12当前第1页12
技术特征:
1.一种程序中断的处理方法,其特征在于:包括:获取中断号;若所述中断号指示程序中断,获取目标中断向量表基址,所述目标中断向量表基址与被中断程序对应;根据所述中断号以及所述目标中断向量表基址,确定目标中断服务程序地址;执行与所述目标中断服务程序地址对应的目标中断服务程序。2.根据权利要求1所述的程序中断的处理方法,其特征在于:应用于包括随机存取存储器ram的处理器,所述随机存取存储器ram中预设有第一目标数据段,所述第一目标数据段用于存储所述目标中断向量表基址;获取目标中断向量表基址,包括:从所述第一目标数据段获取所述目标中断向量表基址。3.根据权利要求2所述的程序中断的处理方法,其特征在于:还包括:若所述中断号指示程序在启动,获取在启动程序的中断向量表基址;将所述在启动程序的中断向量表基址存储至所述第一目标数据段,作为所述目标中断向量表基址。4.根据权利要求1所述的程序中断的处理方法,其特征在于:所述获取中断号之前,还包括:程序在运行,并且所述目标中断向量表基址与在运行程序的中断向量表基址不相同的情况下,采用所述在运行程序的中断向量表基址更新所述目标中断向量表基址。5.根据权利要求1所述的程序中断的处理方法,其特征在于:应用于包括只读存储器rom的处理器,所述只读存储器rom上预设有第二目标数据段;所述第二目标数据段位于rom起始地址,以使得程序被中断时由被中断地址跳转至所述第二目标数据段;执行与所述目标中断服务程序地址对应的目标中断服务程序,包括:由所述第二目标数据段跳转至所述目标中断服务程序地址,执行与所述目标中断服务程序地址对应的目标中断服务程序。6.根据权利要求5所述的程序中断的处理方法,其特征在于:所述第二目标数据段用于存储预设的自定义中断向量表;所述执行与所述目标中断服务程序地址对应的目标中断服务程序之前,还包括:由被中断地址跳转至所述第二目标数据段,执行与所述自定义中断向量表对应的自定义中断服务程序。7.根据权利要求6所述的程序中断的处理方法,其特征在于:所述自定义中断向量表包括:主堆栈指针msp;以及若干自定义中断向量,全部的所述自定义中断向量均指向同一所述自定义中断服务程序。8.一种程序中断的处理装置,其特征在于:包括:获取模块,用于获取中断号;
处理模块,用于若所述中断号指示程序中断,获取目标中断向量表基址,所述目标中断向量表基址与被中断程序对应;所述处理模块,还用于根据所述中断号以及所述目标中断向量表基址,确定目标中断服务程序地址;所述处理模块,还用于执行与所述目标中断服务程序地址对应的目标中断服务程序。9.一种电子设备,其特征在于:包括处理器,存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如权利要求1至7中任一项所述的程序中断的处理方法中的步骤。10.一种可读存储介质,其特征在于:所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如权利要求1至7中任一项所述的程序中断的处理方法中的步骤。
技术总结
本发明提供一种程序中断的处理方法、装置、电子设备及可读存储介质,其中,方法包括:获取中断号;若所述中断号指示程序中断,获取目标中断向量表基址,所述目标中断向量表基址与被中断程序对应;根据所述中断号以及所述目标中断向量表基址,确定目标中断服务程序地址;执行与所述目标中断服务程序地址对应的目标中断服务程序。本发明不需要中断偏移寄存器VTOR的硬件支持,能够广泛应用到各类微处理器中,应用范围大;并且,本发明无需将中断向量表完整地复制到RAM中,节约了微处理器的RAM资源,有利于微处理器保持高性能。有利于微处理器保持高性能。有利于微处理器保持高性能。
技术研发人员:周建华 张猛 覃攀
受保护的技术使用者:中国移动通信集团有限公司
技术研发日:2022.03.17
技术公布日:2023/9/22
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:宽带高精度有源移相器 下一篇:一种给水管道穿越桥梁的铺设结构及方法与流程