为芯片打补丁的方法及芯片

文档序号:958463 发布日期:2020-10-30 浏览:1次 >En<

阅读说明:本技术 为芯片打补丁的方法及芯片 (Method for patching chip and chip ) 是由 邹南 于 2020-01-17 设计创作,主要内容包括:本申请实施例公开了一种为芯片打补丁的方法及芯片,能够通过中断指令进行中转,获得补丁函数的函数地址,从而对需要被替换的函数进行替换。这种方式不需要在指令中携带补丁函数的地址信息,因此不受跳转地址范围的限制,能够实现长地址跳转。所述芯片中包括第一程序,所述方法包括:当运行到所述第一程序中的需要被替换的函数时,根据预存的所述需要被替换的函数的地址与中断指令的对应关系,执行中断服务程序,所述中断服务程序为与所述需要被替换的函数对应的中断指令调度的服务程序,所述中断服务程序的返回地址为所述需要被替换的函数的补丁函数的地址;根据所述补丁函数的地址,运行所述补丁函数,以对所述第一程序进行打补丁处理。(The embodiment of the application discloses a method and a chip for patching a chip, which can transfer through an interrupt instruction to obtain a function address of a patch function, so that the function needing to be replaced is replaced. The method does not need to carry the address information of the patch function in the instruction, so the method is not limited by the jump address range and can realize long address jump. The chip comprises a first program, and the method comprises the following steps: when a function needing to be replaced in the first program is operated, executing an interrupt service program according to a corresponding relation between a prestored address of the function needing to be replaced and an interrupt instruction, wherein the interrupt service program is a service program scheduled by the interrupt instruction corresponding to the function needing to be replaced, and the return address of the interrupt service program is the address of a patch function of the function needing to be replaced; and running the patch function according to the address of the patch function so as to perform patching processing on the first program.)

为芯片打补丁的方法及芯片

技术领域

本申请实施例涉及计算机技术领域,并且更具体地,涉及一种为芯片打补丁的方法及芯片。

背景技术

补丁技术能够对程序中的错误进行修补,因此受到越来越多的关注。

目前都是基于跳转指令对程序进行打补丁处理,但是跳转指令无法实现长地址跳转,这样对替换函数的存储位置有严格的要求,不利于芯片对于存储器的布局空间设计。

发明内容

本申请实施例提供了一种为芯片打补丁的方法及芯片,能够实现长地址跳转,有利于芯片对于存储器的布局空间设计。

第一方面,提供了一种为芯片打补丁的方法,所述芯片中包括第一程序,所述方法包括:当运行到所述第一程序中的需要被替换的函数时,根据预存的所述需要被替换的函数的地址与中断指令的对应关系,执行中断服务程序,所述中断服务程序为与所述需要被替换的函数对应的中断指令调度的服务程序,所述中断服务程序的返回地址为所述需要被替换的函数的补丁函数的地址;根据所述补丁函数的地址,运行所述补丁函数,以对所述第一程序进行打补丁处理。

该方法通过中断指令进行中转,获得补丁函数的函数地址,从而对需要被替换的函数进行替换。这种方式不需要在中断指令中携带补丁函数的地址信息,而是通过中断服务程序调度补丁函数的地址,因此能够不受跳转地址范围的限制,实现长地址跳转。

在一些可能的实现方式中,所述中断指令为软中断指令。

在一些可能的实现方式中,所述中断指令为系统调用SVC指令。

SVC指令仅需一条指令就能实现中断,占用系统资源少。另外SVC能够支持的中断号比较多,因此能够实现的补丁数量较多。

在一些可能的实现方式中,所述第一程序为所述芯片中的固有程序。

在一些可能的实现方式中,所述需要被替换的函数的地址与所述补丁函数的地址之间的距离超过一个跳转指令能够跳转的地址范围。

在一些可能的实现方式中,所述补丁函数的地址为所述芯片的寄存器中的任意地址。

在一些可能的实现方式中,所述当运行到所述第一程序中的需要被替换的函数时,根据预存的所述需要被替换的函数的地址与中断指令的对应关系,执行中断服务程序,包括:当运行到所述第一程序中的需要被替换的函数时,根据预存的所述需要被替换的函数的地址与中断指令的对应关系,确定与所述需要被替换的函数对应的中断指令;根据所述中断指令,确定中断号;根据所述中断号,执行与所述中断号对应的所述中断服务程序。

