一種存儲數據的恢復方法
【專利摘要】本發明公開了一種存儲數據的恢復方法。所述方法包括:將設定的存儲數據寫入原存儲單元,將所述存儲數據的兩備份數據分別寫入預先分配的兩個備份單元,所述原存儲單元、所述兩個備份單元三者地址不連續;讀取所述存儲數據時,檢測所述原存儲單元、所述兩個備份單元的三個數據是否一致;若所述三個數據不一致,且其中有兩個數據相同,則根據兩個相同的數據對另一個數據進行修正。通過本發明的技術方案,能夠在存儲數據被破壞后的下一次讀取時自動進行恢復。
【專利說明】一種存儲數據的恢復方法
【技術領域】
[0001]本發明涉及數據存儲領域,尤其涉及一種存儲數據的恢復方法。
【背景技術】
[0002]在2.4G/5G藍牙等電子設備中,配對的ID以及一些配置信息會使用EEPR0M、FLASH等存儲設備進行保存,從而使得用戶在后續使用設備時,不用再重新輸入配對新或者其他配置信息。
[0003]目前市場上的同類外設產品中,相關配置信息都存儲在產品芯片內部的可重復擦寫的存儲空間單元或芯片外部的可重復擦寫的存儲器中,存儲方式相對簡單,如果程序運行錯誤很容易對存儲空間單元中的數據進行改寫或者破壞,并且此類數據破壞是無法恢復的,嚴重時可能給用戶造成極大的負面影響,使得用戶認為產品質量不良,退換貨情況頻繁發生。
【發明內容】
[0004]本發明的目的在于提出一種存儲數據的恢復方法,能夠在存儲數據被破壞后的下一次讀取時進行修正恢復。
[0005]為達此目的,本發明采用以下技術方案:
[0006]一種存儲數據的恢復方法,包括:
[0007]將設定的存儲數據寫入原存儲單元,將所述存儲數據的兩備份數據分別寫入預先分配的兩個備份單元,所述原存儲單元、所述兩個備份單元三者地址不連續;
[0008]讀取所述存儲數據時,檢測所述原存儲單元、所述兩個備份單元的三個數據是否一致;
[0009]若所述三個數據不一致,且其中有兩個數據相同,則根據兩個相同的數據對另一個數據進行修正。
[0010]其中,所述檢測所述原存儲單元、所述兩個備份單元的三個數據是否一致,包括:
[0011]讀取所述原存儲單元、所述兩個備份單元的三個存儲數據并分別保存到預設的三個緩存空間;
[0012]對比所述三個緩存空間的三個緩存數據是否一致;
[0013]所述若所述三個數據不一致,且其中有兩個數據相同,則根據兩個相同的數據對另一個數據進行修正,包括:
[0014]若所述三個緩存空間的三個緩存數據不一致,且其中有兩個緩存空間的緩存數據相同,則用兩個相同的緩存數據對另一個緩存數據進行修正;
[0015]將修正后的緩存數據寫入對應的原存儲單元或備份單元,以替換對應的存儲數據。
[0016]其中,所述讀取所述原存儲單元、所述兩個備份單元的三個存儲數據并分別保存到預設的三個緩存空間之前,還包括:
[0017]獲取所述存儲數據的長度,創建三個與所述存儲數據的長度對應的緩存空間。
[0018]其中,所述將修正后的緩存數據寫入對應的原存儲單元或備份單元之后,還包括:
[0019]釋放所述三個緩存空間。
[0020]其中,所述將所述存儲數據的兩備份數據分別寫入預先分配的兩個備份單元之前,還包括:
[0021]獲取所述存儲數據的長度和存儲格式,從存儲空間中分配出兩個與所述存儲數據的長度和存儲格式對應的備份單元。
[0022]其中,所述原存儲單元、所述兩個備份單元三者的大小相同。
[0023]其中,所述從存儲空間中分配出兩個與所述存儲數據的長度和存儲格式對應的備份單元之前,還包括:
[0024]確定存儲空間的可用空間大小大于2倍所述存儲數據的長度。
[0025]實施本發明實施例,具有如下有益效果:
[0026]本發明實施例通過將設定的存儲數據寫入原存儲單元,將所述存儲數據的兩備份數據分別寫入預先分配的兩個備份單元,所述原存儲單元、所述兩個備份單元三者地址不連續;讀取所述存儲數據時,檢測所述原存儲單元、所述兩個備份單元的三個數據是否一致;若所述三個數據不一致,且其中有兩個數據相同,則根據兩個相同的數據對另一個數據進行修正。由于所述存儲數據的原存儲單元、兩個備份單元三者地址不連續,異常情況下通常只是破壞其中一個存儲空間的數據,因此在下一次讀取數據時,可通過備份存儲空間的數據對破壞的數據進行修正,有效保證了設定的存儲數據的準確性。
【專利附圖】
【附圖說明】
[0027]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0028]圖1是本發明實施例的一種存儲數據的恢復方法的流程示意圖。
[0029]圖2是本發明實施例中寫入存儲數據的具體流程示意圖。
[0030]圖3是本發明實施例中恢復存儲數據的具體流程示意圖。
【具體實施方式】
[0031]下面結合本發明的附圖對本發明實施例中的技術方案進行清楚、完整的描述,顯然,所描述的實施例僅僅是本發明的一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動的前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0032]結合圖1對本發明的第一實施例進行說明。
[0033]圖1是本發明第一實施例的一種存儲數據的恢復方法流程圖,詳述如下:
[0034]步驟S101,將設定的存儲數據寫入原存儲單元,將所述存儲數據的兩備份數據分別寫入預先分配的兩個備份單元。在本實施例中,所述存儲數據的原存儲單元、所述兩個備份單元三者地址不連續。
[0035]在本實施例中,預先設定需要進行恢復的數據為少量的重要存儲數據,例如藍牙相關外設的配對ID信息和其他用戶配置信息。獲取該存儲數據,額外為這些存儲數據分配另外兩個相同長度、并且地址不在同一連續范圍的存儲單元。這時需確定存儲空間中剩余空閑存儲空間大小,確定存儲空間中剩余空閑存儲空間大小滿足大于2倍所述數據長度。基于此,首次寫入規劃的重要數據時,先將該數據先后寫入對應的原存儲單元,在將該數據的兩備份數據寫入其他兩個存儲單元(即備份單元),以對該數據進行兩份備份。
[0036]較佳的,本實施例中所述存儲數據對應的原存儲單元和兩個用于備份單元的大小相同,數據存儲的格式也相同。
[0037]步驟S102,讀取所述存儲數據時,檢測所述原存儲單元、所述兩個備份單元的三個數據是否一致。
[0038]本實施例中,讀出所述存儲數據時,先分配三段緩存空間,讀取所述原存儲單元、所述兩個備份單元的數據并分別保存到這三個緩存空間,對比檢測這三個緩存空間的數據是否一致。
[0039]需要說明的是,本實施例中需注意緩存空間的分配和釋放,以保證緩存空間的利用率。
[0040]步驟S103,若所述三個數據不一致,且其中有兩個數據相同,則根據兩個相同的數據對另一個數據進行修正。
[0041]本實施例中,若所述三個緩存空間的三個緩存數據不一致,且其中有兩個緩存空間的緩存數據相同,另一個緩存空間的數據不同,則用兩個相同的緩存數據對另一個緩存數據進行修正,然后將修正后的緩沖數據寫入對應的原存儲單元或備份單元。當存儲數據有被破壞或者丟失時,通過該方法可以對被破壞的存儲數據進行修正恢復。
[0042]需要說明的是,如果所述三個存儲單元的數據一致,則確定為數據未被破壞或者丟失,不做修正。本實施例通過在讀取規劃好的存儲數據時,通過與該存儲數據的備份數據進行對比校驗,如果一致則不做修正,否則對存儲數據損壞或丟失部分的進行修正。
[0043]如圖2所示,本實施例中備份存儲數據的具體流程如下:
[0044]步驟S201,獲取需要寫入存儲空間的數據。
[0045]這里的數據可能既包括設定的需要恢復的存儲數據,如產品的配對ID信息以及相關用戶配置信息,還可以包括其他不重要的數據。
[0046]步驟S202,將該數據寫入對應的原存儲單元。
[0047]本實施例中,將配對ID信息以及相關用戶配置信息寫入到存儲單元AO中,其他數據存儲在AO之外的其他存儲單元。
[0048]步驟S203,獲取AO中的存儲數據。
[0049]步驟S204,獲取AO中的存儲數據的長度和存儲格式,確定當前存儲空間的可用空間大小為大于2倍所述存儲數據的長度。
[0050]步驟S205,分配兩個與AO中的存儲數據的長度和存儲格式對應的備份單元Al、A2。
[0051]本實施例中,需先獲取AO中的存儲數據的長度和存儲格式,檢測存儲空間的空閑可用空間大小是否大于2*所述存儲數據的長度。若是,這為該存儲數據再分配兩個與AO相同大小的備份單元A1、A2,并且,A0、A1、A2的數據存儲格式相同,且在存儲空間中的地址不連續。
[0052]步驟S206,將所述存儲數據寫入兩備份單元A1、A2。
[0053]本實施例中,先將AO中的存儲數據寫入Al,再將AO中的存儲數據寫入A2 ;當然,也可以先寫入A2,再寫入Al,或者同時寫入A1、A2。
[0054]對設定的存儲數據備份存儲之后,如圖3所示,再次讀取該存儲數據時,檢測及恢復過程如下:
[0055]步驟S301,創建與欲讀取的存儲數據的長度對應的緩存空間B0、B1、B2。
[0056]本實施例中,即確定出的AO中數據的長度,臨時創建三個與AO中數據的長度對應的緩存空間B0、B1、B2。
[0057]需要說明的是,緩存空間BO、B1、B2的大小可以與AO、A1、A2不相同。
[0058]步驟S302,讀取A0、A1、A2中的存儲數據并分別保存到B0、B1、B2。
[0059]本實施例中,讀取所述原存儲單元A0、兩個備份單元Al、A2的三個存儲數據。將AO中的數據保存到緩存空間BO JfAl中的數據保存到緩存空間BI,將A2中的數據保存到緩存空間B2。
[0060]步驟S303,對比校驗B0、B1、B2的三個緩存數據是否一致,若一致,轉入步驟S305。
[0061]步驟S304,若不一致,且其中有兩個緩存數據相同,則用兩個相同的緩存數據對另一個緩存數據進行修正,并對對存儲數據進行修正。轉入步驟S306。
[0062]本實施例中,若(B0,B1)相等,(B0,B2)不相等,則將B0_>B2,并將B2中修改后的緩存數據重新寫入A2,以對A2中的存儲數據進行覆蓋恢復;
[0063]若(B0,BI)不相等,(B0,B2)相等,則將并將BI中修改后的緩存數據重新寫入Al,以對Al中的存儲數據進行覆蓋恢復;
[0064]若(ΒΟ,ΒΙ)不相等,(Β0,Β2)不相等,(Β1,Β2)相等,則將Β1_>Β0,并將BO中修改后的緩存數據重新寫入Α0,以對AO中的存儲數據進行覆蓋恢復。
[0065]步驟S305,若一致,則不做修正,轉入步驟S306。
[0066]本實施例中,若(Β0,BI)相等,(Β0,Β2)相等,則確定為數據未被破壞,不做修正。
[0067]步驟S306,釋放緩存空間Β0、Β1、Β2。
[0068]本實施例中,即釋放緩存空間Β0、Β1、Β2,及時清除系統垃圾,提高緩存利用率。
[0069]通過本發明實施例,通過將所述存儲數據的兩備份數據分別寫入預先分配的兩個備份單元,所述存儲數據的原存儲單元、所述兩個備份單元三者地址不連續;讀取所述存儲數據時,檢測所述原存儲單元、所述兩個備份單元的三個數據是否一致;若所述三個數據不一致,且其中有兩個數據相同,則根據兩個相同的數據對另一個數據進行修正。由于所述存儲數據的原存儲單元、兩個備份單元三者地址不連續,通常情況只是破壞其中一個存儲空間的數據,因此在下一次讀取數據時,可通過其它存儲空間的數據對破壞的數據進行修正,有效保證了設定的存儲數據的準確性。
[0070]以上所揭露的僅為本發明較佳實施例而已,當然不能以此來限定本發明之權利要求范圍,因此,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,仍屬本發明所涵蓋的范圍。
【權利要求】
1.一種存儲數據的恢復方法,其特征在于,包括: 將設定的存儲數據寫入原存儲單元,將所述存儲數據的兩備份數據分別寫入預先分配的兩個備份單元,所述原存儲單元、所述兩個備份單元三者地址不連續; 讀取所述存儲數據時,檢測所述原存儲單元、所述兩個備份單元的三個數據是否一致; 若所述三個數據不一致,且其中有兩個數據相同,則根據兩個相同的數據對另一個數據進行修正。
2.根據權利要求1所述的存儲數據的恢復方法,其特征在于,所述檢測所述原存儲單元、所述兩個備份單元的三個數據是否一致,包括: 讀取所述原存儲單元、所述兩個備份單元的三個存儲數據并分別保存到預設的三個緩存空間; 對比所述三個緩存空間的三個緩存數據是否一致; 所述若所述三個數據不一致,且其中有兩個數據相同,則根據兩個相同的數據對另一個數據進行修正,包括: 若所述三個緩存空間的三個緩存數據不一致,且其中有兩個緩存空間的緩存數據相同,則用兩個相同的緩存數據對另一個緩存數據進行修正; 將修正后的緩存數據寫入對應的原存儲單元或備份單元,以替換對應的存儲數據。
3.根據權利要求2所述的存儲數據的恢復方法,其特征在于,所述讀取所述原存儲單元、所述兩個備份單元的三個存儲數據并分別保存到預設的三個緩存空間之前,還包括: 獲取所述存儲數據的長度,創建三個與所述存儲數據的長度對應的緩存空間。
4.根據權利要求3所述的存儲數據的恢復方法,其特征在于,所述將修正后的緩存數據寫入對應的原存儲單元或備份單元之后,還包括: 釋放所述三個緩存空間。
5.根據權利要求1所述的存儲數據的恢復方法,其特征在于,所述將所述存儲數據的兩備份數據分別寫入預先分配的兩個備份單元之前,還包括: 獲取所述存儲數據的長度和存儲格式,從存儲空間中分配出兩個與所述存儲數據的長度和存儲格式對應的備份單元。
6.根據權利要求5所述的存儲數據的恢復方法,其特征在于,所述原存儲單元、所述兩個備份單元三者的大小相同。
7.根據權利要求5所述的存儲數據的恢復方法,其特征在于,所述從存儲空間中分配出兩個與所述存儲數據的長度和存儲格式對應的備份單元之前,還包括: 確定存儲空間的可用空間大小大于2倍所述存儲數據的長度。
【文檔編號】G06F12/02GK104268035SQ201410530833
【公開日】2015年1月7日 申請日期:2014年10月10日 優先權日:2014年10月10日
【發明者】何俊宏 申請人:深圳雷柏科技股份有限公司