一种固件更新方法及控制器与流程

文档序号:13985179阅读:282来源:国知局
一种固件更新方法及控制器与流程

本发明涉及计算机技术领域,尤其涉及一种固件更新方法及控制器。



背景技术:

在软件系统开发完毕后,在应用过程中,由于使用要求等情况的变化,需要对系统增加一部分的功能。对于系统中的核心处理器而言,即需要更新其固件。

为了便于固件的更新,现有技术通过特定的数据接口,直接对处理芯片内整合的存储器进行烧写,例如对于stm32的固件更新,可以直接通过jtag接口对其flash进行烧写。

在现有的固件更新过程中,首先是通过外部按键等利用硬件逻辑的方式来告知系统是否需要更新程序(固件),若需要对程序进行更新,则通过对应的数据接口,将数据直接烧写到flash中对应的存储位置中,完成更新。

在实现本发明的过程中,发明人发现现有技术存在以下问题:由于更新数据直接烧写到flash的原有程序的存储位置上。在出现烧写错误的情况下,将导致原有程序代码破损,使得处理器(如:可编程逻辑控制器)无法正常工作。



技术实现要素:

本发明实施例提供了一种固件更新方法及控制器,旨在解决固件更新过程中,烧写错误导致原有程序代码破损,处理器无法工作的问题。

本发明实施例的第一方面提供一种固件更新方法,包括:

控制器判断是否需要更新固件;

若是,则获取固件更新数据,并将所述固件更新数据烧写至备份存储区域中;

所述控制器将所述备份存储区域中的所述固件更新数据拷贝到原固件数据的存储位置。

相应地,所述控制器判断是否需要更新固件包括:

所述控制器在程序内设置用于判断是否需要更新固件的更新标志寄存器;

所述控制器根据所述更新标志寄存器是否置位,以判断是否需要更新固件。

相应地,所述控制器将所述备份存储区域中的所述固件更新数据拷贝到原固件数据的存储位置之后,所述方法还包括:

所述控制器获取复位指令,

所述控制器判断更新标志寄存器是否置位;

若是,执行复位操作;

若否,不执行复位操作。

相应地,所述获取固件更新数据,并将所述固件更新数据烧写至备份存储区域中包括:

所述控制器逐帧地接收所述固件更新数据,并将接收到的当前帧的固件更新数据形成数据包保存在随机存取存储器ram中;

所述控制器将所述数据包烧写至所述备份存储区域中;

所述控制器校验所述数据包是否烧写正确;

若否,则返回执行所述控制器将所述数据包烧写至所述备份存储区域中。

相应地,所述控制器校验所述数据包是否烧写正确之后,所述方法还包括:

所述控制器判断所述数据包的重复烧写次数是否达到预定的阈值;

若是,反馈固件更新数据烧写失败信息。

相应地,如果所述控制器校验所述数据包烧写正确,所述方法还包括:

所述控制器判断烧写至所述备份存储区域的数据包是否为最后一帧数据;

若是,反馈固件更新完成信息。

相应地,所述控制器判断烧写至所述备份存储区域的数据包是否为最后一帧数据包括:

所述控制器获取当前数据包的序数;

所述控制器根据所述当前数据包的序数是否与固件更新数据包含的总帧数相等,以判断所述备份存储区域的数据包是否为最后一帧数据。

相应地,所述控制器采用modbus总线通信方式完成固件更新。

本发明实施例的第二方面提供一种控制器,包括:

更新判断单元,用于判断是否需要更新固件;

烧写单元,用于当判断为需要更新固件时,获取固件更新数据,并将所述固件更新数据烧写至备份存储区域中;

复制单元,用于将所述备份存储区域中的所述固件更新数据拷贝到原固件数据的存储位置。

相应地,所述更新判断单元用于判断是否需要更新固件包括:

所述更新判断单元用于在程序内设置用于判断是否需要更新固件的更新标志寄存器;

所述更新判断单元还用于根据所述更新标志寄存器是否置位,以判断是否需要更新固件。

相应地,所述控制器还包括:复位单元;

所述复位单元用于获取复位指令;

所述复位单元还用于判断更新标志寄存器是否置位;

若是,执行复位操作;

若否,不执行复位操作。

相应地,所述烧写单元还用于:

逐帧地接收所述固件更新数据,并将接收到的当前帧的固件更新数据形成数据包保存在随机存取存储器ram中;

将所述数据包烧写至所述备份存储区域中;

校验所述数据包是否烧写正确;

若否,则返回执行所述控制器将所述数据包烧写至所述备份存储区域中。