在一些可能的实现方式中,在所述根据所述补丁函数的地址,运行所述补丁函数之后,所述方法还包括:运行所述第一程序中的所述需要被替换的函数的下一个函数。

在一些可能的实现方式中,所述第一程序中的需要被替换的函数的地址与中断指令之间具有一一对应关系。

在一些可能的实现方式中,所述第一组件为闪存地址重载与断点FPB。

在一些可能的实现方式中,所述芯片为微控制单元MCU芯片。

第二方面,提供一种芯片,所述芯片包括处理器,所述处理器用于执行第一方面或第一方面中任一种可能实现方式中的方法。

在一些可能的实现方式中,所述芯片还包括寄存器,所述寄存器用于存储所述第一程序中的需要被替换的函数的地址与中断指令的对应关系。

在一些可能的实现方式中,所述寄存器为闪存地址重载与断点FPB寄存器。

附图说明

图1是一种传统的基于跳转指令进行打补丁的示意图。

图2是函数地址的存储位置的示意图。

图3是基于两个跳转指令进行打补丁的示意图。

图4是本申请实施例提供的一种为芯片打补丁的方法的示意性流程图。

图5是本申请实施例提供的基于SVC机制的中断示意图。

图6是本申请实施例提供的一种基于SVC中断进行打补丁的示意图。

图7是基于SVC中断进行打补丁的函数执行流程图。

图8是本申请实施例提供的一种函数地址替换列表的示意图。

图9是本申请实施例提供的一种芯片的示意性框图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

在当下科技高速发展下,集成电路的发展相当迅猛,而微控制器(microcontroller,MCU)型芯片受市场的影响,需求量也发展快速。但是MCU型芯片具有一个特点,即芯片在制造时,需要往内部的只读存储器(read-only memory,ROM)空间存储一段代码(即程序),用来执行上电的启动(boot)程序或者其他特定功能的程序。这些程序在芯片流片完毕后,片上的程序将无法再次修改,这就要求存储的程序绝对不能有问题,否则有问题的芯片将无法再次使用。

为了解决该高风险的问题,目前可以通过补丁(patch)技术对程序中的错误函数进行替换,从而使得程序能够正确运行,芯片能够继续使用。由于补丁技术具有上述功能,因此受到越来越多的关注。

程序中出现错误的地方往往存在于一个或多个函数中,这些有错误的原函数会被其他函数调用。虽然找到这些调用函数比较困难,但是很容易找到出错的原函数。因此,打补丁的关键操作应关注于这些出错的原函数上。打补丁的过程为:在调用这些错误的原函数时,从错误的原函数跳转到修改后的函数(即补丁函数)上,执行完补丁函数后再返回到原程序。如此,将永远不会执行错误的原函数,从而完成对程序的修改。

补丁技术一般都需要硬件支持,MCU芯片的内核一般都能够支持patch技术。Patch的数量也受硬件资源所限制,硬件所能支持的patch数量越多,表示能够修补的函数越多,芯片被浪费的可能性越小。

因此,如果希望芯片支持的patch越多,则对芯片硬件的要求就越高,芯片的成本就会相应增加。

本申请实施例对芯片的内核的类型不做具体限定,例如,芯片的内核可以为ARM,还可以为X86、每秒百万条指令(million instructions per second,MIPS)、PowerPC等。

以ARM为内核进行说明,ARM提供了基于闪存地址重载和断点(flash patch andbreakpoint,FPB)硬件的patch方式。

目前的patch技术是通过使用新的函数替换原来的旧函数,以达到修正程序的目的。例如,当程序运行到被补丁函数时,使用跳转指令,使得程序跳转到补丁函数的地址,以运行补丁函数。执行完补丁函数后,再回到原来的程序继续执行。

下面结合图1,对FPB机制实现的补丁技术进行说明。

