CN105589765A - 一种实现程序备份的方法 - Google Patents
一种实现程序备份的方法 Download PDFInfo
- Publication number
- CN105589765A CN105589765A CN201510955701.5A CN201510955701A CN105589765A CN 105589765 A CN105589765 A CN 105589765A CN 201510955701 A CN201510955701 A CN 201510955701A CN 105589765 A CN105589765 A CN 105589765A
- Authority
- CN
- China
- Prior art keywords
- program
- backup
- subregion
- flash
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Retry When Errors Occur (AREA)
Abstract
本发明涉及嵌入式软件领域,其公开了一种实现程序备份的方法解决传统技术中无法在单片机片内FLASH实现程序备份,采用双FLASH进行程序备份成本高的问题。该方法包括:a.在单片机片内FLASH的主、备分区中存入两份执行逻辑相同的可执行程序;b.在程序启动的时候判断当前执行的是主分区中的程序,还是执行的备份分区中的程序,并检测程序代码是否发生故障;c.若检测到执行的为主分区中的程序且程序代码发生故障时,切换至备份分区运行程序。本发明适用于单片机程序备份。
Description
技术领域
本发明涉及嵌入式软件领域,尤其涉及一种利用单片机片内FLASH实现程序备份的方法。
背景技术
嵌入式设备中往往使用FLASH存储设备来存储程序,一旦当FLASH存储的程序被破坏,嵌入式设备将无法正常运行。为了提高嵌入式设备的可靠性,绝大多数厂商都把存储在FLASH中的程序进行了备份,当其中一份程序被破坏时、可以使用备份程序继续运行,提高设备的可靠性。
在传统技术中,申请号为201310034458.4,名称为《基于单个flash存储芯片的双启动方法》的专利提供了一种利用主备BOOT提高设备可靠性的方法,在FLASH存储芯片的不同位置上分别存储主用BOOT和备用BOOT,CPU的地址线通过CPLD逻辑模块与FLASH存储芯片的地址线连接;CPLD逻辑模块上设有启动成功标志寄存器,所述启动成功标志寄存器根据主用BOOT或备用BOOT启动是否成功进行相应的职位;CPLD逻辑模块根据所述启动成功标志寄存器的状态进行主用BOOT和备用BOOT轮转,如果需要从主用BOOT启动,则将CPU地址信息透传给FLASH存储芯片,并从主用BOOT引导系统启动;如果需要从备用BOOT启动,则根据备用BOOT程序在FLASH存储器中的位置锁住响应的地址线,并从备用BOOT引导启动。
上述专利通过CPLD来屏蔽主备程序存储在不同位置带来的对启动程序的影响。启动程序就好像两次在同一个位置去加载启动程序。但是对于单片机来说、往往CPU自带片内FLASH,并且为了节约成本,也不会为单片机外挂FLASH芯片。
申请号为201210225631.4,名称为《一种实现自动双FLASH启动CPU系统的方法》的专利提供了一种实现自动双FLASH启动CPU系统的方法,采用两片FLASH启动CPU,当其中主FLASH启动失败后,CPLD将备份FLASH选中并输出复位信号到CPU,让CPU启动。该专利使用两片FLASH、成本较高。
发明内容
本发明所要解决的技术问题是:提出一种实现程序备份的方法,解决传统技术中无法在单片机片内FLASH实现程序备份,采用双FLASH进行程序备份成本高的问题。
本发明解决上述技术问题所采用的方案是,一种实现程序备份的方法,包括:
a.在单片机片内FLASH的主、备分区中存入两份执行逻辑相同的可执行程序;
b.在程序启动的时候判断当前执行的是主分区中的程序,还是执行的备份分区中的程序,并检测程序代码是否发生故障;
c.若检测到执行的为主分区中的程序且程序代码发生故障时,切换至备份分区运行程序。
进一步的,步骤a中,所述在单片机片内FLASH的主、备分区中存入两份相同的可执行程序的方法是:
使用两个链接脚本将嵌入式源代码编译成两个执行逻辑相同但代码段的起始地址不同的可执行程序,然后将两个可执行程序分别放于片内FLASH的主备分区中,所述代码段的起始地址分别为片内FLASH主备分区的起始地址。
进一步的,步骤a中还包括:将需要对FLASH进行擦除、写入、读取操作的函数链接到RAM地址空间。
进一步的,步骤b中,在程序启动的时候通过异常向量表中的值判断当前执行的是主分区中的程序,还是执行的备份分区中的程序。
上述具体判断方法为:如果异常向量表中的值小于0x10000,则判定当前执行的是主分区中的程序;如果异常向量表中的值大于0x10000,则判定当前执行的是备份分区中的程序。
进一步的,步骤b中,通过CRC校验来检测程序代码是否发生故障。
进一步的,步骤b中,若检测到程序代码未发生故障,则继续执行该分区内的程序代码。
进一步的,步骤c中若检测到执行的为主分区中的程序且程序代码发生故障时,通过修改异常向量表后并重启单片机切换至备份分区运行程序。
具体的,所述修改异常向量表的方法为:
将异常向量表中的地址修改为当前地址加上备份分区的起始地址。
进一步的,步骤c中还包括:
若检测到执行的为备份分区中的程序且程序代码发生故障时,则告警程序遭到破坏,并挂起单片机。
本发明的有益效果是:可以实现单片机片内FLASH主备程序切换:在片内FLASH的主分区程序出现故障时,自动检测并切换至备份分区执行,可以延长单片机使用寿命;由于只需要一个FLASH即可实现主备程序切换,也节约了硬件成本。
附图说明
图1为本发明实现程序备份方法流程图;
图2为程序链接后在FLASH中存储结构图。
具体实施方式
本发明旨在提出一种利用单片机片内FLASH实现程序备份的方法,解决传统技术中无法在单片机片内FLASH实现程序备份,采用双FLASH进行程序备份成本高的问题。
如图1所示,本发明中的利用单片机片内FLASH实现程序备份的方法,包括以下实现步骤:
a.在单片机片内FLASH的主、备分区中存入两份执行逻辑相同的可执行程序;
b.在程序启动的时候判断当前执行的是主分区中的程序,还是执行的备份分区中的程序,并检测程序代码是否发生故障;
c.若检测到执行的为主分区中的程序且程序代码发生故障时,切换至备份分区运行程序。
在具体实现上,步骤a中,所述在单片机片内FLASH的主、备分区中存入两份执行逻辑相同的可执行程序的方法是:
使用两个链接脚本将嵌入式源代码编译成两个执行逻辑相同但代码段的起始地址不同的可执行程序,然后将两个可执行程序分别放于片内FLASH的主备分区中,所述代码段的起始地址分别为片内FLASH主备分区的起始地址。
此外,将需要对FLASH进行擦除、写入、读取操作的函数链接到RAM地址空间,以防止对FLASH进行擦除操作时,擦除掉正在执行擦除操作的代码,导致系统异常;程序链接后在FLASH中存储结构如图2所示,在程序运行时,这部分代码会拷贝到RAM中。
步骤b中,在程序启动的时候通过异常向量表中的值判断当前执行的是主分区中的程序,还是执行的备份分区中的程序:
具体为:如果异常向量表中的值小于0x10000,则判定当前执行的是主分区中的程序;如果异常向量表中的值大于0x10000,则判定当前执行的是备份分区中的程序。
此外,步骤b中是通过CRC校验来检测程序代码是否发生故障。
步骤c中若检测到执行的为主分区中的程序且程序代码发生故障时,通过修改FLASH起始地址处的异常向量表后并重启单片机切换至备份分区运行程序。修改异常向量表的方法为:将异常向量表中的地址修改为当前地址加上备份分区的起始地址。
如果主分区中的程序代码未遭到破坏,则继续执行主分区中的程序代码。若检测到执行的为备份分区中的程序且程序代码发生故障时,则告警程序遭到破坏,并挂起单片机。
如果检测到当前执行的是备份分区中的程序代码,而程序代码未发生破坏,则继续执行备份分区中的程序代码。
通过上述手段,在片内FLASH的主分区程序出现故障时,自动检测并切换至备份分区执行,可以延长单片机使用寿命。
Claims (10)
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中还包括:
若检测到执行的为备份分区中的程序且程序代码发生故障时,则告警程序遭到破坏,并挂起单片机。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510955701.5A CN105589765A (zh) | 2015-12-17 | 2015-12-17 | 一种实现程序备份的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510955701.5A CN105589765A (zh) | 2015-12-17 | 2015-12-17 | 一种实现程序备份的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105589765A true CN105589765A (zh) | 2016-05-18 |
Family
ID=55929364
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510955701.5A Pending CN105589765A (zh) | 2015-12-17 | 2015-12-17 | 一种实现程序备份的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105589765A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106304071A (zh) * | 2016-08-15 | 2017-01-04 | 迈普通信技术股份有限公司 | 一种网络接入认证方法、接入认证设备及认证服务器 |
CN106776122A (zh) * | 2016-11-23 | 2017-05-31 | 武汉光迅科技股份有限公司 | 一种基于Flash启动过程中主备保护的方法 |
CN106873990A (zh) * | 2017-01-23 | 2017-06-20 | 北京空间飞行器总体设计部 | 嵌入式系统ram损坏模式下的多分区引导方法 |
CN108153616A (zh) * | 2016-12-06 | 2018-06-12 | 北京京存技术有限公司 | 一种存储芯片启动程序检测方法和装置 |
CN109086164A (zh) * | 2018-06-29 | 2018-12-25 | 努比亚技术有限公司 | 一种应用崩溃处理方法、终端及计算机可读存储介质 |
CN110275726A (zh) * | 2019-06-27 | 2019-09-24 | 四川宜途汽车电子科技有限公司 | 一种车载电控单元控制程序备份升级方法 |
CN111506449A (zh) * | 2019-01-31 | 2020-08-07 | 青岛海尔空调电子有限公司 | 一种空调参数存储方法及装置和存储介质 |
CN112948183A (zh) * | 2021-03-30 | 2021-06-11 | 西安微电子技术研究所 | 一种软硬件结合的嵌入式设备及方法 |
CN113886145A (zh) * | 2021-10-26 | 2022-01-04 | 江苏集萃智能光电系统研究所有限公司 | 基于片内flash且无需重新烧写的程序自备份方法 |
CN114911648A (zh) * | 2022-07-14 | 2022-08-16 | 北京智芯微电子科技有限公司 | Xip flash程序驱动方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101169728A (zh) * | 2007-11-22 | 2008-04-30 | 中兴通讯股份有限公司 | 双引导启动装置及方法 |
CN101276297A (zh) * | 2008-05-14 | 2008-10-01 | 北京星网锐捷网络技术有限公司 | 一种处理器系统、设备及故障处理方法 |
CN101477484A (zh) * | 2009-01-20 | 2009-07-08 | 杭州华三通信技术有限公司 | 一种恢复被破坏主引导程序的方法及设备 |
WO2012149716A1 (zh) * | 2011-08-30 | 2012-11-08 | 华为技术有限公司 | 一种bootrom备份方法和装置 |
CN104461657A (zh) * | 2014-12-29 | 2015-03-25 | 迈普通信技术股份有限公司 | 一种主备嵌入式引导程序的启动方法及装置 |
-
2015
- 2015-12-17 CN CN201510955701.5A patent/CN105589765A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101169728A (zh) * | 2007-11-22 | 2008-04-30 | 中兴通讯股份有限公司 | 双引导启动装置及方法 |
CN101276297A (zh) * | 2008-05-14 | 2008-10-01 | 北京星网锐捷网络技术有限公司 | 一种处理器系统、设备及故障处理方法 |
CN101477484A (zh) * | 2009-01-20 | 2009-07-08 | 杭州华三通信技术有限公司 | 一种恢复被破坏主引导程序的方法及设备 |
WO2012149716A1 (zh) * | 2011-08-30 | 2012-11-08 | 华为技术有限公司 | 一种bootrom备份方法和装置 |
CN104461657A (zh) * | 2014-12-29 | 2015-03-25 | 迈普通信技术股份有限公司 | 一种主备嵌入式引导程序的启动方法及装置 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106304071A (zh) * | 2016-08-15 | 2017-01-04 | 迈普通信技术股份有限公司 | 一种网络接入认证方法、接入认证设备及认证服务器 |
CN106776122A (zh) * | 2016-11-23 | 2017-05-31 | 武汉光迅科技股份有限公司 | 一种基于Flash启动过程中主备保护的方法 |
CN108153616A (zh) * | 2016-12-06 | 2018-06-12 | 北京京存技术有限公司 | 一种存储芯片启动程序检测方法和装置 |
CN106873990B (zh) * | 2017-01-23 | 2020-07-10 | 北京空间飞行器总体设计部 | 嵌入式系统ram损坏模式下的多分区引导方法 |
CN106873990A (zh) * | 2017-01-23 | 2017-06-20 | 北京空间飞行器总体设计部 | 嵌入式系统ram损坏模式下的多分区引导方法 |
CN109086164A (zh) * | 2018-06-29 | 2018-12-25 | 努比亚技术有限公司 | 一种应用崩溃处理方法、终端及计算机可读存储介质 |
CN111506449A (zh) * | 2019-01-31 | 2020-08-07 | 青岛海尔空调电子有限公司 | 一种空调参数存储方法及装置和存储介质 |
CN111506449B (zh) * | 2019-01-31 | 2024-02-20 | 青岛海尔空调电子有限公司 | 一种空调参数存储方法及装置和存储介质 |
CN110275726A (zh) * | 2019-06-27 | 2019-09-24 | 四川宜途汽车电子科技有限公司 | 一种车载电控单元控制程序备份升级方法 |
CN112948183A (zh) * | 2021-03-30 | 2021-06-11 | 西安微电子技术研究所 | 一种软硬件结合的嵌入式设备及方法 |
CN112948183B (zh) * | 2021-03-30 | 2023-05-12 | 西安微电子技术研究所 | 一种软硬件结合的嵌入式设备及方法 |
CN113886145A (zh) * | 2021-10-26 | 2022-01-04 | 江苏集萃智能光电系统研究所有限公司 | 基于片内flash且无需重新烧写的程序自备份方法 |
CN114911648A (zh) * | 2022-07-14 | 2022-08-16 | 北京智芯微电子科技有限公司 | Xip flash程序驱动方法及系统 |
CN114911648B (zh) * | 2022-07-14 | 2022-10-04 | 北京智芯微电子科技有限公司 | Xip flash程序驱动方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105589765A (zh) | 一种实现程序备份的方法 | |
CN102135927B (zh) | 一种基于nand flash的系统引导方法和装置 | |
CN102270162B (zh) | 一种应用于sparcv8结构计算机的容错引导方法 | |
US9471435B2 (en) | Information processing device, information processing method, and computer program | |
US9891917B2 (en) | System and method to increase lockstep core availability | |
US20130124917A1 (en) | Recovering from stack corruption faults in embedded software systems | |
US8997059B2 (en) | Reverse debugging | |
US20120110378A1 (en) | Firmware recovery system and method of baseboard management controller of computing device | |
US20100017660A1 (en) | System and method for protecting memory stacks using a debug unit | |
US9524212B2 (en) | Method, device and operating system for processing and using burn data of NAND flash | |
CN102298545A (zh) | 一种系统启动引导处理方法及装置 | |
US10503932B2 (en) | Secure mode state data access tracking | |
CN101156137A (zh) | 选择子例程返回机制 | |
CN105653405A (zh) | 一种通用引导程序的故障处理方法及系统 | |
CN101233495A (zh) | 用于在具有快闪程序存储器的微控制器中提供程序断点的机制 | |
CN108304140B (zh) | 闪存数据管理方法、装置及微控制器 | |
CN101174221A (zh) | 以闪速存储器存储开机码的电子系统及开机方法 | |
CN110865906B (zh) | 一种电机初始位置角度存储方法、装置、车辆及存储介质 | |
CN111124760B (zh) | 一种基于uboot的嵌入式设备启动方法及装置 | |
CN113094107A (zh) | 数据保护方法、装置、设备及计算机存储介质 | |
CN116795408A (zh) | Ecu的软件升级方法、系统及车辆 | |
CN109086162B (zh) | 一种内存诊断方法和装置 | |
US20090204844A1 (en) | Error-tolerant processor system | |
CN104978208A (zh) | 一种热重启方法及其装置 | |
CN112988182A (zh) | Linux内核热补丁实现方法、电子设备及计算机可读介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160518 |