相应地,所述控制器还包括第一烧写状态判断单元;

所述第一烧写状态判断单元用于判断所述数据包的重复烧写次数是否达到预定的阈值;

若是,反馈固件更新数据烧写失败信息。

相应地,所述控制器还包括第二烧写状态判断单元;

第二烧写状态判断单元,用于判断烧写至所述备份存储区域的数据包是否为最后一帧数据;

还用于在烧写至所述备份存储区域的数据包是为最后一帧数据时,反馈固件更新完成信息;

还用于在烧写至所述备份存储区域的数据包不为最后一帧数据时,接收下一帧固件更新数据。

相应地,所述第二烧写状态判断单元用于判断烧写至所述备份存储区域的数据包是否为最后一帧数据包括;

所述第二烧写状态判断单元用于获取当前数据包的序数;

所述第二烧写状态判断单元用于根据所述当前数据包的序数是否与固件更新数据包含的总帧数相等,以判断所述备份存储区域的数据包是否为最后一帧数据。

相应地,所述控制器采用modbus总线通信方式完成固件更新。

本发明实施例的第三方面提供一种控制器,包括:处理器、存储器、接口和总线,所述处理器、所述存储器和所述接口通过所述总线连接,所述接口用于输入/输出数据,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码执行如上述任一项所述的固件更新方法。

本发明实施例提供的技术方案中,控制器在进行固件更新时,更新数据被烧写在备份存储区域中。在发生烧写错误或者中断的情况时,原有的程序代码并未被破坏,控制器仍然可以继续使用,不影响系统的正常工作。在更新数据烧写完毕后,再将其搬运至原有程序的存储位置,替代原有程序以完成固件的更新。

附图说明

图1为本发明实施例中固件更新方法一个实施例的流程图;

图2为图1中步骤101的具体流程图;

图3为本发明实施例中固件更新方法另一个实施例的流程图;

图4为图3中步骤207的具体流程图;

图5为本发明实施例中固件更新方法另一个实施例的流程图;

图6为本发明实施例中控制器一个实施例的模块框图;

图7为本发明实施例中控制器另一个实施例的模块框图;

图8为本发明实施例中控制器一个实施例的硬件框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”和“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

本发明所述的固件更新方法可以应用于多种不同类型的处理器或者具有不同处理内核的控制器中,可以广泛在例如微控制器系统、车身控制系统、工业控制系统等应用领域中。

一般的,现有的处理器或者控制器中均能够提供对应的数据接口(例如jtag接口或者串行接口等),允许在使用过程中,进行编程,更新程序。例如,stm32系列的处理器,可以提供jtag接口和串行接口,其内置的flash也允许实现电路编程和在应用中编程,利用串口线或者合适的数据通信方式,即可实现处理器的固件更新,增加新的功能。

现有的固件更新方式为通过串口连接线,接受二进制更新数据后将其直接烧写至flash对应的功能程序的位置。在烧写过程出现错误时,由于原有的代码已经被破坏覆盖,因此,整个处理器将无法正常工作。本发明所述的固件更新方法,在更新时,首先将数据放置在一个额外的备份存储区域中,直到全部完成后,才搬运覆盖原有功能程序,从而保证原有功能程序在烧写异常时,仍能够维持处理器的正常工作。

请参阅图1,其为本发明实施例中固件更新方法的一个实施例的方法流程图,该方法包括:

101、控制器判断是否需要更新固件。若是,执行步骤102;若否,执行步骤103。

控制器可以采用现有技术中任何合适的,具有控制核心及存储可执行程序的存储器所组成的处理器或者控制器。

如上所述,系统(控制器)判断是否需要更新固件时,可以采用现有技术中,通过外部按键等硬件逻辑的方式,接收外部指令从而告知系统需要进行固件更新。

102、获取固件更新数据,并将固件更新数据烧写至备份存储区域中,并执行步骤104。

获取固件更新数据是指通过控制器内设的数据端口,以特定的数据传输方式,接收由主站(例如控制后台、个人电脑等)发出的固件更新数据。

固件更新数据可以根据具体使用的数据传输协议,采用与数据传输协议相对应的形式进行传输。固件更新数据是在系统的应用过程中,相关的技术人员根据实际应用的需求或者应用环境的改变,对于原有固件程序作出改进,增加或者减省一些功能后编写的新的功能程序。这些程序可以是app,操作系统、嵌入式系统或者其他类型的程序。