目前,ARM cortex-m系列的内核都提供了FPB机制,专门用于给芯片的ROM代码作patch使用。FPB的机制是创建一个需要被替换的函数列表,即原函数列表,并将该列表配置到硬件FPB寄存器中。然后再创建另外一个函数列表,即补丁函数列表,主要用来存放新的函数的地址。原函数列表与补丁函数列表具有对应关系,并且这两个列表及其对应关系存储在FPB寄存器中。当程序计数器(program counter,PC)指针运行到需要被替换的函数A时,FPB自动响应,并且找到新的函数的地址,将该新的函数的地址自动赋值到PC指针,从而PC指针就会自动跳转到新的函数执行。

如图1所示,当PC指针运行到地址0x1000时,处理器检测到寄存器中存储有该地址0x1000,则FPB自动响应,处理器可以执行跳转指令。处理器根据原函数列表与补丁函数列表之间的对应关系,找到与地址0x1000对应的地址为0x2000。然后PC指针会跳转到0x2000地址执行补丁函数。

这种替换函数技术一般都是使用跳转指令来实现,由于跳转指令的结构限制,跳转指令只能实现短地址跳转,不能实现长地址跳转。举例说明,跳转指令的结构为指令+补丁函数的地址,指令+补丁函数的地址都需要存储在寄存器中。如果寄存器是32比特,则表示指令+补丁函数的地址的存储空间总共为32比特,由于指令需要占用一部分存储空间,则补丁函数的地址的存储空间小于32比特,导致系统不能在32比特范围内进行全地址跳转。

可以理解的是,本申请实施例中的长地址跳转也可以理解为全地址跳转。

如图2所示,如果原函数与补丁函数在内存中都位于短地址跳转范围(如PowerPC处理器,地址范围为0x0~16M)内,则跳转指令可以跳转到补丁函数来执行。但是,如果原函数与补丁函数在内存中的地址之间的距离大于短地址跳转范围,则跳转指令无法跳转到补丁函数来执行。

为了实现长地址跳转,本申请实施例可以通过多个跳转指令来实现。例如,可以通过两条跳转指令实现长地址跳转,如图3所示。首先,使用第一条跳转指令跳转到固定地址范围内,找到中转函数,在中转函数中通过第二条跳转指令跳转到最终地址,找到补丁函数。

在该方法中,中转函数的存放位置与被补丁函数、补丁函数的地址之间的距离不能太远,需要在短地址跳转范围内,否则无法实现跳转,因此,通过多次跳转的方式对中转函数的存储地址的要求较高。另外,通过多次跳转的方式对指令的设计复杂度也比较高。

本申请实施例提供一种为芯片打补丁的方法,通过中断指令进行中转,能够不受跳转地址的范围的限制,实现长地址跳转,并且实现方式较为简单。

下面对中断处理过程进行描述。

中断就是指处理器在正常执行程序的时候,由于内部或外部事件的触发、或由程序预先设定而引起处理器暂时中止当前正在执行的程序,保存被执行程序相关信息到栈中,转而去执行为内部或外部事件、或由程序预先设定的时间的中断服务子程序,待执行完中断服务子程序后,处理器再获取被保存在栈中被中断的程序的信息,继续执行被中断的程序,这一过程叫中断。

中断的类型可以包括三种:1、软中断或内中断,2、外中断或硬中断,3、异常。本申请实施例描述的中断可以是这三种类型中的任意一种。

由于软中断是通过中断指令实现的,可以根据需要人为设置,因此更为灵活,实现简单且易操作。因此,优选地,本申请实施例使用软中断进行中转。

对于外部中断,中断请求信号是由外部设备产生,并施加到处理器的NMI或INTR引脚上,处理器通过不断地检测NMI或INTR引脚信号来识别是否有中断请求发生。对于内部中断,中断请求方式不需要外部施加信号激发,而是通过内部中断控制逻辑去调用。

无论是外部中断还是内部中断,中断处理过程都可以包括以下步骤:请求中断-响应中断-关闭中断-保留断点-中断源识别-保护现场-中断服务子程序-恢复现场-中断返回。

本申请实施例可以在中断返回指令中添加补丁函数的地址信息,这样在中断返回时,可以跳转到补丁函数去执行,从而实现对芯片的打补丁处理。在从中断服务程序跳转到原程序后,可以不执行原来出错的函数,而执行补丁函数,从而保证程序的正常运行。

