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

文档序号:9524079阅读:957来源:国知局
一种对单片机软件错误进行恢复的方法及系统的制作方法
【技术领域】
[0001]本发明涉及单片机技术领域,特别涉及一种对单片机软件错误进行恢复的方法及系统。
【背景技术】
[0002]在环境恶劣的单片机应用场景中,单片机程序区存储的软件常常会由于外部恶劣环境的影响(例如高温,辐照),产生不可恢复性错误,此种软件错误不能通过单片机的重新上电进行恢复。无论单片机软件是存储在EPROM存储器、EEPROM存储器,还是FLASH存储器中,均有可能在某个或某些程序的比特位上产生不可恢复性错误,导致整个软件发生永久性功能异常或失效。
[0003]为了应对单片机软件中的不可恢复性错误,目前已有的解决方法是将单片机软件在存储器级进行三模冗余备份,即将软件存储在三个独立的存储器中,通过多数判决来纠正错误。图1为现有技术中的三模冗余电路,该电路描述了三模冗余技术进行软件备份的方法,单片机软件存储在三个独立的外部程序存储器中,外部程序存储器共用一套地址总线。三模冗余技术对三个程序存储器读出的机器码进行多数判决,将多数判决的结果作为正确的机器码送入单片机内部执行。图2为现有三模冗余电路中的多数判决器的电路组成图。在三个程序存储器中,只有当两个或两个以上程序存储器在同一地址发生错误时,多数判决才会得到判决错误的结果。因此,三模冗余后的程序存储器出错的概率要远远小于单个程序存储器出错的概率。
[0004]三模冗余的软件备份方法虽然可以极大提高程序存储器抵抗不可恢复性错误的能力,但该方法需要在单片机外部增加额外的程序存储器和多数判决器,导致电路系统复杂,占用电路板面积大,使得系统成本增加。此外,外部程序存储器需要占用单片机的1口,导致单片机的1扩展性能受限。

【发明内容】

[0005]为了在无需对单片机硬件做任何改动的情况下,降低单片机功能异常或失效的概率,提高单片机软件的错误恢复能力,本发明提供了一种对单片机软件错误进行恢复的方法,该方法包括以下步骤:
[0006]将单片机软件中的主程序进行备份,得到主程序的多个软件备份,并对所述多个软件备份进行排序;
[0007]将所述多个软件备份保存在单片机程序存储空间;
[0008]当所述单片机软件发生错误时,对所述单片机软件的多个软件备份进行校验并获取校验结果;
[0009]根据所述校验结果,将通过校验的软件备份的备份序号保存在内存空间中;
[0010]根据所述备份序号引导所述单片机软件跳转到某一个通过校验的软件备份,实现单片机软件错误的恢复。
[0011]优选地,所述单片机软件中添加有初始化程序、校验引导程序和中断函数的选择性跳转程序。
[0012]优选地,所述将单片机软件中的主程序进行备份具体包括:
[0013]将单片机软件中的主函数备份为多个函数内容相同的函数备份,并对多个所述函数备份以不同的备份序号进行命名;
[0014]为所述函数备份组中每一个函数备份分别备份单片机软件中对应的子函数,得到以对应的函数备份的备份序号命名的子函数备份;
[0015]为所述函数备份组中每一个函数备份分别备份单片机软件中对应的中断服务函数,得到以对应的函数备份的备份序号命名的中断服务函数备份。
[0016]优选地,所述将多个软件备份保存在单片机程序存储空间具体包括:
[0017]将所述函数备份、所述函数备份对应的子函数备份以及所述函数备份对应的中断服务函数备份作为一个函数组声明在连续的单片机程序存储空间内;
[0018]分别获取每一个函数备份的存储空间起始地址和结束地址,将其填充到对应的软件备份的起始地址变量和结束地址变量;
[0019]分别获取每一个函数备份的中断源对应的中断服务函数备份的程序存储空间起始地址,将其填充到所述单片机软件中不同中断源所对应的中断服务函数备份的起始地址变量。
[0020]优选地,所述对单片机软件的多个软件备份进行校验并获取校验结果具体包括:
[0021]获取预先设定的校验值的正确值;
[0022]采用CRC循环冗余校验方式或和校验方式计算所述多个软件备份的校验值;
[0023]判断所述预先设定的校验值的正确值与计算出的某个软件备份的校验值是否一致,若一致,则校验结果为正确,当前软件备份通过校验,若不一致,则校验结果为错误,当前软件备份不能通过校验。
[0024]优选地,所述引导单片机软件跳转到某一个通过校验的软件备份具体包括:
[0025]获取通过校验的软件备份的备份序号;
[0026]获取与所述备份序号对应的软件备份的起始地址;
[0027]将程序计数器PC指向所述软件备份的起始地址。
[0028]优选地,所述方法还包括:
[0029]当发生中断时,根据通过校验的软件备份的备份序号,查找所述单片机软件中不同中断源所对应的与所述备份序号对应的中断服务函数备份的起始地址;
[0030]将程序计数器PC指向所述中断服务函数备份起始地址。
[0031]本发明还提出了一种对单片机软件错误进行恢复的系统,所述系统包括:
[0032]备份模块,用于将单片机软件中的主程序进行备份,得到主程序的多个软件备份,并对所述多个软件备份进行排序;
[0033]程序存储模块,用于将所述多个软件备份保存在单片机程序存储空间;
[0034]校验模块,用于当所述单片机软件发生错误时,对所述单片机软件的多个软件备份进行校验并获取校验结果;
[0035]数据存储模块,根据所述校验结果,将通过校验的软件备份的备份序号保存在内存空间中;
[0036]引导跳转模块,用于根据所述备份序号引导所述单片机软件跳转到某一个通过校验的软件备份,实现单片机软件错误的恢复。
[0037]优选地,所述备份模块包括:
[0038]函数备份单元,用于将单片机软件中的主函数备份为多个函数内容相同的函数备份,并对多个所述函数备份以不同的备份序号进行命名;
[0039]子函数备份单元,用于为所述函数备份组中每一个函数备份分别备份单片机软件中对应的子函数,得到以对应的函数备份的备份序号命名的子函数备份;
[0040]中断服务函数备份单元,用于为所述函数备份组中每一个函数备份分别备份单片机软件中对应的中断服务函数,得到以对应的函数备份的备份序号命名的中断服务函数备份。
[0041 ] 优选地,所述校验模块包括:
[0042]获取单元,用于获取预先声明的校验值的正确值;
[0043]计算单元,用于采用CRC循环冗余校验方式或和校验方式计算所述多个软件备份的校验值;
[0044]判断单元,用于判断所述预先声明的校验值的正确值与计算出的某个软件备份的校验值是否一致,若一致,则校验结果为正确,当前软件备份通过校验,若不一致,则校验结果为错误,当前软件备份不能通过校验。
[0045]本发明提出一种对单片机软件错误进行恢复的方法及系统,本方法无需扩展单片机程序存储器,在已有程序存储器中实现软件备份及选择性引导,能够在无需对单片机硬件做任何改动的情况下,降低单片机功能异常或失效的概率,提高了单片机软件错误的恢复能力。
【附图说明】
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1