发明内容
本发明的目的,在于克服现有的应用程序更新方法在出现上述异常时无法实现更新或无法恢复这一技术问题,从而提供了一种创新的应用程序更新方法及装置。
为达到上述目的,在本发明的一个方面,提供了一种应用程序更新方法,用于对处理系统内的应用程序进行更新,该应用程序位于该处理系统的应用程序区。该应用程序更新方法包括以下步骤:
步骤S100,判断第一临时存储区内是否存在尚未覆盖该应用程序区的新的应用程序数据:
如果不存在该尚未覆盖该应用程序区的新的应用程序数据,则将应用程序区内原有应用程序数据备份至该第二临时存储区,并进入步骤S200;
如果存在该尚未覆盖该应用程序区的新的应用程序,则利用该第一临时存储区内的该新的应用程序数据覆盖该应用程序区,将该新的应用程序数据备份至该第二临时存储区,并进入该应用程序区内的循环流程;
步骤S200,向在运行中的应用程序区的循环流程发出更新指令;
步骤S300,应用程序区接收到该更新指令后,将新的应用程序数据下载到该第一临时存储区;
步骤S400,利用第一临时存储区内的该新的应用程序数据覆盖该应用程序区;
步骤S500,判断该覆盖完成后,应用程序区是否正确运行,其中:
如果该应用程序区运行正确,则进入步骤S600;
如果该应用程序区运行错误,则利用该第二临时存储区内的原有应用程序数据覆盖该应用程序区,并将该原有应用程序数据备份至第一临时存储区,然后进入该应用程序区内的循环流程;
步骤S600,将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区,并进入该应用程序区内的循环流程。
优选地,在步骤S100之前,还包括以下步骤:
步骤S000,对更新状态标签进行初始设定,该更新状态标签包括一个程序下载状态标记位;
并且:
在所述步骤S100中,通过程序下载状态标记位,判断该第一临时存储区内是否存在尚未覆盖该应用程序区的该新的应用程序数据;
在所述步骤S300中,所述将新的应用程序数据下载到该第一临时存储区后,还包括:更改该程序下载状态标记位;
在所述步骤S600中,该将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区之后,包括:复位该程序下载状态标记位,并进入该应用程序区内的循环流程。
优选地,所述更新状态标签还包括一个程序运行状态标记位,
并且:
在所述步骤S400中,所述利用第一临时存储区内的该新的应用程序数据覆盖该应用程序区后,还包括:更改该程序运行状态标记位;
在所述步骤S500中,该判断该应用程序区运行正确之后,包括:复位该程序运行状态标记位,并进入步骤S600。
优选地,所述步骤S000中,对所述更新状态标签进行初始设定,包括:将程序下载状态标记位设置为0;
所述步骤S100中,如果程序下载状态标记位为0,则判断为不存在该尚未覆盖该应用程序区的新的应用程序,否则,判断为存在该尚未覆盖该应用程序区的新的应用程序;
所述步骤S300中,该更改该程序下载状态标记位,包括:将该程序下载状态标记位设置为1;
所述步骤S600中,该复位该程序下载状态标记位,包括:将该程序下载状态标记位复位为0。
优选地,所述步骤S000中,对所述更新状态标签进行设定,还包括:将程序运行状态标记位设置为1;
所述步骤S400中,该更改该程序运行状态标记位,包括:将该程序运行状态标记位设置为0;以及
所述步骤S500中,该复位该程序运行状态标记位,包括:将该程序运行状态标记位设置为1。
优选地,所述更新状态标签还包括一个经步骤S000初始设置的首次执行标记位,并且,
在所述步骤S100中,如果不存在该尚未覆盖该应用程序区的新的应用程序,所述将应用程序区内原有应用程序数据备份至该第二临时存储区之后,更改该首次执行标记位,并进入步骤S200。
优选地,所述首次执行标记位初始设置成1,并且,
所述将应用程序区内原有应用程序数据备份至该第二临时存储区之后,将该首次执行标记位更改为0。
在本发明的另一个方面,还提供了一种应用程序更新装置,用于对处理系统内的应用程序进行更新,该应用程序位于该处理系统的应用程序区。该应用程序更新装置包括一个第一临时存储区、一个第二临时存储区、用于执行覆盖操作的覆盖执行模块以及用于执行备份操作的备份执行模块,该应用程序区可对该第一临时存储区及该第二临时存储区进行擦写,该应用程序更新装置进一步包括:
覆盖状态判断模块,用于判断第一临时存储区内是否存在尚未覆盖该应用程序区的新的应用程序数据,其中:
如果不存在该尚未覆盖该应用程序区的新的应用程序数据,则通过该备份执行模块,将应用程序区内原有应用程序数据备份至该第二临时存储区;
如果存在该尚未覆盖该应用程序区的新的应用程序数据,则通过该覆盖执行模块,利用该第一临时存储区内的该新的应用程序数据覆盖该应用程序区,并通过该备份执行模块,将该新的应用程序数据备份至该第二临时存储区;
更新指令发送模块,用于向在运行中的应用程序区的循环流程发出更新指令;
更新下载模块,用于在应用程序区接收到该更新指令发送模块发出的该更新指令后,将新的应用程序数据下载到该第一临时存储区;
程序状态判断模块,用于判断通过该覆盖执行模块将新的应用程序数据覆盖该应用程序区后,应用程序区是否正确运行,其中:
如果该应用程序区运行正确,则通过备份执行模块,将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区;
如果该应用程序区运行错误,则通过该覆盖执行模块,利用该第二临时存储区内的原有应用程序数据覆盖该应用程序区,并通过该备份执行模块,将该原有应用程序数据备份至该第一临时存储区。
优选地,还包括一个更新状态标签设置模块,该更新状态标签设置模块包括经初始设定的更新状态标签,该更新状态标签包括一个程序下载状态标记位,
并且:
所述覆盖状态判断模块可通过该程序下载状态标记位,判断该第一临时存储区内是否存在尚未覆盖该应用程序区的该新的应用程序数据;
利用所述更新下载模块将新的应用程序数据下载到该第一临时存储区后,该更新状态标签设置模块对该程序下载状态标记位进行更改;
利用所述备份执行模块该将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区之后,该更新状态标签设置模块对该程序下载状态标记位进行复位。
优选地,该更新状态标签还包括一个程序运行状态标记位,
并且:
利用所述覆盖执行模块将该新的应用程序数据覆盖该应用程序区后,该更新状态标签设置模块对该程序运行状态标记位进行更改;
当程序状态判断模块判断该应用程序区运行正确之后,该更新状态标签设置模块对该程序运行状态标记位进行复位。
优选地,所述更新状态标签设置模块将所述程序下载状态标记位初始设置为0,
并且:
当所述程序下载状态标记位为0时,所述覆盖状态判断模块判断所述第一临时存储区内不存在尚未覆盖所述应用程序区的所述新的应用程序数据,否则,判断为存在该尚未覆盖该应用程序区的所述新的应用程序数据;
所述更新下载模块将所述新的应用程序数据下载到所述第一临时存储区后,所述更新状态标签设置模块将所述程序下载状态标记位更改为1;
所述备份执行模块将所述第一临时存储区内的所述新的应用程序数据备份至所述第二临时存储区之后,所述状态标签设置模块将所述程序下载状态标记位复位为0。
优选地,所述更新状态标签设置模块将所述程序运行状态标记位初始设置为1,
并且:
所述覆盖执行模块将所述新的应用程序数据覆盖所述应用程序区后,所述更新状态标签设置模块将所述程序运行状态标记位更改为0;
当所述程序状态判断模块判断该应用程序区运行正确之后,所述更新状态标签设置模块将所述程序运行状态标记位复位为1。
优选地,所述更新状态标签还包括一个经所述更新状态标签设置模块初始设置的首次执行标记位,并且,
通过所述备份执行模块将所述应用程序区内原有应用程序数据备份至所述第二临时存储区之后,更改该首次执行标记位。
优选地,所述更新状态标签设置模块将所述首次执行标记位初始设置成1,并且,
所述备份执行模块将应用程序区内原有应用程序数据备份至所述第二临时存储区之后,所述更新状态标签设置模块将该首次执行标记位更改为0。
优选地,所述处理系统为AVR系列单片机。
本发明的应用程序更新方法和装置,由于对应用程序区内原有的应用程序数据进行备份,并且通过程序状态判断模块和覆盖状态判断模块进行对应的状态判断,以实现在异常发生时能够顺利完成更新或者当新的应用程序数据错误运行时,使设备的应用程序区重新加载入原有的应用程序数据,从而实现数据恢复。
具体实施方式
以下结合附图和具体实施方式,对本发明的应用程序更新方法和装置的流程步骤和组成进行详细说明。
总体而言,本发明的应用程序更新方法及装置,可用于处理系统中应用程序的更新,尤其适用于恶劣环境下工作的系统内的应用程序的更新,例如在室外设备内应用程序的更新。含有这些应用程序的处理系统可以是移动通信领域、电调控制领域、监控系统领域或其他适合领域中的数据处理装置,例如微处理器、通用数字信号处理器、专用数字信号处理器、可编程逻辑芯片等。在以下对本发明的描述中,通过AVR系列单片机作为该处理系统进行描述,但是容易理解,该处理系统可以是以上所述的任何具有数据处理能力的装置。
如图2所示,是本发明的应用程序更新的方法的流程示意图,该方法包括步骤S100至步骤S600,其中,在步骤S100中,判断第一临时存储区内是否存在尚未覆盖该应用程序区的新的应用程序数据:如果不存在该尚未覆盖该应用程序区的新的应用程序数据,则将应用程序区内原有应用程序数据备份至该第二临时存储区,并进入步骤S200;如果存在该尚未覆盖该应用程序区的新的应用程序,则利用该第一临时存储区内的该新的应用程序数据覆盖该应用程序区,将该新的应用程序数据备份至该第二临时存储区,并进入该应用程序区内的循环流程;接下来,在步骤S200中,向在运行中的应用程序区的循环流程发出更新指令;接下来,在步骤S300中,应用程序区接收到该更新指令后,将新的应用程序数据下载到该第一临时存储区;接下来,在步骤S400中,利用第一临时存储区内的该新的应用程序数据覆盖该应用程序区;接下来,在步骤S500中,判断该覆盖完成后,应用程序区是否正确运行,其中:如果该应用程序区运行正确,则进入步骤S600;如果该应用程序区运行错误,则利用该第二临时存储区内的原有应用程序数据覆盖该应用程序区,并将该原有应用程序数据备份至第一临时存储区,然后进入该应用程序区内的循环流程;接下来,在步骤S600中,将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区,并进入该应用程序区内的循环流程。
在以下的描述中,将以AVR系列单片机作为处理系统,并结合图4、5中在AVR系列单片机中实施该方法的设计流程图,来对本发明的应用程序的实施进行详细说明。
另外,在本发明书各部分的用语中,“覆盖”和“备份”均指在特定存储区域内,用新的数据取代旧的数据,即在“覆盖”和“备份”完成后,该特定存储区域内的旧的数据被完全擦除,而仅存在新的数据。为更清晰地描述本发明,在描述中,如果该数据取代发生在应用程序区,则用“覆盖”表示,以说明在应用程序区内发生的数据更新;另一方面,如果该数据取代发生在第一临时存储区和第二临时存储区,则用“备份”表示,以说明两个临时存储区的数据备份作用。但是,在一个步骤中(如图2所示,步骤S300),当将新的应用程序数据下载到第一临时存储区时,这样的数据取代用“下载”表示,以说明该数据来自于外部系统,并通过通信链路进入第一临时存储区,同时,该第一临时存储区的旧的数据被完全擦除。
步骤S100。
如上所述,并结合图2,在该步骤中,主要是判断第一临时存储区内是否存在尚未覆盖应用程序的新的应用程序。
在应用程序更新过程中,如果是首次更新操作,则尚未下载新的应用程序,此时,可将应用程序区内原有的应用程序数据备份到第二临时存储区,然后进入步骤S200。
另一方面,如果不是首次更新操作,并且在上次更新操作过程中,虽然已经完成下载,但是未能成功地将下载到的新的应用程序数据覆盖应用程序区(即在一次更新操作中,完成了步骤S300,但未能完成步骤S400,这将在以下进行详细说明),此时,则利用第一临时存储区内的新的应用程序数据覆盖应用程序区,并将新的应用程序数据备份到第二临时存储区,然后进入应用程序区内的循环流程,从而完成上次更新操作中未完成的应用程序更新。
在本实施方式中,应用程序区位于该AVR系列单片机内的一个存储区域内,它包括有应用程序数据,并且在设备正常运行状态下,应用程序区内的应用程序为一个循环流程,在该循环流程中,应用程序依照设定,根据不同需要执行预定功能。另外,第一临时存储区和第二临时存储区可以是单片机内固有的可被应用程序区擦写的存储区域,也可以是独立于单片机之外的、可被应用程序区擦写的存储区域,例如附加的专用存储器件。另外,在该AVR系列单片机中,还包括一个初始代码区(BOOT区),该初始代码区固化有不可擦写的程序数据,这些程序数据在出厂时烧入。初始代码区可对应用程序区进行擦写,但是它不能对第一临时存储区和第二临时存储区进行擦写。
判断第一临时存储区内是否存在尚未覆盖应用程序区的新的应用程序数据,可通过设定标记位来实现。因此,在本发明的一个实施方式中,可利用一个更新状态标签来进行该判断以及以下步骤中可能出现的其他判断。该更新状态标签可以位于单片机内部或外部的存储区域内,例如AVR系列单片机的内部EEPROM。为满足步骤S100中的判断,更新状态标签可包括一个程序下载状态标记位,通过该标记位,可以判断出第一临时存储区内是否存在尚未覆盖应用程序区的新的应用程序数据。
因此,容易理解,本实施方式中,在该步骤S100之前,还包括一个对更新状态标签进行初始设定的步骤,如图3所示,在该初始设定步骤S000中,对程序下载状态标记位进行初始设定。由此,在步骤S100中,如果程序下载状态标记位为初始设定值,则可判断不存在该尚未覆盖应用程序区的该新的应用程序数据,如果该程序下载标记位已被更改,则判断存在该新的应用程序数据。
在后续步骤中还会进一步描述,在一定操作完成后,还会对该程序下载状态标记位进行相应更改。
容易理解,程序下载状态标记位可以根据需要设定为任何合适的初始值,在本实施方式中,为简单起见,将其初始值设定为0,在后面步骤中进行首次更改时,则更改为1,再次更改,则重新设置成0(称为“复位”,即回复至初始值),如此交替重复。
步骤S200。
当步骤S100完成后,设备进入应用程序区内的循环流程中,此后,在步骤S200中,向运行中的应用程序区的循环流程发出更新指令。该更新指令可以是一个由外部系统发出的中断指令。例如,该外部系统可以是一台个人计算机或其他控制平台,当需要对应用程序区进行更新时,外部控制系统的操作者可通过该控制系统,通过人机交互界面设备发出该更新指令。
步骤S300。
应用程序区接收到该更新指令后,则将新的应用程序数据下载到临时存储区内。
优选地,当该下载完成后,对程序下载状态标记位进行更改。如上所述,在本发明的一个实施方式中,该更改可以是将程序下载状态标记位修改为1,以表示该新的应用程序数据已经被下载但尚未覆盖应用程序区。
步骤S400。
当步骤S300的下载完成后,利用第一临时存储区内该新的应用程序数据覆盖应用程序区。在覆盖完成后,单片机设备的运行将由BOOT区转入应用程序区,而应用程序区内将运行新的应用程序。
步骤S500。
当步骤S400的覆盖操作完成后,判断应用程序区是否运行正确。本发明的一个创新方面在于,当应用程序区更新完成后,如果应用程序不能正确运行,则可以将应用程序区恢复至原先状态,即重新装载入原有应用程序数据。因此,在该步骤中,如果应用程序区运行正确,则可进入下一个步骤,完成更新操作,如果运行不正确,则对应用程序区进行恢复,即利用备份到第二临时程序区内的原有应用程序数据来覆盖应用程序区,同时,也将该原有应用程序数据备份到第一临时存储区,然后进入应用程序区内的循环流程,等待新的更新指令发出。
判断应用程序区运行是否正确,可通过判断设备是否能够成功执行初始化过程中的特定功能(例如,外部存储设备初始化、串口初始化、底层协议初始化、电机驱动初始化、全局变量初始化等。)来完成。当这些初始化功能被成功执行后,外部处理系统则可通过运行设备(AVR系列单片机)反馈的输出,判断应用程序运行正确,从而证明应用程序区已被成功更新并且能够正确运行,此时可进入下一个步骤S600。反之,如果这些功能不能成功执行,则外部处理系统接收到单片机设备反馈的输出后,判断更新后的应用程序运行错误,进而进行应用程序区内的上述恢复操作。
为便于本发明方法流程的实施,在该实施方式中,上述更新标签还包括一个程序运行状态标记位。并且在步骤S000的初始化操作中,程序运行状态标记位被设置为1。在步骤S400的覆盖操作完成之后,更改该程序运行标记位为0,然后,在步骤S500中,如果判断应用程序运行正确,则将程序运行标记位复位至1,如果判断运行不正确,则仍然保持为0,以利于后续的恢复处理。
容易理解,对于程序运行标记位的初始值和更改值的设定,可以采取任何合适的数值或者标记。并且,程序运行状态标记位的更改也可在步骤S500中完成,例如,当判断应用程序运行正确后,则保持该程序运行状态标记位不变,反之,则更改为0。这同样可达到处理系统根据该标记位的更改来进行后续处理的效果。
步骤S600。
当完成应用程序区的覆盖、并且判断应用程序区内新的应用程序正常运行后,则在该步骤中,将第一临时存储区内的新的应用程序备份到第二临时存储区,然后进入应用程序区内的循环流程,从而最终完成应用程序的更新操作,进入设备正常运行状态。
在实现上述步骤的过程中,为便于本发明方法的实施,在该实施方式中,还包括一个上述更新标签还包括一个首次执行标记位。在步骤S000的初始化操作中,也包括对首次执行标记位进行初始化。在步骤S100中,当判断第一临时存储区内不存在尚未覆盖应用程序区的新的应用程序数据,则说明为更新操作的“首次执行”,即尚未备份原有的应用程序数据,此时按照步骤S100,将原有应用程序数据备份后,更改首次执行标记位,以表明“首次执行”(即备份原有的应用程序数据已经完成)。此后,如果在一个流程中出现错误,则系统重新从步骤S100开始执行时,该首次执行位不再变化,直至更新操作最终完成(包括新的应用程序数据成功覆盖,或者恢复原有应用程序数据两种情况)。在本发明的一个优选的实施方式中,首次执行标记位初始设置成1,并且,当原有应用程序数据备份完成后,将首次执行标记位更改为0。当然,容易理解,也可以根据需要,将首次执行标记位分别初始设置或者更改为其它的标记值。
示例。
以下结合图4、5的更具体的实现本发明的应用程序更新方法的一个示例的流程示意图,来说明本发明的更新方法的具体实现。在该示例中,设置了更新状态标签,该更新状态标签包括程序下载状态标记位DownLoadFlag、程序运行状态标记位SuccessFlag以及首次执行标记位FirstActionFlag。如上所述,在初始化操作时,将程序下载状态标签DownLoadFlag初始设置为0,将程序运行状态标签SuccessFlag初始设置为1,并将首次执行标签FirstActionFlag初始设置为1。另外,如上所述,该流程结合AVR系列单片机实施,其包括一个初始代码区(Boot),一个应用程序区,一个第一临时存储区(A区)以及一个第二临时存储区(B区),其中,应用程序区内的应用程序数据是需要被更新的对象。
首先,假设在更新过程中,没有错误发生,则根据本发明的更新步骤,首先是原有应用程序数据备份,然后接收到更新指令后,下载新的应用程序数据至第一临时存储单元,然后再覆盖应用程序区,接下来,判断程序运行正确,再将该信的应用程序数据备份至第二临时存储单元,并进入应用程序区的循环流程,从而完成数据更新。
具体地,结合图4、5,在第一个程序流程中,为接收到更新指令前的备份操作,在步骤P101中,设备上电复位并进入初始代码区开始执行,在P102中,由于SucessFlag=1,故进入P103,在P103中,由于DownLoadFlag=0,故流程进入P107,此时,将SuccessFlag更改为0,在步骤P108中,进入应用程序区的应用主程序,在步骤P109中,因为FirstActionFlag=1,故此时将应用程序区内的原有应用程序数据备份到第二临时程序区(B区),在P111中,由于是原有应用程序数据,故执行正常,进入P112,将SuccessFlag复位为1。步骤P112中,因为DownLoadFlag=0,即尚未下载,故进入应用程序区循环的程序主流程P118。等待更新指令发出。
接下来,当步骤S200执行时,即向循环流程发出更新指令时,在P119中,收到一个更新下载的中断指令,此时进入P120,执行步骤S300,即将新的应用程序数据下载到第一临时存储区(A区),然后,将DownLoadFlag更改为1,接着再次上电复位,执行P121,此时,由于P102中SuccessFlag=1、P103中DownLoadFlag=1,所以进入P105,将下载地址指向第一临时存储区(A区),并将A区的新的应用程序数据覆盖应用程序区(P106),从而完成对步骤S400的执行;P107中,将SucessFlag更改为0,进入应用程序区内的应用主程序(P108),P109中,由于FirstActionFlag=0,故进入P111,执行步骤S500,即判断覆盖后应用程序区是否能够正确运行,当能够正确运行时,将SuccessFlag复位为1(P112);接下来执行步骤S600:在P113中,由于DownLoadFlag=1,并且下载地址为A区(P114),此时将A区的新的应用程序数据备份到B区(P115),然后将DownLoadFlag更改为0,接下来,进入应用程序区内的循环流程118,并等待新的更新指令的发出。
在异常情况发生时,本发明的程序更新方法亦可完成更新,或恢复至原有程序。例如,当在上一个流程下载完成并覆盖应用程序区后,如果新的应用程序出现异常情况,即不能成功执行,此时依照本发明可恢复至原有状态(步骤S500),具体地,参照图4、5,当在P111中判断未能成功执行后,此时进入P101,重新上电复位,由于P102中SuccessFlag=0,因此下载地址指向第二临时存储区(B区),然后在P106中,第二临时存储区内的原有程序数据覆盖应用程序区,从而实现应用程序数据的恢复。然后,在流程P114中,由于下载地址是B区,因此,此时再将B区内的原有应用程序数据重新备份到第一临时存储区(A区)(P116),由此,实现应用程序区、第一临时存储区和第二临时存储区内数据的一致。此后,再次进入P110中的循环流程,等待新的更新指令发出。
另一种异常情况是在下载过程中出现异常(P120),例如断电情况发生,则此时DownLoadFlag由于为0,因此系统认为并未下载。此后等待新的下载指令下达。
再一种异常情况是首次执行操作时,在将原有应用程序数据备份到第二临时存储区时出现异常情况,则由于FirstAction仍然为1,因此在下一个运行流程时,可再次执行备份。
第四种异常情况时当新的应用程序运行成功后,在由第一临时存储区到第二临时存储区备份的过程中出现异常。此时,在上电复位后,由于DownLoadFlag=1,因此会再次执行覆盖和备份操作,从而保证三个存储区域(应用程序区、第一临时存储区和第二临时存储区)内存储的数据均为新的应用程序数据。类似地,在利用第一临时存储区内的新的应用数据覆盖应用程序区(步骤S400,P106)的过程中如果出现断电等异常情况。则在重新上电之后,由于DownLoadFlag=1,因此系统会再次执行覆盖操作,并当程序成功执行后,执行备份操作,并最终进入循环流程(P118)。
另外,在设备装载新的应用程序完成并进入循环流程的运行中,可能会出现程序跑飞现象。首先,程序可能会跑飞到初始代码区,并擦除应用程序区的数据。此时,由于看门狗组件自动重启或手动重启后,会再次进入初始代码区执行,此时,由于应用程序区数据出错而不能正确运行,因此程序运行状态标签=0,因此,根据本发明的流程,将会用第二临时存储区内存储的应用程序数据覆盖应用程序区(P104,P106),从而重新使得应用程序区恢复正常。其次,当数据备份时出现程序跑飞现象,即程序指针直接跑到一个临时存储区,将该临时存储区内的数据备份到另一个临时存储区,因为两个临时存储区内的数据一致,因此再次备份并不会影响到数据的正确性。
与该应用程序更新方法相对应,本发明还提供了用于执行该方法的应用程序更新装置。如图6所示,是本发明的应用程序更新装置100的组成示意图。利用应用程序更新装置100,可将新的应用程序数据下载并覆盖应用程序区10。如上所述,当应用程序区10被覆盖后,如果新的应用程序不能正确执行,则应用程序更新装置还可将应用程序区10恢复,即利用原有的应用程序数据覆盖应用程序区10。并且,如以上对本发明的方法所描述的那样,如果在更新的过程中出现断电等异常情况,或者在应用程序运行中出现程序擦跑飞的现象,本发明的应用程序更新装置100也可在设备重新启动后,重新完成更新工作。
如图6所示,本发明的程序更新装置100包括第一临时存储区110,第二临时存储区120、覆盖执行模块130、备份执行模块140、覆盖状态判断模块150、程序状态判断模块160、更新指令发送模块170以及更新下载模块180。
如上所述,该程序更新装置100的第一临时存储区110和第二临时存储区120可以是运行设备(例如AVR系列单片机)本身的存储区域,也可以是外围的存储区域。如以上所解释,用于执行覆盖操作(利用数据覆盖应用程序区)的覆盖执行模块130和用于执行备份操作(将应用程序区内的数据复制到一个或多个临时存储区,或者将一个临时存储区内的数据复制到另一个临时存储区)的备份执行模块140实质上均执行复制功能。它们和覆盖状态判断模块150、程序状态判断模块160、更新指令发送模块170和更新下载模块180均可位于一个独立于运行设备之外的操作系统中,例如以个人计算机为中心的控制平台等。
以下,对各模块进行更具体的说明。
覆盖状态判断模块150用于判断第一临时存储区110内是否存在尚未覆盖该应用程序区的新的应用程序数据。如果不存在尚未覆盖该应用程序区10的新的应用程序数据,则通过备份执行模块140,将应用程序区10内原有应用程序数据备份至第二临时存储区120;如果存在尚未覆盖应用程序区10的新的应用程序数据,则通过覆盖执行模块130,利用第一临时存储区110内的新的应用程序数据覆盖该应用程序区,并通过备份执行模块140,将新的应用程序数据备份至第二临时存储区120。
更新指令发送模块170用于向在运行中的应用程序区的循环流程发出更新指令。该模块170发出的更新指令为一个中断指令,当循环流程接收到后,开始执行更新操作。
更新下载模块180用于在应用程序区10接收到更新指令发送模块170发出的更新指令后,将新的应用程序数据下载到该第一临时存储区110。
程序状态判断模块160用于判断通过覆盖执行模块130将新的应用程序数据覆盖应用程序区10后,应用程序区10是否正确运行。如果应用程序区10运行正确,则通过备份执行模块140,将第一临时存储区110内的新的应用程序数据备份至该第二临时存储区120;如果应用程序区10运行错误,则通过覆盖执行模块130,利用第二临时存储区120内的原有应用程序数据覆盖应用程序区10,并通过备份执行模块140,将原有应用程序数据备份至第一临时存储区110。如上所述,程序状态判断模块160通过判断应用程序区内初始化运行时的各初始化功能是否顺利执行,来判断应用程序区10是否能够正确运行。初始化功能是否顺利执行,可通过多种形式传输到程序状态判断模块160,例如应用程序区10内应用程序在运行时,如能够顺利执行初始化功能,则程序指针在运行到特定地址时,向程序判断模块160发出信号,则程序状态判断模块160则可判断为成功执行。
利用本发明的应用程序更新装置,可成功实现对应用程序的更新。再次参照图2,在步骤S100中,覆盖状态判断模块150判断第一临时存储区110内是否存在尚未覆盖该应用程序区10的新的应用程序数据:如果不存在尚未覆盖该应用程序区10的新的应用程序数据,则利用备份执行模块140,将应用程序区10内原有应用程序数据备份至第二临时存储区120,并进入步骤S200;如果存在该尚未覆盖该应用程序区10的新的应用程序,则利用第一临时存储区110内的该新的应用程序数据覆盖该应用程序区10,并利用备份执行模块140将新的应用程序数据备份至该第二临时存储区120,并进入该应用程序区10内的循环流程;接下来,在步骤S200中,更新指令发送模块170向在运行中的应用程序区10的循环流程发出更新指令;接下来,在步骤S300中,应用程序区10接收到该更新指令后,利用更新下载模块180将新的应用程序数据下载到该第一临时存储区110;接下来,在步骤S400中,利用覆盖执行模块130将第一临时存储区110内的该新的应用程序数据覆盖该应用程序区110;接下来,在步骤S500中,利用程序状态判断模块150判断该覆盖完成后,应用程序区10是否正确运行,其中:如果该应用程序区10运行正确,则进入步骤S600;如果该应用程序区10运行错误,则利用覆盖执行模块130,将该第二临时存储区120内的原有应用程序数据覆盖该应用程序区10,并利用备份执行模块140,将该原有应用程序数据备份至第一临时存储区110,然后进入该应用程序区10内的循环流程;接下来,在步骤S600中,将该第一临时存储区110内的该新的应用程序数据备份至该第二临时存储区120,并进入该应用程序区10内的循环流程。更具体地的描述可参见以上对本发明步骤S100-S600的详细描述。
优选地,参照以上对本发明方法描述中的实施方式,并结合图6、7,本发明的应用程序更新装置还包括一个更新状态标签设置模块190,该更新状态标签设置模块包括经初始设定的更新状态标签192。更新状态标签192可包括多个标记位,用于对各状态进行标记,以利于本发明的实现。在一个优选的实施方式中,更新状态标签192包括一个程序下载状态标记位。覆盖状态判断模块190可通过该程序下载状态标记位,判断该第一临时存储区110内是否存在尚未覆盖该应用程序区10的该新的应用程序数据。当利用更新下载模块180将新的应用程序数据下载到第一临时存储区110后,更新状态标签设置模块190该程序下载状态标记位进行更改;当利用备份执行模块140该将该第一临时存储区110内的新的应用程序数据备份至该第二临时存储区120之后,更新状态标签设置模块190又可对该程序下载状态标记位进行复位。在上述对本发明方法描述的示例中,更新状态标签设置模块170将所述程序下载状态标记位初始设置为0,并且当程序下载状态标记位为0时,覆盖状态判断模块150判断第一临时存储区110内不存在尚未覆盖应用程序区10的新的应用程序数据,否则,判断为存在该尚未覆盖应用程序区10的新的应用程序数据;当更新下载模块180将新的应用程序数据下载到第一临时存储区110后,更新状态标签设置模块190将程序下载状态标记位更改为1;当备份执行模块140将第一临时存储区120内的新的应用程序数据备份至第二临时存储区120之后,状态标签设置模块190将所述程序下载状态标记位复位为0。
如上所述,该更新状态标签还优选地包括一个程序运行状态标记位,并且,当利用覆盖执行模块150将该新的应用程序数据覆盖应用程序区10后,更新状态标签设置模块190对该程序运行状态标记位进行更改;当程序状态判断模块160判断应用程序区运行正确之后,更新状态标签设置模块190对该程序运行状态标记位进行复位。在上述示例中,更新状态标签设置模块190将程序运行状态标记位初始设置为1,而覆盖执行模块190将新的应用程序数据覆盖应用程序区10后,更新状态标签设置模块190将程序运行状态标记位更改为0;然后,当程序状态判断模块160判断该应用程序区10运行正确之后,更新状态标签设置模块190将程序运行状态标记位复位为1。
容易理解,更新状态标签中的各标记位可以分别初始化或更改为不同于以上量的任何数值,只要能达到区分不同状态的目的即可。
综上所述,本发明的应用程序更新方法和装置,在实现应用程序更新时,能够针对各种异常情况进行处理。具体地,在应用程序数据损坏时,利用本发明的应用程序更新方法和装置,能够重新加载应用程序数据,使之恢复正常运行;当新的应用程序不能正常运行时,可以恢复至原有的应用程序;本发明的应用程序更新方法和装置还能够针对下载过程中出现的下载物理链路断开或掉电等意外情况,进行更新流程的恢复处理,从而避免了对应用程序数据造成损坏;并且,由于使用高可靠性的方法传输和下载文件数据,保证了数据快速准确到达设备。