例如,在执行完中断服务程序后,处理器可以返回第一程序并从第一程序的断点处继续执行,但是由于中断服务程序的返回地址为补丁函数的地址,则在返回到第一程序后,处理器运行的是补丁函数,此时,PC指针可以进行更新,指向第一程序中需要被替换的函数的下一个函数。在补丁函数运行结束后,就可以根据PC指针指向的位置运行下一条指令,这样就能跳过需要被替换的函数,而不执行该需要被替换的函数,从而能够避免程序运行出错。

本申请实施例提供的芯片中可以包括第一程序,该第一程序可以是芯片中存储的任意一段程序。例如,该第一程序可以是芯片中的固有程序,即不可编辑的程序。又例如,该第一程序可以是芯片中的可编辑程序。

当第一程序存储在芯片中后,芯片的处理器可以运行该程序,以实现相应的功能。

该芯片例如可以是上文中描述的MCU芯片,该第一程序可以是在MCU芯片制造过程中存储在该MCU芯片中的程序。当然,本申请实施例中的芯片还可以是其他类型的芯片。

但是,当该第一程序中的某些函数出现错误或需要替换时,可以使用本申请实施例的方法进行替换。

如图4所示,本申请实施例提供的方法可以包括步骤S410~S420。

S410、当运行到第一程序中的需要被替换的函数时,根据预存的需要被替换的函数的地址与中断指令的对应关系,执行中断服务程序,该中断服务程序为与该需要被替换的函数对应的中断指令调度的服务程序,该中断服务程序的返回地址为该需要被替换的函数的补丁函数的地址。

可以理解的是,第一程序可以是通过函数的地址进行编写的,第一程序中可以包括多个函数的地址,处理器通过调用多个地址上存储的函数来运行第一程序。

根据预存的需要被替换的函数的地址与中断指令的对应关系,执行中断服务程序可以指,根据预存的需要被替换的函数的地址与中断指令的对应关系,确定与需要被替换的函数对应的中断指令,然后根据该中断指令,确定中断号,根据该中断号,执行与该中断号对应的中断服务程序。

第一程序的函数的地址包括第一程序中出现错误或需要被替换的函数的地址。本申请实施例可以预先建立需要被替换的函数的地址与中断指令的对应关系,以在需要被替换的函数被命中时,根据该对应关系,可以跳转到中断指令。

需要被替换的函数的地址与中断指令可以具有一一对应的关系。例如,可以预先建立一个需要被替换的函数的地址的列表,以及一个中断指令的列表,这两个列表中的内容具有一一对应关系。如果第一程序中有多个需要被替换的函数,则该多个需要被替换的函数可以与多个中断指令对应,并且该多个需要被替换的函数与该多个中断指令之间具有一一对应的关系。

在第一程序的运行过程中,当运行到需要被替换的函数时,系统可以自动响应,并根据需要被替换的函数的地址与中断指令的对应关系,查找到对应的中断指令。

运行到第一程序中的需要被替换的函数可以指PC指针指向需要被替换的函数。

S420、根据该补丁函数的地址,运行该补丁函数,以对第一程序进行打补丁处理。

通过中断指令,可以查找到触发该中断的中断服务程序。该中断指令可以包括中断号,不同的中断源具有不同的中断号,因此,本申请实施例可以是通过中断号来判断触发中断的中断源,从而找到中断服务程序。

中断号是系统分配给每个中断源的代号,以便识别和处理。处理器可以通过中断号找到中断服务程序的入口地址,实现程序的转移。

因此,处理器可以根据该中断指令,暂停第一程序的执行,并跳转到中断服务程序以执行该中断服务程序。在中断服务程序运行结束之后,返回第一程序继续执行。

在中断服务程序执行完之后,需要返回到原程序继续执行,因此,每个中断服务程序中都需要有中断返回指令,以便在中断事件处理完之后,处理器可以回到原程序中继续执行。

本申请实施例可以在中断返回指令中添加补丁函数的地址信息,使得在中断返回时,系统能够自动跳转到补丁函数以执行该补丁函数,而不执行需要被替换的函数,从而实现对芯片的打补丁处理。

