应用程序更新方法和装置制造方法
【专利摘要】本发明公开了一种应用程序更新方法和装置,用于对设备内的应用程序进行更新。该方法包括以下步骤:步骤S100,判断第一临时存储区内是否存在尚未覆盖该应用程序区的新的应用程序数据;步骤S200,向在运行中的应用程序区的循环流程发出更新指令;步骤S300,将新的应用程序数据下载到该第一临时存储区;步骤S400,利用第一临时存储区内的该新的应用程序数据覆盖该应用程序区;步骤S500,判断该覆盖完成后,应用程序区是否正确运行;步骤S600,将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区。本发明的应用程序更新方法和装置,在实现应用程序更新时,能够针对各种异常情况进行处理。
【专利说明】应用程序更新方法和装置
【技术领域】
[0001]本发明涉及存储在数据处理系统中非易失性存储区域内的应用程序处理,更具体地,是一种对该应用程序进行更新的方法和装置。
【背景技术】
[0002]在移动通信领域、电调控制领域、监控领域等存在有室外控制设备的诸多领域内,对于控制设备的软硬件均要求具有高可靠性和高稳定性。与此同时,也需要必须的灵活性,以利于控制设备内软件的更新升级,因为此类控制设备通常挂设于室外(比如天线控制单元),如果设备没有灵活的软件更新能力,则需要将设备从固定位置拆除,然后把应用程序下载到设备内,以完成软件升级。这样做造成了时间和人力上的浪费。另一方面,如果设备具有灵活的软件更新能力,但是它的可靠性不高,则容易造成正在运行中的设备内原有的应用程序被擦除,而新的应用程序尚未安装,从而导致应用程序丢失,进而造成损失。
[0003]在现有的应用程序更新方法中,是在处理器的初始代码区(例如微处理器的Boot区)启动时等待下载更新命令,一旦受到该命令,初始化代码区则建立软件下载链接,等待下载数据并将下载完成的数据覆盖现有的应用程序区内的应用程序数据,该应用程序区位于非易失性存储区域内。此方案中,每次更新都会有相应的校验,并根据可以覆盖的块的大小建立通信长度。
[0004]如图1所示,是上述应用程序更新方案的流程图。在步骤PlO中,上电复位后进入处理器内的初始代码区开始执行该区内程序,在P20中,判断是否收到更新指令,该更新指令为一个中断指令。当确认收到该更新指令后,接收用于更新现有应用程序的数据包(P30),经过P40的校验判断后,在P50中,将该数据覆盖应用程序区,否则,进入错误反馈P41,等待重新接收更新指令(P20),再经过P60的升级是否完成的判断,确定是否升级成功(P70),从而完成更新,进入到应用程序区内主程序的循环工作中(P80)。
[0005]由以上流程图可以看出,利用现有的应用程序更新方法对应用程序区内的程序进行更新,如果经过在P50,更新后的程序为不能正常运行的错误程序,则系统不能对该错误进行识别,也不能再恢复至原来正确的应用程序。并且,如果发生程序跑飞,擦除损坏了应用程序区内的应用程序,则系统自身没有自动修复的能力。另外,如果在下载更新过程中(即P50的数据覆盖过程)物理链接断开,则也会导致应用程序区内程序数据的损坏。
【发明内容】
[0006]本发明的目的,在于克服现有的应用程序更新方法在出现上述异常时无法实现更新或无法恢复这一技术问题,从而提供了一种创新的应用程序更新方法及装置。
[0007]为达到上述目的,在本发明的一个方面,提供了一种应用程序更新方法,用于对处理系统内的应用程序进行更新,该应用程序位于该处理系统的应用程序区。该应用程序更新方法包括以下步骤:
[0008]步骤S100,判断第一临时存储区内是否存在尚未覆盖该应用程序区的新的应用程序数据:
[0009]如果不存在该尚未覆盖该应用程序区的新的应用程序数据,则将应用程序区内原有应用程序数据备份至该第二临时存储区,并进入步骤S200 ;
[0010]如果存在该尚未覆盖该应用程序区的新的应用程序,则利用该第一临时存储区内的该新的应用程序数据覆盖该应用程序区,将该新的应用程序数据备份至该第二临时存储区,并进入该应用程序区内的循环流程;
[0011]步骤S200,向在运行中的应用程序区的循环流程发出更新指令;
[0012]步骤S300,应用程序区接收到该更新指令后,将新的应用程序数据下载到该第一临时存储区;
[0013]步骤S400,利用第一临时存储区内的该新的应用程序数据覆盖该应用程序区;
[0014]步骤S500,判断该覆盖完成后,应用程序区是否正确运行,其中:
[0015]如果该应用程序区运行正确,则进入步骤S600 ;
[0016]如果该应用程序区运行错误,则利用该第二临时存储区内的原有应用程序数据覆盖该应用程序区,并将该原有应用程序数据备份至第一临时存储区,然后进入该应用程序区内的循环流程;
[0017]步骤S600,将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区,并进入该应用程序区内的循环流程。
[0018]优选地,在步骤SlOO之前,还包括以下步骤:
[0019]步骤S000,对更新状态标签进行初始设定,该更新状态标签包括一个程序下载状态标记位;
[0020]并且:
[0021]在所述步骤SlOO中,通过程序下载状态标记位,判断该第一临时存储区内是否存在尚未覆盖该应用程序区的该新的应用程序数据;
[0022]在所述步骤S300中,所述将新的应用程序数据下载到该第一临时存储区后,还包括:更改该程序下载状态标记位;
[0023]在所述步骤S600中,该将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区之后,包括:复位该程序下载状态标记位,并进入该应用程序区内的循环流程。
[0024]优选地,所述更新状态标签还包括一个程序运行状态标记位,
[0025]并且:
[0026]在所述步骤S400中,所述利用第一临时存储区内的该新的应用程序数据覆盖该应用程序区后,还包括:更改该程序运行状态标记位;
[0027]在所述步骤S500中,该判断该应用程序区运行正确之后,包括:复位该程序运行状态标记位,并进入步骤S600。
[0028]优选地,所述步骤S000中,对所述更新状态标签进行初始设定,包括:将程序下载状态标记位设置为O ;
[0029]所述步骤SlOO中,如果程序下载状态标记位为0,则判断为不存在该尚未覆盖该应用程序区的新的应用程序,否则,判断为存在该尚未覆盖该应用程序区的新的应用程序;[0030]所述步骤S300中,该更改该程序下载状态标记位,包括:将该程序下载状态标记位设置为I ;
[0031]所述步骤S600中,该复位该程序下载状态标记位,包括:将该程序下载状态标记位复位为O。
[0032]优选地,所述步骤S000中,对所述更新状态标签进行设定,还包括:将程序运行状态标记位设置为I ;
[0033]所述步骤S400中,该更改该程序运行状态标记位,包括:将该程序运行状态标记位设置为O;以及
[0034]所述步骤S500中,该复位该程序运行状态标记位,包括:将该程序运行状态标记位设置为I。
[0035]优选地,所述更新状态标签还包括一个经步骤S000初始设置的首次执行标记位,并且,
[0036]在所述步骤SlOO中,如果不存在该尚未覆盖该应用程序区的新的应用程序,所述将应用程序区内原有应用程序数据备份至该第二临时存储区之后,更改该首次执行标记位,并进入步骤S200。
[0037]优选地,所述首次执行标记位初始设置成1,并且,
[0038]所述将应用程序区内原有应用程序数据备份至该第二临时存储区之后,将该首次执行标记位更改为O。
[0039]在本发明的另一个方面,还提供了一种应用程序更新装置,用于对处理系统内的应用程序进行更新,该应用程序位于该处理系统的应用程序区。该应用程序更新装置包括一个第一临时存储区、一个第二临时存储区、用于执行覆盖操作的覆盖执行模块以及用于执行备份操作的备份执行模块,该应用程序区可对该第一临时存储区及该第二临时存储区进行擦写,该应用程序更新装置进一步包括:
[0040]覆盖状态判断模块,用于判断第一临时存储区内是否存在尚未覆盖该应用程序区的新的应用程序数据,其中:
[0041]如果不存在该尚未覆盖该应用程序区的新的应用程序数据,则通过该备份执行模块,将应用程序区内原有应用程序数据备份至该第二临时存储区;
[0042]如果存在该尚未覆盖该应用程序区的新的应用程序数据,则通过该覆盖执行模块,利用该第一临时存储区内的该新的应用程序数据覆盖该应用程序区,并通过该备份执行模块,将该新的应用程序数据备份至该第二临时存储区;
[0043]更新指令发送模块,用于向在运行中的应用程序区的循环流程发出更新指令;
[0044]更新下载模块,用于在应用程序区接收到该更新指令发送模块发出的该更新指令后,将新的应用程序数据下载到该第一临时存储区;
[0045]程序状态判断模块,用于判断通过该覆盖执行模块将新的应用程序数据覆盖该应用程序区后,应用程序区是否正确运行,其中:
[0046]如果该应用程序区运行正确,则通过备份执行模块,将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区;
[0047]如果该应用程序区运行错误,则通过该覆盖执行模块,利用该第二临时存储区内的原有应用程序数据覆盖该应用程序区,并通过该备份执行模块,将该原有应用程序数据备份至该第一临时存储区。
[0048]优选地,还包括一个更新状态标签设置模块,该更新状态标签设置模块包括经初始设定的更新状态标签,该更新状态标签包括一个程序下载状态标记位,
[0049]并且:
[0050]所述覆盖状态判断模块可通过该程序下载状态标记位,判断该第一临时存储区内是否存在尚未覆盖该应用程序区的该新的应用程序数据;
[0051]利用所述更新下载模块将新的应用程序数据下载到该第一临时存储区后,该更新状态标签设置模块对该程序下载状态标记位进行更改;
[0052]利用所述备份执行模块该将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区之后,该更新状态标签设置模块对该程序下载状态标记位进行复位。
[0053]优选地,该更新状态标签还包括一个程序运行状态标记位,
[0054]并且:
[0055]利用所述覆盖执行模块将该新的应用程序数据覆盖该应用程序区后,该更新状态标签设置模块对该程序运行状态标记位进行更改;
[0056]当程序状态判断模块判断该应用程序区运行正确之后,该更新状态标签设置模块对该程序运行状态标记位进行复位。
[0057]优选地,所述更新状态标签设置模块将所述程序下载状态标记位初始设置为0,
[0058]并且:
[0059]当所述程序下载状态标记位为O时,所述覆盖状态判断模块判断所述第一临时存储区内不存在尚未覆盖所述应用程序区的所述新的应用程序数据,否则,判断为存在该尚未覆盖该应用程序区的所述新的应用程序数据;
[0060]所述更新下载模块将所述新的应用程序数据下载到所述第一临时存储区后,所述更新状态标签设置模块将所述程序下载状态标记位更改为I;
[0061]所述备份执行模块将所述第一临时存储区内的所述新的应用程序数据备份至所述第二临时存储区之后,所述状态标签设置模块将所述程序下载状态标记位复位为O。
[0062]优选地,所述更新状态标签设置模块将所述程序运行状态标记位初始设置为I,
[0063]并且:
[0064]所述覆盖执行模块将所述新的应用程序数据覆盖所述应用程序区后,所述更新状态标签设置模块将所述程序运行状态标记位更改为O ;
[0065]当所述程序状态判断模块判断该应用程序区运行正确之后,所述更新状态标签设置模块将所述程序运行状态标记位复位为I。
[0066]优选地,所述更新状态标签还包括一个经所述更新状态标签设置模块初始设置的首次执行标记位,并且,
[0067]通过所述备份执行模块将所述应用程序区内原有应用程序数据备份至所述第二临时存储区之后,更改该首次执行标记位。
[0068]优选地,所述更新状态标签设置模块将所述首次执行标记位初始设置成I,并且,
[0069]所述备份执行模块将应用程序区内原有应用程序数据备份至所述第二临时存储区之后,所述更新状态标签设置模块将该首次执行标记位更改为O。
[0070]优选地,所述处理系统为AVR系列单片机。[0071]本发明的应用程序更新方法和装置,由于对应用程序区内原有的应用程序数据进行备份,并且通过程序状态判断模块和覆盖状态判断模块进行对应的状态判断,以实现在异常发生时能够顺利完成更新或者当新的应用程序数据错误运行时,使设备的应用程序区重新加载入原有的应用程序数据,从而实现数据恢复。
【专利附图】
【附图说明】
[0072]图1为现有的应用程序更新方法的流程示意图;
[0073]图2为本发明的应用程序更新方法的步骤流程图;
[0074]图3为图2中附加步骤S000的示意图;
[0075]图4为在一个实施方式中,实现本发明的应用程序更新方法的流程示意图的第一部分;
[0076]图5为在一个实施方式中,实现本发明的应用程序更新方法的流程示意图的第二部分。
[0077]图6为本发明的应用程序更新装置的组成示意图;
[0078]图7为在一个优选的实时方式中,本发明的应用程序更新装置的更新状态标签设置模块的示意图;
【具体实施方式】
[0079]以下结合附图和【具体实施方式】,对本发明的应用程序更新方法和装置的流程步骤和组成进行详细说明。
[0080]总体而言,本发明的应用程序更新方法及装置,可用于处理系统中应用程序的更新,尤其适用于恶劣环境下工作的系统内的应用程序的更新,例如在室外设备内应用程序的更新。含有这些应用程序的处理系统可以是移动通信领域、电调控制领域、监控系统领域或其他适合领域中的数据处理装置,例如微处理器、通用数字信号处理器、专用数字信号处理器、可编程逻辑芯片等。在以下对本发明的描述中,通过AVR系列单片机作为该处理系统进行描述,但是容易理解,该处理系统可以是以上所述的任何具有数据处理能力的装置。
[0081]如图2所示,是本发明的应用程序更新的方法的流程示意图,该方法包括步骤SlOO至步骤S600,其中,在步骤SlOO中,判断第一临时存储区内是否存在尚未覆盖该应用程序区的新的应用程序数据:如果不存在该尚未覆盖该应用程序区的新的应用程序数据,则将应用程序区内原有应用程序数据备份至该第二临时存储区,并进入步骤S200;如果存在该尚未覆盖该应用程序区的新的应用程序,则利用该第一临时存储区内的该新的应用程序数据覆盖该应用程序区,将该新的应用程序数据备份至该第二临时存储区,并进入该应用程序区内的循环流程;接下来,在步骤S200中,向在运行中的应用程序区的循环流程发出更新指令;接下来,在步骤S300中,应用程序区接收到该更新指令后,将新的应用程序数据下载到该第一临时存储区;接下来,在步骤S400中,利用第一临时存储区内的该新的应用程序数据覆盖该应用程序区;接下来,在步骤S500中,判断该覆盖完成后,应用程序区是否正确运行,其中:如果该应用程序区运行正确,则进入步骤S600 ;如果该应用程序区运行错误,则利用该第二临时存储区内的原有应用程序数据覆盖该应用程序区,并将该原有应用程序数据备份至第一临时存储区,然后进入该应用程序区内的循环流程;接下来,在步骤S600中,将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区,并进入该应用程序区内的循环流程。
[0082]在以下的描述中,将以AVR系列单片机作为处理系统,并结合图4、5中在AVR系列单片机中实施该方法的设计流程图,来对本发明的应用程序的实施进行详细说明。
[0083]另外,在本发明书各部分的用语中,“覆盖”和“备份”均指在特定存储区域内,用新的数据取代旧的数据,即在“覆盖”和“备份”完成后,该特定存储区域内的旧的数据被完全擦除,而仅存在新的数据。为更清晰地描述本发明,在描述中,如果该数据取代发生在应用程序区,则用“覆盖”表示,以说明在应用程序区内发生的数据更新;另一方面,如果该数据取代发生在第一临时存储区和第二临时存储区,则用“备份”表示,以说明两个临时存储区的数据备份作用。但是,在一个步骤中(如图2所示,步骤S300),当将新的应用程序数据下载到第一临时存储区时,这样的数据取代用“下载”表示,以说明该数据来自于外部系统,并通过通信链路进入第一临时存储区,同时,该第一临时存储区的旧的数据被完全擦除。
[0084]步骤SlOO。
[0085]如上所述,并结合图2,在该步骤中,主要是判断第一临时存储区内是否存在尚未覆盖应用程序的新的应用程序。
[0086]在应用程序更新过程中,如果是首次更新操作,则尚未下载新的应用程序,此时,可将应用程序区内原有的应用程序数据备份到第二临时存储区,然后进入步骤S200。
[0087]另一方面,如果不是首次更新操作,并且在上次更新操作过程中,虽然已经完成下载,但是未能成功地将下载到的新的应用程序数据覆盖应用程序区(即在一次更新操作中,完成了步骤S300,但未能完成步骤S400,这将在以下进行详细说明),此时,则利用第一临时存储区内的新的应用程序数据覆盖应用程序区,并将新的应用程序数据备份到第二临时存储区,然后进入应用程序区内的循环流程,从而完成上次更新操作中未完成的应用程序更新。
[0088]在本实施方式中,应用程序区位于该AVR系列单片机内的一个存储区域内,它包括有应用程序数据,并且在设备正常运行状态下,应用程序区内的应用程序为一个循环流程,在该循环流程中,应用程序依照设定,根据不同需要执行预定功能。另外,第一临时存储区和第二临时存储区可以是单片机内固有的可被应用程序区擦写的存储区域,也可以是独立于单片机之外的、可被应用程序区擦写的存储区域,例如附加的专用存储器件。另外,在该AVR系列单片机中,还包括一个初始代码区(BOOT区),该初始代码区固化有不可擦写的程序数据,这些程序数据在出厂时烧入。初始代码区可对应用程序区进行擦写,但是它不能对第一临时存储区和第二临时存储区进行擦写。
[0089]判断第一临时存储区内是否存在尚未覆盖应用程序区的新的应用程序数据,可通过设定标记位来实现。因此,在本发明的一个实施方式中,可利用一个更新状态标签来进行该判断以及以下步骤中可能出现的其他判断。该更新状态标签可以位于单片机内部或外部的存储区域内,例如AVR系列单片机的内部EEPR0M。为满足步骤SlOO中的判断,更新状态标签可包括一个程序下载状态标记位,通过该标记位,可以判断出第一临时存储区内是否存在尚未覆盖应用程序区的新的应用程序数据。
[0090]因此,容易理解,本实施方式中,在该步骤SlOO之前,还包括一个对更新状态标签进行初始设定的步骤,如图3所示,在该初始设定步骤S000中,对程序下载状态标记位进行初始设定。由此,在步骤SlOO中,如果程序下载状态标记位为初始设定值,则可判断不存在该尚未覆盖应用程序区的该新的应用程序数据,如果该程序下载标记位已被更改,则判断存在该新的应用程序数据。
[0091]在后续步骤中还会进一步描述,在一定操作完成后,还会对该程序下载状态标记位进行相应更改。
[0092]容易理解,程序下载状态标记位可以根据需要设定为任何合适的初始值,在本实施方式中,为简单起见,将其初始值设定为0,在后面步骤中进行首次更改时,则更改为1,再次更改,则重新设置成O (称为“复位”,即回复至初始值),如此交替重复。
[0093]步骤S200。
[0094]当步骤SlOO完成后,设备进入应用程序区内的循环流程中,此后,在步骤S200中,向运行中的应用程序区的循环流程发出更新指令。该更新指令可以是一个由外部系统发出的中断指令。例如,该外部系统可以是一台个人计算机或其他控制平台,当需要对应用程序区进行更新时,外部控制系统的操作者可通过该控制系统,通过人机交互界面设备发出该更新指令。
[0095]步骤S300。
[0096]应用程序区接收到该更新指令后,则将新的应用程序数据下载到临时存储区内。
[0097]优选地,当该下载完成后,对程序下载状态标记位进行更改。如上所述,在本发明的一个实施方式中,该更改可以是将程序下载状态标记位修改为1,以表示该新的应用程序数据已经被下载但尚未覆盖应用程序区。
[0098]步骤S400。
[0099]当步骤S300的下载完成后,利用第一临时存储区内该新的应用程序数据覆盖应用程序区。在覆盖完成后,单片机设备的运行将由BOOT区转入应用程序区,而应用程序区内将运行新的应用程序。
[0100]步骤S500。
[0101]当步骤S400的覆盖操作完成后,判断应用程序区是否运行正确。本发明的一个创新方面在于,当应用程序区更新完成后,如果应用程序不能正确运行,则可以将应用程序区恢复至原先状态,即重新装载入原有应用程序数据。因此,在该步骤中,如果应用程序区运行正确,则可进入下一个步骤,完成更新操作,如果运行不正确,则对应用程序区进行恢复,即利用备份到第二临时程序区内的原有应用程序数据来覆盖应用程序区,同时,也将该原有应用程序数据备份到第一临时存储区,然后进入应用程序区内的循环流程,等待新的更新指令发出。
[0102]判断应用程序区运行是否正确,可通过判断设备是否能够成功执行初始化过程中的特定功能(例如,外部存储设备初始化、串口初始化、底层协议初始化、电机驱动初始化、全局变量初始化等。)来完成。当这些初始化功能被成功执行后,外部处理系统则可通过运行设备(AVR系列单片机)反馈的输出,判断应用程序运行正确,从而证明应用程序区已被成功更新并且能够正确运行,此时可进入下一个步骤S600。反之,如果这些功能不能成功执行,则外部处理系统接收到单片机设备反馈的输出后,判断更新后的应用程序运行错误,进而进行应用程序区内的上述恢复操作。
[0103]为便于本发明方法流程的实施,在该实施方式中,上述更新标签还包括一个程序运行状态标记位。并且在步骤SOOO的初始化操作中,程序运行状态标记位被设置为I。在步骤S400的覆盖操作完成之后,更改该程序运行标记位为O,然后,在步骤S500中,如果判断应用程序运行正确,则将程序运行标记位复位至1,如果判断运行不正确,则仍然保持为0,以利于后续的恢复处理。
[0104]容易理解,对于程序运行标记位的初始值和更改值的设定,可以采取任何合适的数值或者标记。并且,程序运行状态标记位的更改也可在步骤S500中完成,例如,当判断应用程序运行正确后,则保持该程序运行状态标记位不变,反之,则更改为O。这同样可达到处理系统根据该标记位的更改来进行后续处理的效果。
[0105]步骤S600。
[0106]当完成应用程序区的覆盖、并且判断应用程序区内新的应用程序正常运行后,则在该步骤中,将第一临时存储区内的新的应用程序备份到第二临时存储区,然后进入应用程序区内的循环流程,从而最终完成应用程序的更新操作,进入设备正常运行状态。
[0107]在实现上述步骤的过程中,为便于本发明方法的实施,在该实施方式中,还包括一个上述更新标签还包括一个首次执行标记位。在步骤S000的初始化操作中,也包括对首次执行标记位进行初始化。在步骤SlOO中,当判断第一临时存储区内不存在尚未覆盖应用程序区的新的应用程序数据,则说明为更新操作的“首次执行”,即尚未备份原有的应用程序数据,此时按照步骤S100,将原有应用程序数据备份后,更改首次执行标记位,以表明“首次执行”(即备份原有的应用程序数据已经完成)。此后,如果在一个流程中出现错误,则系统重新从步骤Sioo开始执行时,该首次执行位不再变化,直至更新操作最终完成(包括新的应用程序数据成功覆盖,或者恢复原有应用程序数据两种情况)。在本发明的一个优选的实施方式中,首次执行标记位初始设置成1,并且,当原有应用程序数据备份完成后,将首次执行标记位更改为O。当然,容易理解,也可以根据需要,将首次执行标记位分别初始设置或者更改为其它的标记值。
[0108]示例。
[0109]以下结合图4、5的更具体的实现本发明的应用程序更新方法的一个示例的流程示意图,来说明本发明的更新方法的具体实现。在该示例中,设置了更新状态标签,该更新状态标签包括程序下载状态标记位DownLoadFlag、程序运行状态标记位SuccessFlag以及首次执行标记位FirstActionFlag。如上所述,在初始化操作时,将程序下载状态标签DownLoadFlag初始设置为O,将程序运行状态标签SuccessFlag初始设置为1,并将首次执行标签FirstActionFlag初始设置为I。另外,如上所述,该流程结合AVR系列单片机实施,其包括一个初始代码区(Boot),一个应用程序区,一个第一临时存储区(Ag)以及一个第二临时存储区(B区),其中,应用程序区内的应用程序数据是需要被更新的对象。
[0110]首先,假设在更新过程中,没有错误发生,则根据本发明的更新步骤,首先是原有应用程序数据备份,然后接收到更新指令后,下载新的应用程序数据至第一临时存储单元,然后再覆盖应用程序区,接下来,判断程序运行正确,再将该信的应用程序数据备份至第二临时存储单元,并进入应用程序区的循环流程,从而完成数据更新。
[0111]具体地,结合图4、5,在第一个程序流程中,为接收到更新指令前的备份操作,在步骤PlOl中,设备上电复位并进入初始代码区开始执行,在P102中,由于SucessFlag=I,故进入P103,在P103中,由于DownLoadFlag=O,故流程进入P107,此时,将SuccessFlag更改为O,在步骤P108中,进入应用程序区的应用主程序,在步骤P109中,因为FirstActionFlag=I,故此时将应用程序区内的原有应用程序数据备份到第二临时程序区(B区),在Plll中,由于是原有应用程序数据,故执行正常,进入P112,将SuccessFlag复位为I。步骤P112中,因为DownLoadFlag=O,即尚未下载,故进入应用程序区循环的程序主流程P118。等待更新指令发出。
[0112]接下来,当步骤S200执行时,即向循环流程发出更新指令时,在P119中,收到一个更新下载的中断指令,此时进入P120,执行步骤S300,即将新的应用程序数据下载到第一临时存储区(A区),然后,将DownLoadFlag更改为1,接着再次上电复位,执行P121,此时,由于P102中SuccessFlag=K P103中DownLoadFlag=I,所以进入P105,将下载地址指向第一临时存储区(A区),并将A区的新的应用程序数据覆盖应用程序区(P106),从而完成对步骤S400的执行;P107中,将SucessFlag更改为0,进入应用程序区内的应用主程序(P108),P109中,由于FirstActionFlag=O,故进入P111,执行步骤S500,即判断覆盖后应用程序区是否能够正确运行,当能够正确运行时,将SuccessFlag复位为I (P112);接下来执行步骤S600:在P113中,由于DownLoadFlag=I,并且下载地址为A区(P114),此时将A区的新的应用程序数据备份到B区(P115),然后将DownLoadFlag更改为O,接下来,进入应用程序区内的循环流程118,并等待新的更新指令的发出。
[0113]在异常情况发生时,本发明的程序更新方法亦可完成更新,或恢复至原有程序。例如,当在上一个流程下载完成并覆盖应用程序区后,如果新的应用程序出现异常情况,即不能成功执行,此时依照本发明可恢复至原有状态(步骤S500),具体地,参照图4、5,当在Plll中判断未能成功执行后,此时进入P101,重新上电复位,由于P102中SuccessFlag=O,因此下载地址指向第二临时存储区(B区),然后在P106中,第二临时存储区内的原有程序数据覆盖应用程序区,从而实现应用程序数据的恢复。然后,在流程P114中,由于下载地址是B区,因此,此时再将B区内的原有应用程序数据重新备份到第一临时存储区(Ag)(P116),由此,实现应用程序区、第一临时存储区和第二临时存储区内数据的一致。此后,再次进入PllO中的循环流程,等待新的更新指令发出。
[0114]另一种异常情况是在下载过程中出现异常(P120),例如断电情况发生,则此时DownLoadFlag由于为0,因此系统认为并未下载。此后等待新的下载指令下达。
[0115]再一种异常情况是首次执行操作时,在将原有应用程序数据备份到第二临时存储区时出现异常情况,则由于FirstAction仍然为1,因此在下一个运行流程时,可再次执行备份。
[0116]第四种异常情况时当新的应用程序运行成功后,在由第一临时存储区到第二临时存储区备份的过程中出现异常。此时,在上电复位后,由于DownLoadFlag=I,因此会再次执行覆盖和备份操作,从而保证三个存储区域(应用程序区、第一临时存储区和第二临时存储区)内存储的数据均为新的应用程序数据。类似地,在利用第一临时存储区内的新的应用数据覆盖应用程序区(步骤S400,P106)的过程中如果出现断电等异常情况。则在重新上电之后,由于DownLoadFlag=I,因此系统会再次执行覆盖操作,并当程序成功执行后,执行备份操作,并最终进入循环流程(P118 )。
[0117]另外,在设备装载新的应用程序完成并进入循环流程的运行中,可能会出现程序跑飞现象。首先,程序可能会跑飞到初始代码区,并擦除应用程序区的数据。此时,由于看门狗组件自动重启或手动重启后,会再次进入初始代码区执行,此时,由于应用程序区数据出错而不能正确运行,因此程序运行状态标签=0,因此,根据本发明的流程,将会用第二临时存储区内存储的应用程序数据覆盖应用程序区(P104,P106),从而重新使得应用程序区恢复正常。其次,当数据备份时出现程序跑飞现象,即程序指针直接跑到一个临时存储区,将该临时存储区内的数据备份到另一个临时存储区,因为两个临时存储区内的数据一致,因此再次备份并不会影响到数据的正确性。
[0118]与该应用程序更新方法相对应,本发明还提供了用于执行该方法的应用程序更新装置。如图6所示,是本发明的应用程序更新装置100的组成示意图。利用应用程序更新装置100,可将新的应用程序数据下载并覆盖应用程序区10。如上所述,当应用程序区10被覆盖后,如果新的应用程序不能正确执行,则应用程序更新装置还可将应用程序区10恢复,即利用原有的应用程序数据覆盖应用程序区10。并且,如以上对本发明的方法所描述的那样,如果在更新的过程中出现断电等异常情况,或者在应用程序运行中出现程序擦跑飞的现象,本发明的应用程序更新装置100也可在设备重新启动后,重新完成更新工作。
[0119]如图6所示,本发明的程序更新装置100包括第一临时存储区110,第二临时存储区120、覆盖执行模块130、备份执行模块140、覆盖状态判断模块150、程序状态判断模块160、更新指令发送模块170以及更新下载模块180。
[0120]如上所述,该程序更新装置100的第一临时存储区110和第二临时存储区120可以是运行设备(例如AVR系列单片机)本身的存储区域,也可以是外围的存储区域。如以上所解释,用于执行覆盖操作(利用数据覆盖应用程序区)的覆盖执行模块130和用于执行备份操作(将应用程序区内的数据复制到一个或多个临时存储区,或者将一个临时存储区内的数据复制到另一个临时存储区)的备份执行模块140实质上均执行复制功能。它们和覆盖状态判断模块150、程序状态判断模块160、更新指令发送模块170和更新下载模块180均可位于一个独立于运行设备之外的操作系统中,例如以个人计算机为中心的控制平台等。
[0121]以下,对各模块进行更具体的说明。
[0122]覆盖状态判断模块150用于判断第一临时存储区110内是否存在尚未覆盖该应用程序区的新的应用程序数据。如果不存在尚未覆盖该应用程序区10的新的应用程序数据,则通过备份执行模块140,将应用程序区10内原有应用程序数据备份至第二临时存储区120 ;如果存在尚未覆盖应用程序区10的新的应用程序数据,则通过覆盖执行模块130,利用第一临时存储区110内的新的应用程序数据覆盖该应用程序区,并通过备份执行模块140,将新的应用程序数据备份至第二临时存储区120。
[0123]更新指令发送模块170用于向在运行中的应用程序区的循环流程发出更新指令。该模块170发出的更新指令为一个中断指令,当循环流程接收到后,开始执行更新操作。
[0124]更新下载模块180用于在应用程序区10接收到更新指令发送模块170发出的更新指令后,将新的应用程序数据下载到该第一临时存储区110。
[0125]程序状态判断模块160用于判断通过覆盖执行模块130将新的应用程序数据覆盖应用程序区10后,应用程序区10是否正确运行。如果应用程序区10运行正确,则通过备份执行模块140,将第一临时存储区110内的新的应用程序数据备份至该第二临时存储区120 ;如果应用程序区10运行错误,则通过覆盖执行模块130,利用第二临时存储区120内的原有应用程序数据覆盖应用程序区10,并通过备份执行模块140,将原有应用程序数据备份至第一临时存储区110。如上所述,程序状态判断模块160通过判断应用程序区内初始化运行时的各初始化功能是否顺利执行,来判断应用程序区10是否能够正确运行。初始化功能是否顺利执行,可通过多种形式传输到程序状态判断模块160,例如应用程序区10内应用程序在运行时,如能够顺利执行初始化功能,则程序指针在运行到特定地址时,向程序判断模块160发出信号,则程序状态判断模块160则可判断为成功执行。
[0126]利用本发明的应用程序更新装置,可成功实现对应用程序的更新。再次参照图2,在步骤SlOO中,覆盖状态判断模块150判断第一临时存储区110内是否存在尚未覆盖该应用程序区10的新的应用程序数据:如果不存在尚未覆盖该应用程序区10的新的应用程序数据,则利用备份执行模块140,将应用程序区10内原有应用程序数据备份至第二临时存储区120,并进入步骤S200 ;如果存在该尚未覆盖该应用程序区10的新的应用程序,则利用第一临时存储区HO内的该新的应用程序数据覆盖该应用程序区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的详细描述。
[0127]优选地,参照以上对本发明方法描述中的实施方式,并结合图6、7,本发明的应用程序更新装置还包括一个更新状态标签设置模块190,该更新状态标签设置模块包括经初始设定的更新状态标签192。更新状态标签192可包括多个标记位,用于对各状态进行标记,以利于本发明的实现。在一个优选的实施方式中,更新状态标签192包括一个程序下载状态标记位。覆盖状态判断模块190可通过该程序下载状态标记位,判断该第一临时存储区110内是否存在尚未覆盖该应用程序区10的该新的应用程序数据。当利用更新下载模块180将新的应用程序数据下载到第一临时存储区110后,更新状态标签设置模块190该程序下载状态标记位进行更改;当利用备份执行模块140该将该第一临时存储区110内的新的应用程序数据备份至该第二临时存储区120之后,更新状态标签设置模块190又可对该程序下载状态标记位进行复位。在上述对本发明方法描述的示例中,更新状态标签设置模块170将所述程序下载状态标记位初始设置为0,并且当程序下载状态标记位为O时,覆盖状态判断模块150判断第一临时存储区110内不存在尚未覆盖应用程序区10的新的应用程序数据,否则,判断为存在该尚未覆盖应用程序区10的新的应用程序数据;当更新下载模块180将新的应用程序数据下载到第一临时存储区110后,更新状态标签设置模块190将程序下载状态标记位更改为I ;当备份执行模块140将第一临时存储区120内的新的应用程序数据备份至第二临时存储区120之后,状态标签设置模块190将所述程序下载状态标记位复位为O。
[0128]如上所述,该更新状态标签还优选地包括一个程序运行状态标记位,并且,当利用覆盖执行模块150将该新的应用程序数据覆盖应用程序区10后,更新状态标签设置模块190对该程序运行状态标记位进行更改;当程序状态判断模块160判断应用程序区运行正确之后,更新状态标签设置模块190对该程序运行状态标记位进行复位。在上述示例中,更新状态标签设置模块190将程序运行状态标记位初始设置为I,而覆盖执行模块190将新的应用程序数据覆盖应用程序区10后,更新状态标签设置模块190将程序运行状态标记位更改为O ;然后,当程序状态判断模块160判断该应用程序区10运行正确之后,更新状态标签设置模块190将程序运行状态标记位复位为I。
[0129]容易理解,更新状态标签中的各标记位可以分别初始化或更改为不同于以上量的任何数值,只要能达到区分不同状态的目的即可。
[0130]综上所述,本发明的应用程序更新方法和装置,在实现应用程序更新时,能够针对各种异常情况进行处理。具体地,在应用程序数据损坏时,利用本发明的应用程序更新方法和装置,能够重新加载应用程序数据,使之恢复正常运行;当新的应用程序不能正常运行时,可以恢复至原有的应用程序;本发明的应用程序更新方法和装置还能够针对下载过程中出现的下载物理链路断开或掉电等意外情况,进行更新流程的恢复处理,从而避免了对应用程序数据造成损坏;并且,由于使用高可靠性的方法传输和下载文件数据,保证了数据快速准确到达设备。
【权利要求】
1.一种应用程序更新方法,用于对处理系统内的应用程序进行更新,该应用程序位于该处理系统的应用程序区,其特征在于,该应用程序更新方法包括以下步骤: 步骤S100,判断第一临时存储区内是否存在尚未覆盖该应用程序区的新的应用程序数据: 如果不存在该尚未覆盖该应用程序区的新的应用程序数据,则将应用程序区内原有应用程序数据备份至该第二临时存储区,并进入步骤S200 ; 如果存在该尚未覆盖该应用程序区的新的应用程序,则利用该第一临时存储区内的该新的应用程序数据覆盖该应用程序区,将该新的应用程序数据备份至该第二临时存储区,并进入该应用程序区内的循环流程; 步骤S200,向在运行中的应用程序区的循环流程发出更新指令; 步骤S300,应用程序区接收到该更新指令后,将新的应用程序数据下载到该第一临时存储区; 步骤S400,利用第一临时存储区内的该新的应用程序数据覆盖该应用程序区; 步骤S500,判断该覆盖完成后,应用程序区是否正确运行,其中: 如果该应用程序区运行正确,则进入步骤S600 ; 如果该应用程序区运行错误,则利用该第二临时存储区内的原有应用程序数据覆盖该应用程序区,并将该原有应用程序数据备份至第一临时存储区,然后进入该应用程序区内的循环流程; 步骤S600,将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区,并进入该应用程序区内的循环流程。
2.根据权利要求1所述的应用程序更新方法,其特征在于,在步骤SlOO之前,还包括以下步骤: 步骤S000,对更新状态标签进行初始设定,该更新状态标签包括一个程序下载状态标记位; 并且: 在所述步骤Sioo中,通过程序下载状态标记位,判断该第一临时存储区内是否存在尚未覆盖该应用程序区的该新的应用程序数据; 在所述步骤S300中,所述将新的应用程序数据下载到该第一临时存储区后,还包括:更改该程序下载状态标记位; 在所述步骤S600中,该将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区之后,包括:复位该程序下载状态标记位,并进入该应用程序区内的循环流程。
3.根据权利要求2所述的应用程序更新方法,其特征在于,所述更新状态标签还包括一个程序运行状态标记位, 并且: 在所述步骤S400中,所述利用第一临时存储区内的该新的应用程序数据覆盖该应用程序区后,还包括:更改该程序运行状态标记位; 在所述步骤S500中,该判断该应用程序区运行正确之后,包括:复位该程序运行状态标记位,并进入步骤S600。
4.根据权利要求2所述的应用程序更新方法,其特征在于,所述步骤SOOO中,对所述更新状态标签进行初始设定,包括:将程序下载状态标记位设置为O ; 所述步骤SlOO中,如果程序下载状态标记位为0,则判断为不存在该尚未覆盖该应用程序区的新的应用程序,否则,判断为存在该尚未覆盖该应用程序区的新的应用程序; 所述步骤S300中,该更改该程序下载状态标记位,包括:将该程序下载状态标记位设置为1 ; 所述步骤S600中,该复位该程序下载状态标记位,包括:将该程序下载状态标记位复位为O。
5.根据权利要求3或4中任一项所述的应用程序更新方法,其特征在于, 所述步骤S000中,对所述更新状态标签进行设定,还包括:将程序运行状态标记位设置为I ; 所述步骤S400中,该更改该程序运行状态标记位,包括:将该程序运行状态标记位设置为O ;以及 所述步骤S500中,该复位该程序运行状态标记位,包括:将该程序运行状态标记位设置为1。
6.根据权利要求2、3或4中任一项所述的应用程序更新方法,其特征在于,所述更新状态标签还包括一个经步骤S000初始设置的首次执行标记位,并且, 在所述步骤SlOO中,如果不存在该尚未覆盖该应用程序区的新的应用程序,所述将应用程序区内原有应用程序数据备份至该第二临时存储区之后,更改该首次执行标记位,并进入步骤S200。
7.根据权利要求6所述的应用程序更新方法,其特征在于,所述首次执行标记位初始设置成I,并且, 所述将应用程序区内原有应用程序数据备份至该第二临时存储区之后,将该首次执行标记位更改为O。
8.一种应用程序更新装置,用于对处理系统内的应用程序进行更新,该应用程序位于该处理系统的应用程序区,其特征在于,该应用程序更新装置包括一个第一临时存储区、一个第二临时存储区、用于执行覆盖操作的覆盖执行模块以及用于执行备份操作的备份执行模块,该应用程序区可对该第一临时存储区及该第二临时存储区进行擦写,该应用程序更新装置进一步包括: 覆盖状态判断模块,用于判断第一临时存储区内是否存在尚未覆盖该应用程序区的新的应用程序数据,其中: 如果不存在该尚未覆盖该应用程序区的新的应用程序数据,则通过该备份执行模块,将应用程序区内原有应用程序数据备份至该第二临时存储区; 如果存在该尚未覆盖该应用程序区的新的应用程序数据,则通过该覆盖执行模块,利用该第一临时存储区内的该新的应用程序数据覆盖该应用程序区,并通过该备份执行模块,将该新的应用程序数据备份至该第二临时存储区; 更新指令发送模块,用于向在运行中的应用程序区的循环流程发出更新指令; 更新下载模块,用于在应用程序区接收到该更新指令发送模块发出的该更新指令后,将新的应用程序数据下载到该第一临时存储区;程序状态判断模块,用于判断通过该覆盖执行模块将新的应用程序数据覆盖该应用程序区后,应用程序区是否正确运行,其中: 如果该应用程序区运行正确,则通过备份执行模块,将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区; 如果该应用程序区运行错误,则通过该覆盖执行模块,利用该第二临时存储区内的原有应用程序数据覆盖该应用程序区,并通过该备份执行模块,将该原有应用程序数据备份至该第一临时存储区。
9.根据权利要求8所述的应用程序更新装置,其特征在于, 还包括一个更新状态标签设置模块,该更新状态标签设置模块包括经初始设定的更新状态标签,该更新状态标签包括一个程序下载状态标记位, 并且: 所述覆盖状态判断模块可通过该程序下载状态标记位,判断该第一临时存储区内是否存在尚未覆盖该应用程序区的该新的应用程序数据; 利用所述更新下载模块将新的应用程序数据下载到该第一临时存储区后,该更新状态标签设置模块对该程序下载状态标记位进行更改; 利用所述备份执行模块该将该第一临时存储区内的该新的应用程序数据备份至该第二临时存储区之后,该更新状态标签设置模块对该程序下载状态标记位进行复位。
10. 根据权利要求9所述的应用程序更新装置,其特征在于,该更新状态标签还包括一个程序运行状态标记位, 并且: 利用所述覆盖执行模块将该新的应用程序数据覆盖该应用程序区后,该更新状态标签设置模块对该程序运行状态标记位进行更改; 当程序状态判断模块判断该应用程序区运行正确之后,该更新状态标签设置模块对该程序运行状态标记位进行复位。
11.根据权利要求10所述的应用程序更新装置,其特征在于,所述更新状态标签设置模块将所述程序下载状态标记位初始设置为0, 并且: 当所述程序下载状态标记位为O时,所述覆盖状态判断模块判断所述第一临时存储区内不存在尚未覆盖所述应用程序区的所述新的应用程序数据,否则,判断为存在该尚未覆盖该应用程序区的所述新的应用程序数据; 所述更新下载模块将所述新的应用程序数据下载到所述第一临时存储区后,所述更新状态标签设置模块将所述程序下载状态标记位更改为I; 所述备份执行模块将所述第一临时存储区内的所述新的应用程序数据备份至所述第二临时存储区之后,所述状态标签设置模块将所述程序下载状态标记位复位为O。
12.根据权利要求10或11所述的应用程序更新装置,其特征在于,所述更新状态标签设置模块将所述程序运行状态标记位初始设置为1,并且: 所述覆盖执行模块将所述新的应用程序数据覆盖所述应用程序区后,所述更新状态标签设置模块将所述程序运行状态标记位更改为O ; 当所述程序状态判断模块判断该应用程序区运行正确之后,所述更新状态标签设置模块将所述程序运行状态标记位复位为I。
13.根据权利要求9、10或11中任一项所述的应用程序更新装置,其特征在于,所述更新状态标签还包括一个经所述更新状态标签设置模块初始设置的首次执行标记位,并且, 通过所述备份执行模块将所述应用程序区内原有应用程序数据备份至所述第二临时存储区之后,更改该首次执行标记位。
14.根据权利要求13所述的应用程序更新装置,其特征在于,所述更新状态标签设置模块将所述首次执行标记位初始设置成1,并且, 所述备份执行模块将应用程序区内原有应用程序数据备份至所述第二临时存储区之后,所述更新状态标签设置模块将该首次执行标记位更改为O。
15.根据权利要求8所述的应用程序更新装置,其特征在于,所述处理系统为AVR系列单片机。·
【文档编号】G06F9/445GK103577214SQ201210283100
【公开日】2014年2月12日 申请日期:2012年8月9日 优先权日:2012年8月9日
【发明者】林涛, 张文颢, 韩伯臣, 郭振杰 申请人:罗森伯格(上海)通信技术有限公司