备份存储区域可以是控制器的存储器中,除原有功能程序的存储区域外的其他存储区域。实际操作过程中,可以由程序的存储地址表示。备份存储区域可以在控制器的初始烧录时设置,设置独立的可执行程序,控制固件更新数据烧写在指定的存储地址(即存储区域)而不覆盖原有的功能程序。

103、执行原有功能程序。在判断不需要对固件进行更新时,系统可以跳过固件更新的程序,直接读取存储器内存储的原有功能程序并执行。

104、控制器将备份存储区域中的固件更新数据拷贝到原固件数据的存储位置。在固件更新数据在备份存储区域烧写完毕以后,其已经成为一个完整的功能程序,能够供处理器调用执行,发挥相应的功能。将烧写完毕后的固件更新数据拷贝到原程序的存储位置,覆盖原有的功能程序,即可完成固件更新操作。

在上述固件更新实施例中,控制器可以为plc(可编程逻辑控制器),其存储器相应地,可以为flash(闪存)。由于更新数据并不直接烧写在原有程序的位置,因此,可以对更新数据进行充分的校验和确认后,在拷贝搬运到原有的程序位置,不对控制器的正常工作造成影响。

在实际使用过程中,如上所述,可以采用多种不同的方式告知系统是否需要进行固件更新。

请参阅图2,其为图1中步骤101的具体流程图,该步骤101具体可以包括:

1011、在程序内设置用于判断是否需要更新固件的更新标志寄存器。更新状态寄存器是用于判断是否需要更新固件的识别标志,与软件的标志位相关。标志位是软件内一些用于判断指令执行状态的标志,编程中可以使用多种不同类型的标志位,完成对应的状态判断。基于完善的逻辑,可以在软件上增设合适的标志位,从而令系统通过识别标志位(即对应的状态寄存器)来判断是否需要更新固件。

1012、控制器判断更新标志寄存器是否置位,从而确定是否需要更新固件。若更新标志寄存器置位,执行步骤1013。若更新标志寄存器非置位,执行步骤1015。

更新状态寄存器包括了置位和清零两种状态,分别与1和0(或者高电平、低电平)相对应,可以作为状态识别的依据。在软件上增设合适的标志位后,更新状态寄存器可以用置位状态来表示当前系统需要更新固件,清零时则表示当前系统不需要更新固件。系统可以读取当前更新标志寄存器的状态,从而获知是否需要进行固件更新。

1013、将备份存储区域中的固件更新数据拷贝到原固件数据的存储位置。在判断需要进行固件更新操作后,可以执行与图1所示固件更新方法相同的步骤,对固件进行更新。

1014、固件更新完毕后,更新状态寄存器清零。在固件更新完毕后,对更新状态寄存器进行清零,表示不需要更新固件。在使用过程中,标志位的变换可以使更新状态寄存器再次置位,告知系统需要再次进行固件更新。

1015、跳转至存储器中固件程序存储位置,执行程序。在不需要更新固件时,可以直接执行原有的固件程序。在需要更新固件时,完成固件更新并清零更新状态寄存器后,跳转至固件程序存储位置时,将执行已经覆盖原有程序的新的程序(两者的在存储器中的存储地址相同)。

在现有技术中,使用的是外部按键等硬件逻辑的方式来告知系统是否需要进行固件更新,增加新的功能。这样需要增加控制器硬件上的设计,增加硬件工作量和成本。

本实施例相对于现有技术,具有以下优点:使用本发明实施例所述的判断方法,从软件上增加标志位,无需额外增加硬件结构,减少了硬件工作量和成本。

如上所述,本发明的固件更新方法可以使用多种不同的类型的数据传输协议完成固件更新数据的传输。以下以采用modbus总线通信的方式,实现固件在线更新为例,对本发明的另一实施例进行详细阐述。

在具体的实现过程中,显然的,需要分别在存储器内烧录用于进行固件更新的程序代码(以下简称为读取程序)和固件自身的程序代码。用于固件更新的程序代码为基础,需要在初始时,通过数据接口(例如jtag接口)进行烧录,初始的固件代码也可以通过这一接口一同烧录。在后续程序中,则通过modbus通信方式,在读取程序的运行过程中,完成固件的更新。

在本实施例中,modbus总线通信包括有主站和从站两端,其中控制器为从站,接收固件更新数据。主站可以为任何合适的设备,用于向从站提供对应的固件更新数据。由此,所述方法包括有两个独立的部分,第一部分为控制器判断是否需要更新固件以及在控制器内拷贝固件更新数据的控制器内执行部分。第二部分为控制器与主站之间的数据传输部分。

