一种实现程序备份的方法
【技术领域】
[0001]本发明涉及嵌入式软件领域,尤其涉及一种利用单片机片内FLASH实现程序备份的方法。
【背景技术】
[0002]嵌入式设备中往往使用FLASH存储设备来存储程序,一旦当FLASH存储的程序被破坏,嵌入式设备将无法正常运行。为了提高嵌入式设备的可靠性,绝大多数厂商都把存储在FLASH中的程序进行了备份,当其中一份程序被破坏时、可以使用备份程序继续运行,提高设备的可靠性。
[0003]在传统技术中,申请号为201310034458.4,名称为《基于单个flash存储芯片的双启动方法》的专利提供了一种利用主备BOOT提高设备可靠性的方法,在FLASH存储芯片的不同位置上分别存储主用BOOT和备用B00T,CPU的地址线通过CPLD逻辑模块与FLASH存储芯片的地址线连接;CPLD逻辑模块上设有启动成功标志寄存器,所述启动成功标志寄存器根据主用BOOT或备用BOOT启动是否成功进行相应的职位;CPLD逻辑模块根据所述启动成功标志寄存器的状态进行主用BOOT和备用BOOT轮转,如果需要从主用BOOT启动,则将CPU地址信息透传给FLASH存储芯片,并从主用BOOT引导系统启动;如果需要从备用BOOT启动,则根据备用BOOT程序在FLASH存储器中的位置锁住响应的地址线,并从备用BOOT引导启动。
[0004]上述专利通过CPLD来屏蔽主备程序存储在不同位置带来的对启动程序的影响。启动程序就好像两次在同一个位置去加载启动程序。但是对于单片机来说、往往CPU自带片内FLASH,并且为了节约成本,也不会为单片机外挂FLASH芯片。
[0005]申请号为201210225631.4,名称为《一种实现自动双FLASH启动CPU系统的方法》的专利提供了一种实现自动双FLASH启动CPU系统的方法,采用两片FLASH启动CPU,当其中主FLASH启动失败后,CPLD将备份FLASH选中并输出复位信号到CPU,让CPU启动。该专利使用两片FLASH、成本较高。
【发明内容】
[0006]本发明所要解决的技术问题是:提出一种实现程序备份的方法,解决传统技术中无法在单片机片内FLASH实现程序备份,采用双FLASH进行程序备份成本高的问题。
[0007]本发明解决上述技术问题所采用的方案是,一种实现程序备份的方法,包括:
[0008]a.在单片机片内FLASH的主、备分区中存入两份执行逻辑相同的可执行程序;
[0009]b.在程序启动的时候判断当前执行的是主分区中的程序,还是执行的备份分区中的程序,并检测程序代码是否发生故障;
[0010]c.若检测到执行的为主分区中的程序且程序代码发生故障时,切换至备份分区运行程序。
[0011]进一步的,步骤a中,所述在单片机片内FLASH的主、备分区中存入两份相同的可执行程序的方法是:
[0012]使用两个链接脚本将嵌入式源代码编译成两个执行逻辑相同但代码段的起始地址不同的可执行程序,然后将两个可执行程序分别放于片内FLASH的主备分区中,所述代码段的起始地址分别为片内FLASH主备分区的起始地址。
[0013]进一步的,步骤a中还包括:将需要对FLASH进行擦除、写入、读取操作的函数链接到RAM地址空间。
[0014]进一步的,步骤b中,在程序启动的时候通过异常向量表中的值判断当前执行的是主分区中的程序,还是执行的备份分区中的程序。
[0015]上述具体判断方法为:如果异常向量表中的值小于0x10000,则判定当前执行的是主分区中的程序;如果异常向量表中的值大于0x10000,则判定当前执行的是备份分区中的程序。
[0016]进一步的,步骤b中,通过CRC校验来检测程序代码是否发生故障。
[0017]进一步的,步骤b中,若检测到程序代码未发生故障,则继续执行该分区内的程序代码。
[0018]进一步的,步骤c中若检测到执行的为主分区中的程序且程序代码发生故障时,通过修改异常向量表后并重启单片机切换至备份分区运行程序。
[0019]具体的,所述修改异常向量表的方法为:
[0020]将异常向量表中的地址修改为当前地址加上备份分区的起始地址。
[0021]进一步的,步骤c中还包括:
[0022]若检测到执行的为备份分区中的程序且程序代码发生故障时,则告警程序遭到破坏,并挂起单片机。
[0023]本发明的有益效果是:可以实现单片机片内FLASH主备程序切换:在片内FLASH的主分区程序出现故障时,自动检测并切换至备份分区执行,可以延长单片机使用寿命;由于只需要一个FLASH即可实现主备程序切换,也节约了硬件成本。
【附图说明】
[0024]图1为本发明实现程序备份方法流程图;
[0025]图2为程序链接后在FLASH中存储结构图。
【具体实施方式】
[0026]本发明旨在提出一种利用单片机片内FLASH实现程序备份的方法,解决传统技术中无法在单片机片内FLASH实现程序备份,采用双FLASH进行程序备份成本高的问题。
[0027]如图1所示,本发明中的利用单片机片内FLASH实现程序备份的方法,包括以下实现步骤:
[0028]a.在单片机片内FLASH的主、备分区中存入两份执行逻辑相同的可执行程序;
[0029]b.在程序启动的时候判断当前执行的是主分区中的程序,还是执行的备份分区中的程序,并检测程序代码是否发生故障;
[0030]c.若检测到执行的为主分区中的程序且程序代码发生故障时,切换至备份分区运行程序。
[0031]在具体实现上,步骤a中,所述在单片机片内FLASH的主、备分区中存入两份执行逻辑相同的可执行程序的方法是:
[0032]使用两个链接脚本将嵌入式源代码编译成两个执行逻辑相同但代码段的起始地址不同的可执行程序,然后将两个可执行程序分别放于片内FLASH的主备分区中,所述代码段的起始地址分别为片内FLASH主备分区的起始地址。
[0033]此外,将需要对FLASH进行擦除、写入、读取操作的函数链接到RAM地址空间,以防止对FLASH进行擦除操作时,擦除掉正在执行擦除操作的代码,导致系统异常;程序链接后在FLASH中存储结构如图2所示,在程序运行时,这部分代码会拷贝到RAM中。
[0034]步骤b中,在程序启动的时候通过异常向量表中的值判断当前执行的是主分区中的程序,还是执行的备份分区中的程序:
[0035]具体为:如果异常向量表中的值小于0x10000,则判定当前执行的是主分区中的程序;如果异常向量表中的值大于0x10000,则判定当前执行的是备份分区中的程序。
[0036]此外,步骤b中是通过CRC校验来检测程序代码是否发生故障。
[0037]步骤c中若检测到执行的为主分区中的程序且程序代码发生故障时,通过修改FLASH起始地址处的异常向量表后并重启单片机切换至备份分区运行程序。修改异常向量表的方法为:将异常向量表中的地址修改为当前地址加上备份分区的起始地址。
[0038]如果主分区中的程序代码未遭到破坏,则继续执行主分区中的程序代码。若检测到执行的为备份分区中的程序且程序代码发生故障时,则告警程序遭到破坏,并挂起单片机。
[0039]如果检测到当前执行的是备份分区中的程序代码,而程序代码未发生破坏,则继续执行备份分区中的程序代码。
[0040]通过上述手段,在片内FLASH的主分区程序出现故障时,自动检测并切换至备份分区执行,可以延长单片机使用寿命。
【主权项】
1.一种实现程序备份的方法,其特征在于,包括: a.在单片机片内FLASH的主、备分区中存入两份执行逻辑相同的可执行程序; b.在程序启动的时候判断当前执行的是主分区中的程序,还是执行的备份分区中的程序,并检测程序代码是否发生故障; c.若检测到执行的为主分区中的程序且程序代码发生故障时,切换至备份分区运行程序。2.如权利要求1所述的方法,其特征在于,步骤a中,所述在单片机片内FLASH的主、备分区中存入两份执行逻辑相同的可执行程序的方法是: 使用两个链接脚本将嵌入式源代码编译成两个执行逻辑相同但代码段的起始地址不同的可执行程序,然后将两个可执行程序分别放于片内FLASH的主备分区中,所述代码段的起始地址分别为片内FLASH主备分区的起始地址。3.如权利要求1所述的方法,其特征在于,步骤a中还包括:将需要对FLASH进行擦除、写入、读取操作的函数链接到RAM地址空间。4.如权利要求1所述的方法,其特征在于,步骤b中,在程序启动的时候通过异常向量表中的值判断当前执行的是主分区中的程序,还是执行的备份分区中的程序。5.如权利要求4所述的方法,其特征在于,如果异常向量表中的值小于0x10000,则判定当前执行的是主分区中的程序;如果异常向量表中的值大于0x10000,则判定当前执行的是备份分区中的程序。6.如权利要求1所述的方法,其特征在于,步骤b中,通过CRC校验来检测程序代码是否发生故障。7.如权利要求1所述的方法,其特征在于,步骤b中,若检测到程序代码未发生故障,则继续执行该分区内的程序代码。8.如权利要求1所述的方法,其特征在于,步骤c中若检测到执行的为主分区中的程序且程序代码发生故障时,通过修改异常向量表后并重启单片机切换至备份分区运行程序。9.如权利要求8所述的方法,其特征在于,所述修改异常向量表的方法为: 将异常向量表中的地址修改为当前地址加上备份分区的起始地址。10.如权利要求1-9任意一项所述的方法,其特征在于,步骤c中还包括: 若检测到执行的为备份分区中的程序且程序代码发生故障时,则告警程序遭到破坏,并挂起单片机。
【专利摘要】本发明涉及嵌入式软件领域,其公开了一种实现程序备份的方法解决传统技术中无法在单片机片内FLASH实现程序备份,采用双FLASH进行程序备份成本高的问题。该方法包括:a.在单片机片内FLASH的主、备分区中存入两份执行逻辑相同的可执行程序;b.在程序启动的时候判断当前执行的是主分区中的程序,还是执行的备份分区中的程序,并检测程序代码是否发生故障;c.若检测到执行的为主分区中的程序且程序代码发生故障时,切换至备份分区运行程序。本发明适用于单片机程序备份。
【IPC分类】G06F11/14
【公开号】CN105589765
【申请号】CN201510955701
【发明人】湛松涛, 郭峰, 张晓东
【申请人】迈普通信技术股份有限公司
【公开日】2016年5月18日
【申请日】2015年12月17日