单片机中闪存程序自动检测及修复方法和装置的制造方法
【技术领域】
[0001]本发明涉及单片机技术领域,特别涉及一种单片机中闪存程序自动检测及修复方法和装置。
【背景技术】
[0002]单片机的工作离不开程序的运行。当前单片机内部储存程序的介质绝大多数为闪存flash。基于闪存的特性,单片机在不同环境下工作时,或者单片机受到各种环境影响,其内部闪存很容易被损坏,出现坏块,导致其中存储的程序丢失,使得单片机无法正常工作。
[0003]为解决上述问题,相关技术中所采取的解决方案为:针对整体的闪存进行坏块管理。其主要实现方式为:在单片机量产测试或工厂测试时,提前测试闪存的可靠性,确保闪存不存在坏块;或者坏块数量在产品可靠性和良品度可接受范围内,将坏块的信息存在固定的地方,并提供冗余的闪存块,将这些坏块通过映射,被这些后备的冗余块进行逻辑地址替换,已达到坏块替换的效果,确保闪存在整体可操作的地址区间内无不可用的存储空间出现。
[0004]上述解决方案仅仅解决了在已知坏块信息的条件下,处理坏块的问题。但是,上述解决方案仅用于单片机闪存程序初始化之前,一旦程序烧写至闪存后,如果在单片机正常工作中出现了闪存块损坏的情况,上述解决方案将无法解决问题,因为此时并不知道是哪块闪存块损坏,所以无法对损坏的闪存块进行修复。更重要的,如果在单片机正常工作时出现了闪存块损坏的情况,那就意味着该闪存块内部烧写的某一程序块也会随之丢失,从而导致单片机完全不能工作,该单片机芯片即处于报废处境。
【发明内容】
[0005]本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的一个目的在于提出一种单片机中闪存程序自动检测及修复方法,该方法可以应用于处于工作状态的单片机中,使得在单片机的闪存和内部程序出现故障时,能够对故障进行修复,从而使单片机继续工作。
[0006]本发明的第二个目的在于提出一种单片机中闪存程序自动检测及修复装置。
[0007]为了实现上述目的,本发明第一方面实施例的单片机中闪存程序自动检测及修复方法,包括以下步骤:获取单片机中的闪存程序,其中,所述闪存程序包括多个程序代码段及与每个所述程序代码段对应的多个关联码段,每个所述关联码段根据所述关联码段对应的程序代码段及相邻的程序代码段生成;根据所述多个关联码段依次对所述多个程序代码段进行检测;以及当判断所述多个程序代码段中的至少一个程序代码段被损坏时,根据与所述至少一个程序代码段相邻的程序代码段和对应的关联码段对所述至少一个程序代码段进行恢复。
[0008]根据本发明实施例的单片机中闪存程序自动检测及修复方法,首先获取单片机中的闪存程序,根据闪存程序中的多个关联码段依次对闪存程序中的多个程序代码段进行检测,当判断多个程序代码段中的至少一个程序代码段被损坏时,根据与至少一个程序代码段相邻的程序代码段和对应的关联码段对至少一个程序代码段进行恢复,由于闪存程序中的程序代码段之间具有关联性,所以该方法可以准确检测出被损坏的程序代码段,并根据程序代码段之间的关联性对被损坏的程序代码段进行恢复,该方法可以应用于处于工作状态的单片机中,使得在单片机的闪存和内部程序出现故障时,能够对故障进行修复,从而使单片机继续工作。
[0009]为了实现上述目的,本发明第二方面实施例的单片机中闪存程序自动检测及修复装置,包括:内存程序获取模块,用于获取单片机中的闪存程序,其中,所述闪存程序包括多个程序代码段及与每个所述程序代码段对应的多个关联码段,每个所述关联码段根据所述关联码段对应的程序代码段及相邻的程序代码段生成;检测模块,用于根据所述多个关联码段依次对所述多个程序代码段进行检测;以及修复模块,用于当判断所述多个程序代码段中的至少一个程序代码段被损坏时,根据与所述至少一个程序代码段相邻的程序代码段和对应的关联码段对所述至少一个程序代码段进行恢复。
[0010]根据本发明实施例的单片机中闪存程序自动检测及修复装置,首先通过内存程序获取模块获取单片机中的闪存程序,然后检测模块根据闪存程序中的多个关联码段依次对闪存程序中的多个程序代码段进行检测,当判断多个程序代码段中的至少一个程序代码段被损坏时,修复模块根据与至少一个程序代码段相邻的程序代码段和对应的关联码段对至少一个程序代码段进行恢复,由于闪存程序中的程序代码段之间具有关联性,所以该装置可以准确检测出被损坏的程序代码段,并根据程序代码段之间的关联性对被损坏的程序代码段进行恢复,该装置可以对处于工作状态的单片机进行检测,并当单片机的闪存和内部程序出现故障时能够对故障进行修复并使单片机可以继续工作。
【附图说明】
[0011]图1是根据本发明一个实施例的单片机中闪存程序自动检测及修复方法的流程图;
[0012]图2是根据本发明一个实施例的读取闪存程序的示意图;
[0013]图3是根据本发明一个实施例的闪存内部数据存储结构的示意图;
[0014]图4是根据本发明另一个实施例的单片机中闪存程序自动检测及修复方法的流程图;
[0015]图5是根据本发明一个实施例的单片机中闪存程序自动检测及修复装置的结构示意图;
[0016]图6是根据本发明另一个实施例的单片机中闪存程序自动检测及修复装置的结构示意图。
【具体实施方式】
[0017]下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
[0018]图1是根据本发明一个实施例的单片机中闪存程序自动检测及修复方法的流程图。如图1所示,本发明实施例的单片机中闪存程序自动检测及修复方法,包括以下步骤:
[0019]S101,获取单片机中的闪存程序,其中,闪存程序包括多个程序代码段及与每个程序代码段对应的多个关联码段,每个关联码段根据关联码段对应的程序代码段及相邻的程序代码段生成。
[0020]下面首先对单片机中的闪存程序的存储结构进行介绍。
[0021]如图2所示,首先要将程序代码段烧写至单片机中。具体地,通过关联码生成逻辑和其中的计算法则生成存储数据段,并存储至闪存中。
[0022]更具体地,如图3所示,单片机的闪存由多个闪存块组成,而每个闪存块由多组数据段组成。其中,闪存块中存储的数据段的格式为:程序代码段+关联码段。整个闪存中所存储的所有数据段均具有关联性。程序代码段由最后烧写到闪存的数据所决定,其对应单片机程序,具有唯一性和固定性。而每一组数据段中的关联码段是由该数据段中的程序代码段和相邻数据段中的程序代码段生成的。
[0023]在本发明的一个实施例中,关联码生成逻辑对关联码段对应的程序代码段及相邻的程序代码段进行逻辑运算或数学运算生成关联码段。
[0024]具体地,例如,逻辑运算可以是与或非等基本逻辑运算,也可以是与非、异或、同或等复杂逻辑运算;数学运算可以是加减乘除等基本数学运算,也可以是微积分等复杂数学运算。对关联码段对应的程序代码段及相邻的程序代码段进行逻辑运算或者数学运算或者逻辑运算与数学运算的组合运算,以生成关联码段。下面进行举例说明。
[0025]例如,关联码段的生成方法为:
[0026](关联码段1-2)= alg (程序代码段1_1、程序代码段1_2);
[0027](关联码段1-3)= alg (程序代码段1_2、程序代码段1_3);
[0028](关联码段2-1)= alg (程序代码段1_N、程序代码段2_1);
[0029](关联码段2-2)= alg(程序代码段2-1、程序代码段2-2),…,其它关联码段的生成方法以此推类。其中,alg表示两个值之间的运算方法、法则或算法操作,具体通过关联码生成逻辑(如图2所示)实现,alg操作由数字硬件电路生成并检测。例如,alg可以为两个程序代码段之间的相加运算,可以为两个程序代码段之间的相乘运算,可以为两个程序代码段之间的与非运算,可以为两个程序代码段之间的数学运算或逻辑运算,还可以为两个程序代码段之间的数学运算和逻辑运算的组合。当程序代码段烧写至闪存内部后,整个闪存储存空间与数据值已固定,且每一个数据段通过关联码段与相邻的数据段关联。
[0030]下面以8组正确的程序代码段分别存储在2个闪存块中为例,对关联码段的生成过程进行说明,即:
[0031]Z (程序代码段 1-1) = 0x3017 = 0011_0000_0001_0111 ;
[0032]Z (程序代码段 1-2) = 0x114a = 0001_0001_0100_1010 ;
[0033]Z (程序代码段 1-3) = 0x70d8 = 0111_0000_1101_1000 ;
[0034]Z (程序代码段 1-4) = 0x6bf5 = 0110_