CN105279043A - 一种对单片机软件错误进行恢复的方法及系统 - Google Patents

一种对单片机软件错误进行恢复的方法及系统 Download PDF

Info

Publication number
CN105279043A
CN105279043A CN201410357317.0A CN201410357317A CN105279043A CN 105279043 A CN105279043 A CN 105279043A CN 201410357317 A CN201410357317 A CN 201410357317A CN 105279043 A CN105279043 A CN 105279043A
Authority
CN
China
Prior art keywords
backup
software
function
scm
verification
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.)
Granted
Application number
CN201410357317.0A
Other languages
English (en)
Other versions
CN105279043B (zh
Inventor
葛宁
殷柳国
张�浩
陆建华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tsinghua University
Original Assignee
Tsinghua University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tsinghua University filed Critical Tsinghua University
Priority to CN201410357317.0A priority Critical patent/CN105279043B/zh
Publication of CN105279043A publication Critical patent/CN105279043A/zh
Application granted granted Critical
Publication of CN105279043B publication Critical patent/CN105279043B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本发明涉及单片机技术领域,公开了一种对单片机软件错误进行恢复的方法及系统,该方法具体包括:将单片机软件中的主程序进行备份,得到主程序的多个软件备份,并对所述多个软件备份进行排序;将所述多个软件备份保存在单片机程序存储空间;当所述单片机软件发生错误时,对所述单片机软件的多个软件备份进行校验并获取校验结果;根据所述校验结果,将通过校验的软件备份的备份序号保存在内存空间中;根据备份序号引导单片机软件跳转到某一个通过校验的软件备份,实现单片机软件错误的恢复。本发明通过在单片机程序区设置多重软件备份,并在软件错误发生时,在多个软件备份中进行选择性引导,提高单片软件错误恢复能力。

Description

一种对单片机软件错误进行恢复的方法及系统
技术领域
本发明涉及单片机技术领域,特别涉及一种对单片机软件错误进行恢复的方法及系统。
背景技术
在环境恶劣的单片机应用场景中,单片机程序区存储的软件常常会由于外部恶劣环境的影响(例如高温,辐照),产生不可恢复性错误,此种软件错误不能通过单片机的重新上电进行恢复。无论单片机软件是存储在EPROM存储器、EEPROM存储器,还是FLASH存储器中,均有可能在某个或某些程序的比特位上产生不可恢复性错误,导致整个软件发生永久性功能异常或失效。
为了应对单片机软件中的不可恢复性错误,目前已有的解决方法是将单片机软件在存储器级进行三模冗余备份,即将软件存储在三个独立的存储器中,通过多数判决来纠正错误。图1为现有技术中的三模冗余电路,该电路描述了三模冗余技术进行软件备份的方法,单片机软件存储在三个独立的外部程序存储器中,外部程序存储器共用一套地址总线。三模冗余技术对三个程序存储器读出的机器码进行多数判决,将多数判决的结果作为正确的机器码送入单片机内部执行。图2为现有三模冗余电路中的多数判决器的电路组成图。在三个程序存储器中,只有当两个或两个以上程序存储器在同一地址发生错误时,多数判决才会得到判决错误的结果。因此,三模冗余后的程序存储器出错的概率要远远小于单个程序存储器出错的概率。
三模冗余的软件备份方法虽然可以极大提高程序存储器抵抗不可恢复性错误的能力,但该方法需要在单片机外部增加额外的程序存储器和多数判决器,导致电路系统复杂,占用电路板面积大,使得系统成本增加。此外,外部程序存储器需要占用单片机的IO口,导致单片机的IO扩展性能受限。
发明内容
为了在无需对单片机硬件做任何改动的情况下,降低单片机功能异常或失效的概率,提高单片机软件的错误恢复能力,本发明提供了一种对单片机软件错误进行恢复的方法,该方法包括以下步骤:
将单片机软件中的主程序进行备份,得到主程序的多个软件备份,并对所述多个软件备份进行排序;
将所述多个软件备份保存在单片机程序存储空间;
当所述单片机软件发生错误时,对所述单片机软件的多个软件备份进行校验并获取校验结果;
根据所述校验结果,将通过校验的软件备份的备份序号保存在内存空间中;
根据所述备份序号引导所述单片机软件跳转到某一个通过校验的软件备份,实现单片机软件错误的恢复。
优选地,所述单片机软件中添加有初始化程序、校验引导程序和中断函数的选择性跳转程序。
优选地,所述将单片机软件中的主程序进行备份具体包括:
将单片机软件中的主函数备份为多个函数内容相同的函数备份,并对多个所述函数备份以不同的备份序号进行命名;
为所述函数备份组中每一个函数备份分别备份单片机软件中对应的子函数,得到以对应的函数备份的备份序号命名的子函数备份;
为所述函数备份组中每一个函数备份分别备份单片机软件中对应的中断服务函数,得到以对应的函数备份的备份序号命名的中断服务函数备份。
优选地,所述将多个软件备份保存在单片机程序存储空间具体包括:
将所述函数备份、所述函数备份对应的子函数备份以及所述函数备份对应的中断服务函数备份作为一个函数组声明在连续的单片机程序存储空间内;
分别获取每一个函数备份的存储空间起始地址和结束地址,将其填充到对应的软件备份的起始地址变量和结束地址变量;
分别获取每一个函数备份的中断源对应的中断服务函数备份的程序存储空间起始地址,将其填充到所述单片机软件中不同中断源所对应的中断服务函数备份的起始地址变量。
优选地,所述对单片机软件的多个软件备份进行校验并获取校验结果具体包括:
获取预先设定的校验值的正确值;
采用CRC循环冗余校验方式或和校验方式计算所述多个软件备份的校验值;
判断所述预先设定的校验值的正确值与计算出的某个软件备份的校验值是否一致,若一致,则校验结果为正确,当前软件备份通过校验,若不一致,则校验结果为错误,当前软件备份不能通过校验。
优选地,所述引导单片机软件跳转到某一个通过校验的软件备份具体包括:
获取通过校验的软件备份的备份序号;
获取与所述备份序号对应的软件备份的起始地址;
将程序计数器PC指向所述软件备份的起始地址。
优选地,所述方法还包括:
当发生中断时,根据通过校验的软件备份的备份序号,查找所述单片机软件中不同中断源所对应的与所述备份序号对应的中断服务函数备份的起始地址;
将程序计数器PC指向所述中断服务函数备份起始地址。
本发明还提出了一种对单片机软件错误进行恢复的系统,所述系统包括:
备份模块,用于将单片机软件中的主程序进行备份,得到主程序的多个软件备份,并对所述多个软件备份进行排序;
程序存储模块,用于将所述多个软件备份保存在单片机程序存储空间;
校验模块,用于当所述单片机软件发生错误时,对所述单片机软件的多个软件备份进行校验并获取校验结果;
数据存储模块,根据所述校验结果,将通过校验的软件备份的备份序号保存在内存空间中;
引导跳转模块,用于根据所述备份序号引导所述单片机软件跳转到某一个通过校验的软件备份,实现单片机软件错误的恢复。
优选地,所述备份模块包括:
函数备份单元,用于将单片机软件中的主函数备份为多个函数内容相同的函数备份,并对多个所述函数备份以不同的备份序号进行命名;
子函数备份单元,用于为所述函数备份组中每一个函数备份分别备份单片机软件中对应的子函数,得到以对应的函数备份的备份序号命名的子函数备份;
中断服务函数备份单元,用于为所述函数备份组中每一个函数备份分别备份单片机软件中对应的中断服务函数,得到以对应的函数备份的备份序号命名的中断服务函数备份。
优选地,所述校验模块包括:
获取单元,用于获取预先声明的校验值的正确值;
计算单元,用于采用CRC循环冗余校验方式或和校验方式计算所述多个软件备份的校验值;
判断单元,用于判断所述预先声明的校验值的正确值与计算出的某个软件备份的校验值是否一致,若一致,则校验结果为正确,当前软件备份通过校验,若不一致,则校验结果为错误,当前软件备份不能通过校验。
本发明提出一种对单片机软件错误进行恢复的方法及系统,本方法无需扩展单片机程序存储器,在已有程序存储器中实现软件备份及选择性引导,能够在无需对单片机硬件做任何改动的情况下,降低单片机功能异常或失效的概率,提高了单片机软件错误的恢复能力。
附图说明
图1为现有技术中的三模冗余电路;
图2为现有三模冗余电路中的多数判决器的电路组成图;
图3是本发明一种对单片机软件错误进行恢复的方法的流程图;
图4是本发明实施例中备份前的单片机程序空间分配图;
图5是本发明实施例中备份后的单片机程序空间分配图;
图6是本发明一种对单片机软件错误进行恢复的系统的模块图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
本发明描述了一种在单片机内部程序存储器中进行软件备份及选择性引导,实现对单片机软件错误进行恢复的方法及系统。实现单片机软件主程序和中断服务函数的错误恢复。
本发明实施例一提出了一种对单片机软件错误进行恢复的方法,如图3所示,所述方法包括以下步骤:
S101、将单片机软件中的主程序进行备份,得到主程序的多个软件备份,并对所述多个软件备份进行排序;
本发明实施例中,单片机软件中添加有初始化程序、校验引导程序和中断函数的选择性跳转程序。由于单片机上电初始化程序、主函数校验引导程序以及中断函数的选择跳转程序的长度远远小于需要保护的软件的长度,且只有当初始化程序、校验引导程序和中断函数的选择跳转程序发生不可恢复性错误时,整个软件才会发生永久性功能异常或失效。因此,该方法在无需对单片机硬件做任何改动的情况下,将单片机功能异常或失效的概率从整个单片机软件出错的概率降低至初始化程序、校验引导程序和中断选择跳转程序出错的概率,提高了单片机软件的错误恢复能力
S102、将所述多个软件备份保存在单片机程序存储空间;
S103、当所述单片机软件发生错误时,对所述单片机软件的多个软件备份进行校验并获取校验结果;
S104、根据所述校验结果,将通过校验的软件备份的备份序号保存在内存空间中;
S105、根据所述备份序号引导所述单片机软件跳转到某一个通过校验的软件备份,实现单片机软件错误的恢复。
本发明实施例中提出的对单片机软件错误进行恢复的方法,在已有程序存储器中实现软件备份及选择性引导,图4是本发明实施例中备份前的单片机程序空间分配图。在图4中,(401)为上电初始化程序区,上电后,此段程序首先进行单片机内部寄存器的初始化,寄存器初始化完毕后,跳转main()函数的起始地址。(402)为上电初始化程序区和中断函数区之间的空白填充区域。(403)为中断函数区,在该程序区保存了中断服务函数的跳转指令。(404)为中断函数区和main()函数区之间的空白区域。(405)为主函数区,保存了软件main()函数的指令,此区域为软件的主体。(406)为main()函数的子函数区,这个程序区存储着着main()函数的所有子函数的指令。(407)为软件的中断服务函数区,存储着不同中断源所对应的中断服务函数。(408)为程序未占用的空白区域。
在程序区地址分配中,上电初始化程序由编译器根据单片机的型号自动添加,上电初始化程序的末尾,编译器会自动添加跳转至main()函数入口的指令。软件的中断函数跳转指令被链接器放置在相应的中断向量入口(403)处,当中断发生时,程序计数器PC跳转至中断源所对应的中断服务函数(407)。在中断函数之后,链接器会放置软件的main()函数(405)。在main()函数之后,链接器会放置main()函数的子函数(406)。未使用的空白区域(402,404,408),可以选择使用0x00或0xFF填充。
图5是本发明实施例中备份后的单片机程序空间分配图,在图5中,(501)为上电初始化程序区,上电后,此段程序首先进行单片机内部寄存器的初始化,寄存器初始化完毕后,跳转main()函数的起始地址。(502)为上电初始化程序区和中断函数区之间的空白填充区域。(503)为中断入口处的选择性跳转程序区,在该程序区根据内存空间中保存的备份序号,选择性跳转至相应的中断服务函数备份。(504)为中断选择性跳转程序区和校验引导main()函数区之间的空白区域。(505)为校验引导main()函数区,保存了对程序存储器中软件的多个备份(506,507,508)进行校验,以及校验完成后,跳过校验出错的软件备份,只引导校验通过的软件备份,并且将被引导的软件备份序号记录在内存空间中的程序。(506)为原有main()函数、main()函数的子函数以及中断服务函数的第1组备份,在该组备份中,原有main()函数被重新命名为main_1()函数。(507)为在图中省略的备份,设在程序区中共保存了N组原有main()函数、main()函数的子函数以及中断服务函数的备份,则(507)包括第2~N-1组备份。(508)为原有main()函数、main()函数的子函数以及中断服务函数的第N组备份,在该组备份中,原有main()函数被重新命名为main_N()函数。(509)为程序未占用的空白区域。
通过图4和图5可以看出,单片机软件的main()函数(405)、main()函数的子函数(406)以及中断服务函数(407)所占用的存储空间一般远远大于上电初始化函数(401)和中断跳转指令(403)。因此,程序存储器中的错误发生在main()函数(405)、main()函数的子函数(406)以及中断服务函数(407)中的概率要远远大于发生在上电初始化函数(401)和中断跳转指令(403)中的概率。将main()函数(405)、main()函数的子函数(406)以及中断服务函数(407)在程序存储器中做多重备份,便可将main()函数(405)、main()函数的子函数(406)以及中断服务函数(407)出错的概率降至可以忽略的水平。此时,整个软件的功能异常或失效的概率仅仅为上电初始化程序(401)、校验引导程序(405)和中断选择性跳转程序(403)发生错误的概率。
本发明提出的不扩展单片机程序存储器,在已有程序存储器中实现软件备份及选择性引导的方法。图5所示为使用该方法进行多重备份后的单片机程序空间分配图。(501)为上电初始化程序区,上电后,此段程序首先进行单片机内部寄存器的初始化,寄存器初始化完毕后,跳转main()函数的起始地址。(502)为上电初始化程序区和中断函数区之间的空白填充区域。(503)为中断入口处的选择性跳转程序区,在该程序区根据内存空间中保存的备份序号,选择性跳转至相应的中断服务函数备份。(504)为中断选择性跳转程序区和校验引导main()函数区之间的空白区域。(505)为校验引导main()函数区,保存了对程序存储器中软件的多个备份(506,507,508)进行校验,以及校验完成后,跳过校验出错的软件备份,只引导校验通过的软件备份,并且将被引导的软件备份序号记录在内存空间中的程序。(506)为原有main()函数、main()函数的子函数以及中断服务函数的第1组备份,在该组备份中,原有main()函数被重新命名为main_1()函数。(507)为在图中省略的备份,设在程序区中共保存了N组原有main()函数、main()函数的子函数以及中断服务函数的备份,则(507)包括第2~N-1组备份。(508)为原有main()函数、main()函数的子函数以及中断服务函数的第N组备份,在该组备份中,原有main()函数被重新命名为main_N()函数。(509)为程序未占用的空白区域。
其中,将单片机软件中的主程序进行备份具体包括:将单片机软件中的主函数备份为多个函数内容相同的函数备份,并对多个所述函数备份以不同的备份序号进行命名;为所述函数备份组中每一个函数备份分别备份单片机软件中对应的子函数,得到以对应的函数备份的备份序号命名的子函数备份;为所述函数备份组中每一个函数备份分别备份单片机软件中对应的中断服务函数,得到以对应的函数备份的备份序号命名的中断服务函数备份。
其中,将所述多个软件备份保存在单片机程序存储空间具体包括:将所述函数备份、所述函数备份对应的子函数备份以及所述函数备份对应的中断服务函数备份作为一个函数组声明在连续的单片机程序存储空间内;分别获取每一个函数备份的存储空间起始地址和结束地址,将其填充到对应的软件备份的起始地址变量和结束地址变量;分别获取每一个函数备份的中断源对应的中断服务函数备份的程序存储空间起始地址,将其填充到所述单片机软件中不同中断源所对应的中断服务函数备份的起始地址变量。
在本发明实施例中,将已有的main()函数,子函数及其中断服务函数进行备份,包括如下子步骤:
3.1将原有软件的main()函数重新命名为函数内容相同但名称不同的函数备份,在本具体实施例中为main_1()、main_2()…main_N()。
3.2将原有main()函数的子函数重新命名为每个函数备份组(406,407,408)所对应的子函数备份,在本具体实施例中为func_1_bk_1(),func_1_bk_2()…func_1_bk_N(),func_2_bk_1(),func_2_bk_2()…func_2_bk_N()…。
3.3将原有的中断服务函数重新命名为每个函数备份组(406,407,408)所对应的中断服务函数备份,在本具体实施例中为Int_1_bk_1(),Int_1_bk_2()…Int_1_bk_N(),Int_2_bk_1(),Int_2_bk_2()…Int_2_bk_N()…。
3.4在链接器对函数备份进行链接的过程中,手动声明函数的链接地址,将原有软件main()函数的备份、该备份所对应的子函数以及该备份所对应的中断服务函数作为一个函数组声明在连续的程序存储空间内。在本具体实施例中,即为main_1(),func_1_bk_1(),func_2_bk_1()…Int_1_bk_1(),Int_2_bk_1()…声明为第1组。main_2(),func_1_bk_2(),func_2_bk_2()…Int_1_bk_2(),Int_2_bk_2()…声明为第2组。以此类推直到main_N(),func_1_bk_N(),func_2_bk_N()…Int_1_bk_N(),Int_2_bk_N()…声明为第N组。
3.5链接操作完成之后,分别将每一个函数备份组(406,407,408)的存储空间起始地址和结束地址读出,对应填充到1.1中软件备份的起始地址变量和结束地址变量。
3.6分别将每一个函数备份组(406,407,408)的中断源所对应的中断服务函数起始地址读出,对应填充到2.2中选择性跳转程序中不同中断源所对应的中断服务函数起始地址。
其中,对单片机软件的多个软件备份进行校验并获取校验结果具体包括:获取预先设定的校验值的正确值;采用CRC循环冗余校验方式或和校验方式计算所述多个软件备份的校验值;判断所述预先设定的校验值的正确值与计算出的某个软件备份的校验值是否一致,若一致,则校验结果为正确,当前软件备份通过校验,若不一致,则校验结果为错误,当前软件备份不能通过校验。
在本发明实施例中,整个单片机程序的main()函数为校验引导函数,在主函数中声明多个软件备份的起始地址变量,结束地址变量,以及校验结果。main()函数选用一种校验方法,例如CRC校验、和校验方法,计算1个或多个软件备份的校验结果。将校验结果与保存的正确结果做比较,选出一个正确的校验结果(如果有多个校验结果正确,则随机选取一个正确结果)所对应的软件备份。
其中,引导单片机软件跳转到某一个通过校验的软件备份具体包括:获取通过校验的软件备份的备份序号;获取与所述备份序号对应的软件备份的起始地址;将程序计数器PC指向所述软件备份的起始地址。当发生中断时,根据通过校验的软件备份的备份序号,查找所述单片机软件中不同中断源所对应的与所述备份序号对应的中断服务函数备份的起始地址;将程序计数器PC指向所述中断服务函数备份起始地址。
在本发明实施例中,在每个中断源的入口处分别添加选择性跳转程序,作为不同中断源多个中断服务函数备份的选择性跳转程序,包括以下子步骤:每个中断源的入口处添加程序代码,该代码读取内存空间中的备份序号;声明N个备份序号所对应的该中断源的中断服务函数起始地址;该程序代码通过备份序号,选择该备份序号所对应的该中断源的中断服务函数起始地址;将程序计数器PC设置为指向该中断服务函数的指令起始地址。
本发明提出了一种不扩展单片机程序存储器,通过在已有程序存储器中实现软件备份及选择性引导的方法,能够在无需对单片机硬件做任何改动的情况下,将单片机功能异常或失效的概率从整个单片机软件出错的概率降低至初始化程序、校验引导程序和中断服务程序出错的概率,提高了单片机软件错误的恢复能力。
本发明还提出了一种对单片机软件错误进行恢复的系统,如图6所示,所述系统包括:
备份模块601,用于将单片机软件中的主程序进行备份,得到主程序的多个软件备份,并对所述多个软件备份进行排序;
程序存储模块602,用于将所述多个软件备份保存在单片机程序存储空间;
校验模块603,用于当所述单片机软件发生错误时,对所述单片机软件的多个软件备份进行校验并获取校验结果;
数据存储模块604,根据所述校验结果,将通过校验的软件备份的备份序号保存在内存空间中;
引导跳转模块605,用于根据所述备份序号引导所述单片机软件跳转到某一个通过校验的软件备份,实现单片机软件错误的恢复。
其中,备份模块601包括:
函数备份单元,用于将单片机软件中的主函数备份为多个函数内容相同的函数备份,并对多个所述函数备份以不同的备份序号进行命名;
子函数备份单元,用于为所述函数备份组中每一个函数备份分别备份单片机软件中对应的子函数,得到以对应的函数备份的备份序号命名的子函数备份;
中断服务函数备份单元,用于为所述函数备份组中每一个函数备份分别备份单片机软件中对应的中断服务函数,得到以对应的函数备份的备份序号命名的中断服务函数备份。
其中,校验模块603包括:
获取单元,用于获取预先声明的校验值的正确值;
计算单元,用于采用CRC循环冗余校验方式或和校验方式计算所述多个软件备份的校验值;
判断单元,用于判断所述预先声明的校验值的正确值与计算出的某个软件备份的校验值是否一致,若一致,则校验结果为正确,当前软件备份通过校验,若不一致,则校验结果为错误,当前软件备份不能通过校验。
本发明提出一种对单片机软件错误进行恢复的方法及系统,本方法无需扩展单片机程序存储器,在已有程序存储器中实现软件备份及选择性引导,能够在无需对单片机硬件做任何改动的情况下,降低单片机功能异常或失效的概率,提高了单片机软件错误的恢复能力。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。

Claims (10)

1.一种对单片机软件错误进行恢复的方法,其特征在于,所述方法包括以下步骤:
将单片机软件中的主程序进行备份,得到主程序的多个软件备份,并对所述多个软件备份进行排序;
将所述多个软件备份保存在单片机程序存储空间;
当所述单片机软件发生错误时,对所述单片机软件的多个软件备份进行校验并获取校验结果;
根据所述校验结果,将通过校验的软件备份的备份序号保存在内存空间中;
根据所述备份序号引导所述单片机软件跳转到某一个通过校验的软件备份,实现单片机软件错误的恢复。
2.如权利要求1所述的方法,其特征在于,所述单片机软件中添加有初始化程序、校验引导程序和中断函数的选择性跳转程序。
3.如权利要求1所述的方法,其特征在于,所述将单片机软件中的主程序进行备份具体包括:
将单片机软件中的主函数备份为多个函数内容相同的函数备份,并对多个所述函数备份以不同的备份序号进行命名;
为所述函数备份组中每一个函数备份分别备份单片机软件中对应的子函数,得到以对应的函数备份的备份序号命名的子函数备份;
为所述函数备份组中每一个函数备份分别备份单片机软件中对应的中断服务函数,得到以对应的函数备份的备份序号命名的中断服务函数备份。
4.如权利要求3所述的方法,其特征在于,所述将所述多个软件备份保存在单片机程序存储空间具体包括:
将所述函数备份、所述函数备份对应的子函数备份以及所述函数备份对应的中断服务函数备份作为一个函数组声明在连续的单片机程序存储空间内;
分别获取每一个函数备份的存储空间起始地址和结束地址,将其填充到对应的软件备份的起始地址变量和结束地址变量;
分别获取每一个函数备份的中断源对应的中断服务函数备份的程序存储空间起始地址,将其填充到所述单片机软件中不同中断源所对应的中断服务函数备份的起始地址变量。
5.如权利要求1所述的方法,其特征在于,所述对单片机软件的多个软件备份进行校验并获取校验结果具体包括:
获取预先设定的校验值的正确值;
采用CRC循环冗余校验方式或和校验方式计算所述多个软件备份的校验值;
判断所述预先设定的校验值的正确值与计算出的某个软件备份的校验值是否一致,若一致,则校验结果为正确,当前软件备份通过校验,若不一致,则校验结果为错误,当前软件备份不能通过校验。
6.如权利要求4所述的方法,其特征在于,所述引导单片机软件跳转到某一个通过校验的软件备份具体包括:
获取通过校验的软件备份的备份序号;
获取与所述备份序号对应的软件备份的起始地址;
将程序计数器PC指向所述软件备份的起始地址。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
当发生中断时,根据通过校验的软件备份的备份序号,查找所述单片机软件中不同中断源所对应的与所述备份序号对应的中断服务函数备份的起始地址;
将程序计数器PC指向所述中断服务函数备份起始地址。
8.一种对单片机软件错误进行恢复的系统,其特征在于,所述系统包括:
备份模块,用于将单片机软件中的主程序进行备份,得到主程序的多个软件备份,并对所述多个软件备份进行排序;
程序存储模块,用于将所述多个软件备份保存在单片机程序存储空间;
校验模块,用于当所述单片机软件发生错误时,对所述单片机软件的多个软件备份进行校验并获取校验结果;
数据存储模块,根据所述校验结果,将通过校验的软件备份的备份序号保存在内存空间中;
引导跳转模块,用于根据所述备份序号引导所述单片机软件跳转到某一个通过校验的软件备份,实现单片机软件错误的恢复。
9.如权利要求8所述的系统,其特征在于,所述备份模块包括:
函数备份单元,用于将单片机软件中的主函数备份为多个函数内容相同的函数备份,并对多个所述函数备份以不同的备份序号进行命名;
子函数备份单元,用于为所述函数备份组中每一个函数备份分别备份单片机软件中对应的子函数,得到以对应的函数备份的备份序号命名的子函数备份;
中断服务函数备份单元,用于为所述函数备份组中每一个函数备份分别备份单片机软件中对应的中断服务函数,得到以对应的函数备份的备份序号命名的中断服务函数备份。
10.如权利要求8所述的系统,其特征在于,所述校验模块包括:
获取单元,用于获取预先声明的校验值的正确值;
计算单元,用于采用CRC循环冗余校验方式或和校验方式计算所述多个软件备份的校验值;
判断单元,用于判断所述预先声明的校验值的正确值与计算出的某个软件备份的校验值是否一致,若一致,则校验结果为正确,当前软件备份通过校验,若不一致,则校验结果为错误,当前软件备份不能通过校验。
CN201410357317.0A 2014-07-24 2014-07-24 一种对单片机软件错误进行恢复的方法及系统 Active CN105279043B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410357317.0A CN105279043B (zh) 2014-07-24 2014-07-24 一种对单片机软件错误进行恢复的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410357317.0A CN105279043B (zh) 2014-07-24 2014-07-24 一种对单片机软件错误进行恢复的方法及系统

Publications (2)

Publication Number Publication Date
CN105279043A true CN105279043A (zh) 2016-01-27
CN105279043B CN105279043B (zh) 2018-07-27

Family

ID=55148091

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410357317.0A Active CN105279043B (zh) 2014-07-24 2014-07-24 一种对单片机软件错误进行恢复的方法及系统

Country Status (1)

Country Link
CN (1) CN105279043B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107480007A (zh) * 2017-08-15 2017-12-15 南京南瑞继保电气有限公司 一种程序冗余校验与纠错的方法
CN108038027A (zh) * 2017-12-11 2018-05-15 芜湖华烨新材料有限公司 浸胶控制软件备份的方法
CN108762987A (zh) * 2018-05-30 2018-11-06 上海顺舟智能科技股份有限公司 用于双备份单片机闪存的数据恢复方法及装置
CN109870674A (zh) * 2019-02-14 2019-06-11 华北电力科学研究院有限责任公司 软件雷达信号安全防护的方法和装置
CN113886145A (zh) * 2021-10-26 2022-01-04 江苏集萃智能光电系统研究所有限公司 基于片内flash且无需重新烧写的程序自备份方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1851645A (zh) * 2006-01-17 2006-10-25 华为技术有限公司 一种单片机系统在运行中升级的装置和方法
US20130103945A1 (en) * 2011-10-21 2013-04-25 International Business Machines Corporation Encrypting data objects to back-up
CN103176875A (zh) * 2013-03-19 2013-06-26 卡斯柯信号有限公司 一种嵌入式系统上电自检方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1851645A (zh) * 2006-01-17 2006-10-25 华为技术有限公司 一种单片机系统在运行中升级的装置和方法
US20130103945A1 (en) * 2011-10-21 2013-04-25 International Business Machines Corporation Encrypting data objects to back-up
CN103176875A (zh) * 2013-03-19 2013-06-26 卡斯柯信号有限公司 一种嵌入式系统上电自检方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107480007A (zh) * 2017-08-15 2017-12-15 南京南瑞继保电气有限公司 一种程序冗余校验与纠错的方法
CN107480007B (zh) * 2017-08-15 2020-09-08 南京南瑞继保电气有限公司 一种程序冗余校验与纠错的方法
CN108038027A (zh) * 2017-12-11 2018-05-15 芜湖华烨新材料有限公司 浸胶控制软件备份的方法
CN108762987A (zh) * 2018-05-30 2018-11-06 上海顺舟智能科技股份有限公司 用于双备份单片机闪存的数据恢复方法及装置
CN109870674A (zh) * 2019-02-14 2019-06-11 华北电力科学研究院有限责任公司 软件雷达信号安全防护的方法和装置
CN113886145A (zh) * 2021-10-26 2022-01-04 江苏集萃智能光电系统研究所有限公司 基于片内flash且无需重新烧写的程序自备份方法

Also Published As

Publication number Publication date
CN105279043B (zh) 2018-07-27

Similar Documents

Publication Publication Date Title
CN105279043A (zh) 一种对单片机软件错误进行恢复的方法及系统
US8966319B2 (en) Obtaining debug information from a flash memory device
CN102707990B (zh) 基于容器的处理方法和装置
CN104035843B (zh) 用于提高锁步核可用性的系统和方法
CN105706059B (zh) 非易失性存储器中的错误校正
CN106873990B (zh) 嵌入式系统ram损坏模式下的多分区引导方法
CN107678695B (zh) 基于可用存储器空间选择冗余存储配置
CN104216800A (zh) 一种基于数据冗余的系统故障自动恢复方法及装置
CN107450852B (zh) 一种存储空间处理方法、装置和设备
CN106776122A (zh) 一种基于Flash启动过程中主备保护的方法
CN104541249A (zh) 用于非易失性存储器的耐久性感知纠错码(ecc)保护
CN103473098A (zh) 一种boot程序的启动方法和相关装置
CN104915219A (zh) 单片机程序升级方法及装置
CN104391727B (zh) 数据烧写方法、系统、烧写设备以及目标设备
CN104581397A (zh) 安卓机顶盒的系统升级方法及装置
CN108037894B (zh) 一种磁盘空间管理方法及装置
CN105359108A (zh) 带有自适应纠删码生成的存储系统
CN105354059A (zh) 空调系统的控制器的升级方法及装置
WO2014203030A1 (en) Detection of data corruption in a data processing device
CN108089892B (zh) 一种系统安全启动的方法、装置、机顶盒及存储介质
US9626127B2 (en) Integrated circuit device, data storage array system and method therefor
CN103530206A (zh) 一种数据恢复的方法和设备
CN103455750B (zh) 一种嵌入式设备的高安验证方法及装置
CN103838638A (zh) Fpga外挂存储器校验方法及装置
CN104461798A (zh) 一种用于处理器算术逻辑单元指令的随机数验证方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant