你还是把全部程序发上来吧或鍺把错误提示中指定行的代码发上来,好像是语法错误其中应该有一个符号用错了"]"。
很负责任地告诉你你的上段程序没有
你再好好检查一下,其他有没有“;”写错的情况或者全角半角有问题
错误中“]”是怎专么来的呢可能是它附近有错误吧,你可以通过屏蔽方式一点┅点检查
下载百度知道APP抢鲜体验
使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。
一种对单片机错误软件错误进行恢复的方法及系统的制作方法
[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]本发明提出一种对单片机错误软件错误进行恢复的方法及系统本方法无需扩展单片机错误程序存储器,在已有程序存储器中实现軟件备份及选择性引导能够在无需对单片机错误硬件做任何改动的情况下,降低单片机错误功能异常或失效的概率提高了单片机错误軟件错误的恢复能力。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。