其中,第一部分具体可以采用本发明上述实施例的阐述的技术方案予以实现,为陈述简便,在此不作赘述。

请参阅图3,上述步骤102可以包括:

201、控制器逐帧接收固件更新数据,形成数据包保存在ram中。控制器可以在接收到主站发出的固件更新指令后,通过串口接收固件更新数据。完整的固件更新数据从主站分为多个数据帧发出。

通过modbus协议通讯,可以由协议指令方式令控制器(从站)获知更新需求,与主站在通信过程中和其他modbus通讯指令模式一致,不用额外加入其他方式判断在线更新需求。

控制器对于数据的接收是以一个数据包为基本单位,每次接收一个数据包,直至全部数据包接收完成。接收到的二进制数据首选保存在ram中,然后再进行烧写。

202、控制器将数据包烧写至备份存储区域中。

上述固件更新数据的传输是以数据包为单位的形式进行,每个数据包接收保存到ram中之后,烧写到存储器的备份存储区域中。

当然,每个数据包都有自己对应的,不相同的烧写地址,以避免不同的数据包之间相互覆盖。因此,每个数据包烧写完成后,均需要对烧写地址进行更新,以便于进行下一次的烧写。

203、控制器校验数据包是否烧写正确;若校验烧写正确,则可以进行下一数据包的烧写,执行步骤206,若检验烧写不正确,则执行步骤204。数据烧写可能因多种不同的原因导致烧写不正常或烧写失败。每个数据包烧写完成后,均需要校验是否烧写正确,以保证固件的正常更新。

204、控制器判断数据包的重复烧写次数是否达到预定的阈值。若是,执行步骤205,若否,执行202,重复烧写该数据包。预定的阈值可以根据实际的使用情况或者使用经验进行设定,例如设置为5次,或者更多。

205、反馈固件更新数据烧写失败信息,并结束流程。在超出预定的阈值后,控制器可以向主站响应,反馈烧写失败的情况,提示进行错误检查,及时排除异常情况。

本实施例相对于现有技术,具有以下优点:通过上述重复烧写的阈值设置,能够避免因无法排除的错误,导致数据不断的重复烧写,浪费固件更新时间的问题。而且有利于及时的提示错误情况的发生,尽快的排除错误,更快的完成固件更新。

在本实施例中,固件更新数据分为了多个数据包,以多次循环发送的形式发送二进制文件。进一步的,还需要确认固件更新数据的数据包是否发送完毕。

如图3所示,具体包括如下步骤:

206、判断烧写至备份存储区域的数据包是否为最后一帧数据。若是,执行步骤207,若否,则执行步骤201,接收下一帧固件更新数据。若不是最后一帧数据,表明更新固件数据尚未发送完毕,需要主站继续发送并继续接收、烧写下一帧数据。对应的指令为响应主站,该数据包烧写成功,继续进行下一帧数据的接收和烧写。当然,每一帧的数据的接收和烧写均为相同的过程,在此不作赘述。

207、置位更新标志寄存器,反馈固件更新完成信息。确认数据包为最后一帧数据后,表示固件更新数据已经烧写完毕,可以使用,接下来执行步骤104。通过置位更新标志寄存器,使软件标志位继续使用,判断是否需要进行下一次固件更新。可以由控制器向主站响应,烧写已经全部完成的信息,向主站作出更新已经完成的信息,不需要继续发送。

请参阅图4,其为图3中步骤207的具体流程图,该步骤207具体可以包括:

2071、获取当前数据包的序数。主站在发送数据时,可以将固件更新数据的数据包的序数(即此时为第几帧数据包)以及固件更新数据的总帧数(总共包含的数据包个数)记录在每一帧发送数据的特定字节上,例如,在第四个字节上记录数据包的序数,在第三个字节记录数据包的总帧数。

2072、根据数据包的序数是否与固件更新数据包含的总帧数相等,以判断备份存储区域的数据包是否为最后一帧数据。控制器可以通过判断当前数据包的序数与更新数据包含的总帧数是否相等,来确认数据是否发送完毕。显然地,在序数与总帧数相等时,表示此次为最后一次传输,并向主站响应接收完毕,烧写结束。当然,还包括控制器将烧写地址重置,恢复初始化设置,准备进行下一次的固件更新。

较佳的是,还可以在控制器内设置一个独立的数据包计数器,将接收到的数据包计数器的计数结果返回给主站,供主站校验数据包的序数是否正确。