本申请实施例提供的打补丁方式是对正在运行的程序的一种修补处理,且补丁函数的地址不是存放在指令中,而是从另外一段程序(如中断服务程序)中获得的,该补丁函数的地址信息是中断服务程序调用的,由于中断服务程序可以调用任意地址上函数,因此,补丁函数的地址可以是芯片中的任意存储空间的地址,而不受跳转地址范围的限制。因此,通过中断指令进行打补丁的方式能够实现长地址跳转,这有利于SRAM和flash对存储空间的布局设计。

例如,对于32比特的寄存器,中断服务程序可以调用该32比特范围内的任意地址,从而能够实现全地址跳转。可以理解的是,该寄存器为上文描述的用于存储补丁函数的地址与中断指令的对应关系的寄存器。

另外,由于原函数的地址及与原函数的地址对应的中断指令是预存在芯片中的,因此,可以无需人为参与,系统就能够自动响应,并执行对应的中断指令。对于程序中的多处相同函数的替换,也无需人为对每个函数进行替换操作,根据预存的对应关系,系统就可以实现多处替换,操作过程简单。

不同的原函数的地址可以对应不同的中断指令,不同的中断指令可以触发不同的中断服务程序,不同的中断服务程序可以对应不同的返回地址,其中,一个返回地址对应一个补丁函数的地址,因此,不同的原函数的地址可以通过中断指令与不同的补丁函数的地址对应,通过多个中断指令可以对程序的多个位置进行补丁处理。

因此,当程序中有多个原函数出现错误时,可以在寄存器中存储多个原函数的地址与多个中断指令的对应关系,通过该多个中断指令调用多个补丁函数的地址,以对该程序进行补丁处理。

本申请实施例的方法也可以应用在系统或软件的升级过程中,对此不作具体限定。

作为一种优选的实现方式,本申请实施例的中断指令可以是软中断指令,该软中断指令可以是系统服务调用(supervisor calls,SVC)指令。

SVC中断是一种特殊的中断,多用于操作系统之上的软件开发中。SVC用于产生系统函数的调用请求。例如,操作系统不让用户程序直接访问硬件,而是通过提供一些系统服务函数,用户程序使用SVC发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件。因此,当用户程序想要控制特定的硬件时,它就会产生一个SVC异常,然后操作系统提供的SVC异常服务例程得到执行,它再调用相关的操作系统函数,后者完成用户程序请求的服务。

图5示出了SVC的中断机制的示意图。当系统在主程序上运行的过程中,检测到SVC中断指令,则系统会跳转到SVC中断指令对应的SVC服务程序上,以运行该SVC服务程序。

SVC中断是必须立即得到相应的中断,因此,通过SVC中断可以保证第一程序能够立即得到补丁处理。

SVC中断的另一特点是仅需一个指令就可以实现中断,实现方式简单,并且指令占用的存储空间较小。

SVC指令的设定方式简单,一般地形如:_SVC#0。

另外,SVC中断能够支持的中断号较多,如可以支持256个中断号,每个中断号对应一个中断服务程序,由于每个中断服务程序能够返回一个补丁函数的地址,因此,SVC中断能够支持256个补丁。因此,通过SVC指令能够支持较多的补丁数量,且无需对芯片的硬件进行改进,成本较低。

第一程序的函数的地址与中断指令的对应关系可以是预存在芯片中的第一组件的寄存器中。该第一组件属于芯片的硬件资源。

该第一组件可以是上文描述的FPB。在该FPB的寄存器中,存储有两个列表,一个是需要被替换的函数的地址的别表,另一个是中断指令的列表,这两个列表的内容具有一一对应的关系。

下面结合图6和图7,以SVC指令为例,对芯片的打补丁过程进行描述。

如图6所示,在FPB寄存器中存有两个列表,一个列表为原函数的地址的列表,另一个为SVC指令的列表。原函数的地址表示第一程序中需要被替换的函数的地址。

在图6所示的列表中,原函数的地址0x1000对应的中断指令为SVC#1,原函数的地址0x1200对应的中断指令为SVC#0。