本实施例相对于现有技术,具有以下优点:由于控制器与主站之间的通信基于modbus通信协议,可以在发送的数据帧中自定义设置,包含多种必要信息。在数据帧中包含数据包序数信息,可以使控制器在接收,解析指令时清晰的了解数据的传输情况,判断数据传输的可靠性,便于在数据传输发生错误时迅速的寻找到问题。

固件程序更新后,一般需要进行系统重启、复位从而令控制器按照更新后的固件程序继续工作。

请参阅图5,其为本发明实施例中固件更新方法另一个实施例的流程图,对于系统软复位,该方法可以包括:

301、控制器获取复位指令。如上所述,在基于modbus通信协议的基础上,从站可以利用主站,发出复位指令,启动系统软复位。

302、控制器判断更新标志寄存器是否置位。若是,执行步骤303;若否,则执行步骤304。如上述实施例所述,在固件更新数据烧写完毕后,更新标志寄存器将会置位,表示固件已经更新完毕。因此,系统可以根据更新标志寄存器是否置位来判断是否需要执行软复位操作。

303、执行复位操作。在更新标志寄存器置位的情况下,表明固件更新完成,需要进行软复位从而使控制器按照新的固件程序继续工作。因此,系统执行复位操作。

304、不执行复位操作。更新标志寄存器非置位时,则与上述情况相反,表明固件更新还在传输过程中,不能进行复位操作。

本实施例相对于现有技术,具有以下优点:通过上述方式,能够在不断电重启的情况下,使控制器实现固件程序更新,并按照更新后的固件程序继续工作。这样可以避免控制器重新上电/下电给系统带来不必要的麻烦和影响。

可以理解的是,为陈述简便,在上述具体实施例中均采用了基于modbus通信协议的方法进行描述。本领域技术人员根据本发明所述的具体实施例,也可以在现有技术的基础上,根据实际的情况选择使用其他各种不同的通信协议完成固件更新数据的传输,并编写相对应的实现代码。

以上对于本发明实施例的固件更新方法进行了描述。以下对于本发明实施例的控制器进行描述。

请参阅图6,其为本发明实施例中控制器一个实施例的模块框图,该控制器包括:

更新判断单元401,用于判断是否需要更新固件;

烧写单元402,用于当判断为需要更新固件时,获取固件更新数据,并将固件更新数据烧写至备份存储区域中;

复制单元403,用于将备份存储区域中的固件更新数据拷贝到原固件数据的存储位置。

可选地,更新判断单元401具体用于:

在程序内设置用于判断是否需要更新固件的更新标志寄存器;

根据更新标志寄存器是否置位,以判断是否需要更新固件。

可选地,请参阅图7,其为本发明中控制器另一个实施例的模块框图。控制器还包括:复位单元404。

复位单元404用于获取复位指令,以及判断更新标志寄存器是否置位;若是,执行复位操作;若否,不执行复位操作。

可选地,烧写单元402具体用于,

逐帧地接收固件更新数据,并将接收到的当前帧的固件更新数据形成数据包保存在随机存取存储器ram中;

将数据包烧写至备份存储区域中;

校验数据包是否烧写正确;

若否,则返回执行控制器将数据包烧写至备份存储区域中。

可选地,如图7所示,控制器还包括第一烧写状态判断单元405。

第一烧写状态判断单元405用于,判断数据包的重复烧写次数是否达到预定的阈值;

若是,反馈固件更新数据烧写失败信息。

进一步地,如图7所示,控制器还包括第二烧写状态判断单元406。

第二烧写状态判断单元406用于,判断烧写至备份存储区域的数据包是否为最后一帧数据;

还用于在烧写至所述备份存储区域的数据包是为最后一帧数据时,反馈固件更新完成信息;

还用于在烧写至所述备份存储区域的数据包不为最后一帧数据时,接收下一帧固件更新数据。

可选地,第二烧写状态判断单元406具体用于,

获取当前数据包的序数;

根据当前数据包的序数是否与固件更新数据包含的总帧数相等,以判断备份存储区域的数据包是否为最后一帧数据。

可选地,控制器采用modbus总线通信方式,接收主站发送的指令及固件更新数据,完成固件更新。

请参阅图8,其为本发明实施例中控制器一个实施例的硬件框图,该控制器可以是可编程逻辑控制器,该控制器500包括:处理器501、存储器502、接口503和总线504,处理器501与存储器502通过总线503连接,数据接口503(如:jatg口)用于烧录数据。存储器502用于存储程序代码,处理器501用于调用程序代码执行如上述任一项的数据处理方法。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

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

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1