将SVC中断指令的列表存预存在FPB寄存器中,其意义在于当列表中的原函数的地址被命中时,处理器根据列表中的对应关系可以确定与原函数的地址对应的SVC指令。然后SVC指令触发SVC中断,并且SVC指令可以包括中断号,这样系统就可以根据中断号,获取与该中断号对应的SVC中断服务程序。在SVC中断服务程序执行完毕之后,可以进行SVC中断返回,然后处理器可以根据SVC中断的返回地址运行该返回地址对应的补丁函数。在图5中,SVC中断服务程序运行完之后,通过SVC中断返回地址,获得补丁函数的地址为0x30000000。PC指针可以跳转到该地址0x30000000,使得处理器运行该地址0x30000000处的补丁函数。

可以理解的是,本申请实施例中的中断服务程序也可以称为中断处理函数。

在图6和图7中,程序中的函数A为出现错误的函数,函数A的地址为0x1200。当PC指针运行到地址0x1200时,处理器检测到FPB寄存器中存有该地址,则可以根据原函数的地址与SVC指令的对应关系,从而执行SVC#0。该SVC#0触发中断事件,根据SVC中断号,得到SVC处理函数。然后处理器可以运行该SVC处理函数,在该SVC处理函数运行完之后,通过返回指令,得到函数B的地址0x30000000。在中断返回后,PC指针跳转到地址0x30000000,使得处理器运行该地址0x30000000上的函数B。最终,处理器执行的是函数B,而不执行函数A。

在执行完函数B后,PC指针进行更新,并指向程序中的函数A之后的下一条指令,从而处理器能够在执行完函数B之后,跳过函数A,而执行函数A之后的下一个函数。

本申请实施例还可以使用跳转指令与SVC中断相结合的方式对芯片进行打补丁。

FPB寄存器中可以存储有两个列表,一个列表为原函数的地址的列表,另一个列表为SVC指令和新函数的地址相结合的列表。如图8所示,原函数的地址0x1000对应新函数的地址0x2000,原函数的地址0x1200对应中断指令SVC#0。当PC指针指向的原函数的地址为0x1000时,FPB自动响应,并执行跳转指令,PC指针跳转到新的函数的地址0x2000;当PC指针指向的原函数的地址为0x1200时,FPB自动响应,并执行SVC#0中断,通过SVC#0获取新的函数的地址。

本申请实施例可以是在任意一种情况下通过上述中断方式为芯片打补丁,在该情况下,补丁函数的地址可以是寄存器中的任意地址,或者,也可以是在需要被替换的函数的地址与补丁函数的地址之间的距离超过一个跳转指令能够跳转的地址范围的情况下,才按照上文描述的方式进行打补丁。

举例说明,对于补丁函数的地址与原函数的地址之间的距离在一个跳转指令能够跳转的地址范围的情况,可以使用跳转指令进行跳转,以实现对芯片的打补丁处理;而对于补丁函数的地址与原函数的地址之间的距离超出一个跳转指令能够跳转的地址范围的情况,可以使用SVC中断获取补丁的函数的地址,以实现对芯片的打补丁处理。

一个跳转指令能够跳转的地址范围可以理解为短地址跳转范围。

可以理解的是,对于不同的内核,短地址跳转的范围可以不同。对于ARM内核,短地址跳转范围为0~32M;如果ARM内核使用的是thumb指令集,则短地址跳转范围为0~4M。对于PowerPC内核,短地址跳转范围为0~16M,需要说明的是,一个跳转指令能够跳转的地址范围也可以是预设的地址范围,可以根据用户需求或者是不同的内核设置预设的地址范围。

此外,本申请实施例还提供一种芯片,如图9所示,该芯片1000包括处理器1010,该处理器1010用于执行上文描述的任一种为芯片打补丁的方法。

可选地,该芯片1010还包括寄存器1020,用于存储需要被替换的函数的地址与中断指令的对应关系。

可选地,该寄存器为FPB寄存器。

需要说明的是,在本申请实施例和所附权利要求书中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请实施例。

例如,在本申请实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”、“上述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。

所属领域的技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。

如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。

以上内容,仅为本申请实施例的具体实施方式,但本申请实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请实施例的保护范围之内。因此,本申请实施例的保护范围应以权利要求的保护范围为准。

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于对装置的云环境进行版本控制的系统和方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!