本發(fā)明涉及數(shù)據(jù)儲存技術(shù)領(lǐng)域,尤其是指一種Flash數(shù)據(jù)儲存方法。
背景技術(shù):
基于目前市場上智能穿戴產(chǎn)品的崛起,相關(guān)電子產(chǎn)品比如手環(huán)、耳機(jī)等,越來越多的會涉及到用戶的數(shù)據(jù)存儲,包括但不限于用戶的個人信息及傳感器的原始數(shù)據(jù)等。在這種背景下,flash的數(shù)據(jù)存儲設(shè)計(jì)方法就顯得很有研究價值。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對現(xiàn)有技術(shù)的問題提供一種有效迅速的讀取flash內(nèi)部的存儲數(shù)據(jù),降低flash讀取及擦除次數(shù),合理的利用整個存儲空間的Flash數(shù)據(jù)儲存方法。
為了解決上述技術(shù)問題,本發(fā)明采用如下技術(shù)方案:
本發(fā)明提供的一種Flash數(shù)據(jù)儲存方法,包括:
a.將Flash劃分為兩個分區(qū),分別為數(shù)據(jù)檢索區(qū)域和數(shù)據(jù)儲存區(qū)域,所述數(shù)據(jù)檢索區(qū)域和數(shù)據(jù)儲存區(qū)域都分別設(shè)置有若干個扇區(qū);
b.每隔一定時間,記錄一組固定長度的活動數(shù)據(jù)到數(shù)據(jù)儲存區(qū)域的扇區(qū)中,同時更新數(shù)據(jù)檢索區(qū)域的讀index和寫index,并將該數(shù)據(jù)儲存;
c.系統(tǒng)第一次啟動時,遍歷查找數(shù)據(jù)檢索區(qū)域獲取讀index和寫index;
d.判斷是否有新數(shù)據(jù)需寫入,若是,則進(jìn)行下一步,若否,繼續(xù)等待下一的新數(shù)據(jù)寫入請求,繼續(xù)進(jìn)行步驟d;
e.判斷待寫index是否為扇區(qū)的起始位置,若是,則進(jìn)行下一步;若否,則進(jìn)行步驟i;
f.判斷讀index是否在待寫index的扇區(qū)之內(nèi),若是,則進(jìn)行下一步,若否,則進(jìn)行步驟h;
g.修正讀index,指向讀index所在的下一個扇區(qū)起始;
h.擦除寫index待寫入扇區(qū);
i.寫入新數(shù)據(jù)到待寫入扇區(qū),修正寫index;
j.將讀index和寫index更新到數(shù)據(jù)檢索區(qū)域。
其中,所述步驟b具體為:每隔5分鐘,記錄一組固定長度為16字節(jié)的活動數(shù)據(jù)。
其中,步驟c的遍歷查找方式以二分法進(jìn)行遍歷查找:以數(shù)據(jù)檢索區(qū)域的二分之一為分隔,檢測分隔地址處的內(nèi)容,若為連續(xù)的0xFF,則表示數(shù)據(jù)在前半部分,可以從首地址到二分之一分隔處進(jìn)行遍歷,以數(shù)據(jù)檢索區(qū)域的數(shù)據(jù)單元長度為單位,查找到第一個連續(xù)為0xFF的值的位置為止;否則,遍歷后半部分。若能找到第一個連續(xù)為0xFF的值的位置,且該位置不是檢索區(qū)域的首地址,則表示該位置的前一個數(shù)據(jù)單元的數(shù)據(jù),即是后續(xù)數(shù)據(jù)存儲區(qū)域的讀index和寫index;否則,表示整個存儲數(shù)據(jù)為空。
其中,采用FIFO循環(huán)機(jī)制來儲存數(shù)據(jù),當(dāng)所述數(shù)據(jù)儲存區(qū)域的內(nèi)容寫滿時,進(jìn)行數(shù)據(jù)循環(huán)覆蓋,以最新的數(shù)據(jù)覆蓋最舊的數(shù)據(jù)。
其中,對數(shù)據(jù)儲存區(qū)域的數(shù)據(jù)添加表示數(shù)據(jù)生成時間先后順序的時間戳信息。
進(jìn)一步的,假設(shè)數(shù)據(jù)儲存區(qū)域總長度為L;
(1)當(dāng)讀index的數(shù)值大于寫index的數(shù)值時,整個數(shù)據(jù)空間長度為: 寫index的數(shù)值+ L-讀index的數(shù)值;
(2)當(dāng)讀index的數(shù)值小于或等于寫index的數(shù)值時,整個數(shù)據(jù)空間長度為: 寫index的數(shù)值-讀index的數(shù)值;
(3)當(dāng)寫index的數(shù)值大于或等于L時,表示寫index的位置已經(jīng)到達(dá)邊界,此時需要跳轉(zhuǎn)到數(shù)據(jù)儲存區(qū)域的起始地址。
(4)當(dāng)寫index的數(shù)值小于讀index的數(shù)值,但是新數(shù)據(jù)存入時,寫index的數(shù)值等于讀index的數(shù)值,此時表明數(shù)據(jù)儲存區(qū)域已滿。
本發(fā)明的有益效果:
本發(fā)明提供的一種Flash數(shù)據(jù)儲存方法,在電子產(chǎn)品開機(jī)使用時,能夠及時獲取用戶的配置信息及數(shù)據(jù)存儲情況;在數(shù)據(jù)存儲時,能夠立即跳轉(zhuǎn)到數(shù)據(jù)的寫存儲位置,降低電子產(chǎn)品的遍歷查詢flash時間,提高運(yùn)行速率。同時,因?yàn)椴捎昧搜h(huán)存儲機(jī)制,對整個扇區(qū)的讀寫訪問較均勻,提高了flash的運(yùn)行壽命。
附圖說明
圖1為本發(fā)明的一種Flash數(shù)據(jù)儲存方法的流程圖。
圖2為經(jīng)典方式遍歷查找的流程圖。
圖3為本發(fā)明的二分法遍歷查找的流程圖。
圖4為本發(fā)明的fifo循環(huán)儲存機(jī)制的流程圖。
具體實(shí)施方式
為了便于本領(lǐng)域技術(shù)人員的理解,下面結(jié)合實(shí)施例與附圖對本發(fā)明作進(jìn)一步的說明,實(shí)施方式提及的內(nèi)容并非對本發(fā)明的限定。以下結(jié)合附圖對本發(fā)明進(jìn)行詳細(xì)的描述。
本發(fā)明提供的一種Flash數(shù)據(jù)儲存方法,包括:
a.將Flash劃分為兩個分區(qū),分別為數(shù)據(jù)檢索區(qū)域和數(shù)據(jù)儲存區(qū)域,所述數(shù)據(jù)檢索區(qū)域和數(shù)據(jù)儲存區(qū)域都分別設(shè)置有若干個扇區(qū);
b.每隔一定時間,記錄一組固定長度的活動數(shù)據(jù)到數(shù)據(jù)儲存區(qū)域的扇區(qū)中,同時更新數(shù)據(jù)檢索區(qū)域的讀index和寫index,并將該數(shù)據(jù)儲存;
c.系統(tǒng)第一次啟動時,遍歷查找數(shù)據(jù)檢索區(qū)域獲取讀index和寫index;
d.判斷是否有新數(shù)據(jù)需寫入,若是,則進(jìn)行下一步,若否,則繼續(xù)等待下一次的新數(shù)據(jù)寫入請求,繼續(xù)進(jìn)行步驟d;
e.判斷待寫index是否為扇區(qū)的起始位置,若是,則進(jìn)行下一步;若否,則進(jìn)行步驟i;
f.判斷讀index是否在待寫index的扇區(qū)之內(nèi),若是,則進(jìn)行下一步,若否,則進(jìn)行步驟h;
g.修正讀index,指向讀index所在的下一個扇區(qū)起始位置;
h.擦除寫index指向的待寫入扇區(qū);
i.寫入新數(shù)據(jù)到待寫入扇區(qū),修正寫index;
j.將讀index和寫index更新到數(shù)據(jù)檢索區(qū)域。
具體地,數(shù)據(jù)檢索區(qū)域每次索引數(shù)據(jù)時,會針對該儲存數(shù)據(jù)的位置進(jìn)行寫操作,以記錄數(shù)據(jù)儲存區(qū)域的讀、寫位置,即記錄實(shí)際數(shù)據(jù)區(qū)域的讀寫位置,讀index、寫index即分別為讀位置、寫位置;
具體地,當(dāng)需要存儲數(shù)據(jù)時,按照用戶自定義的固定數(shù)據(jù)長度,將數(shù)據(jù)存放在數(shù)據(jù)存儲區(qū)域,同時更新數(shù)據(jù)檢索區(qū)域的讀index、寫index,并將該數(shù)據(jù)進(jìn)行存儲。
具體地,數(shù)據(jù)儲存區(qū)域每次進(jìn)行數(shù)據(jù)讀、寫時,會依據(jù)數(shù)據(jù)檢索區(qū)域的讀index和寫index來保存數(shù)據(jù)。
具體地,F(xiàn)lash在數(shù)據(jù)擦除或初始狀態(tài)時,其內(nèi)部對應(yīng)的字節(jié)的值為0xFF;通過遍歷查找的方式,當(dāng)查找到第一個連續(xù)為0xFF的值的位置時,可以判斷為讀、寫的位置。
具體地,在有數(shù)據(jù)存儲時,啟動Flash,能夠通過數(shù)據(jù)檢索區(qū)域的讀index、寫index,成功讀出上一次讀、寫數(shù)據(jù)儲存區(qū)域的位置,以進(jìn)行下一次的訪問。
具體地,如果數(shù)據(jù)檢索區(qū)域的內(nèi)容寫滿,則擦除整個數(shù)據(jù)檢索區(qū)域,從頭開始繼續(xù)寫入。
具體地,無論是電子產(chǎn)品控制器單片機(jī)內(nèi)部的flash存儲單元,還是外擴(kuò)的flash存儲芯片,如何有效迅速的讀取flash內(nèi)部的存儲數(shù)據(jù),降低flash讀取及擦除次數(shù),合理的利用整個存儲空間,就顯得非常有必要。具體地,步驟b每隔一段時間記錄一段數(shù)據(jù),本發(fā)明可以用于智能計(jì)步手環(huán)、智能手表、智能心率手環(huán)等可記錄人體生命活動特征的智能電子產(chǎn)品。
本發(fā)明提供的一種Flash數(shù)據(jù)儲存方法,所述步驟b具體為:每隔5分鐘,記錄一組固定長度為16字節(jié)的活動數(shù)據(jù)。
具體地,如圖2,是一種經(jīng)典的遍歷查找方式。遍歷查找是以數(shù)據(jù)檢索區(qū)域的首地址開始讀取,以數(shù)據(jù)檢索區(qū)域的數(shù)據(jù)單元長度為單位,向后遍歷,直到數(shù)據(jù)檢索區(qū)域結(jié)束或找到第一個連續(xù)為0xFF的值的位置為止;若能找到第一個連續(xù)為0xFF的值的位置,且該位置不是檢索區(qū)域的首地址,則表示該位置的前一個數(shù)據(jù)單元的數(shù)據(jù),即是后續(xù)數(shù)據(jù)存儲區(qū)域的讀index和寫index;否則,表示整個存儲數(shù)據(jù)為空。
本發(fā)明提供的一種Flash數(shù)據(jù)儲存方法,如圖3,步驟c的遍歷查找方式以二分法進(jìn)行遍歷查找:以數(shù)據(jù)檢索區(qū)域的二分之一為分隔,檢測分隔地址處的內(nèi)容,若為連續(xù)的0xFF,則表示數(shù)據(jù)在前半部分,可以從首地址到二分之一分隔處進(jìn)行遍歷,以數(shù)據(jù)檢索區(qū)域的數(shù)據(jù)單元長度為單位,查找到第一個連續(xù)為0xFF的值的位置為止;否則,遍歷后半部分。若能找到第一個連續(xù)為0xFF的值的位置,且該位置不是檢索區(qū)域的首地址,則表示該位置的前一個數(shù)據(jù)單元的數(shù)據(jù),即是后續(xù)數(shù)據(jù)存儲區(qū)域的讀index和寫index;否則,表示整個存儲數(shù)據(jù)為空。
具體地,提供一種有效數(shù)據(jù)的長度判斷,假設(shè)數(shù)據(jù)儲存區(qū)域總長度為L;
(1)當(dāng)讀index的數(shù)值大于寫index的數(shù)值時,整個數(shù)據(jù)空間長度為: 寫index的數(shù)值+ L-讀index的數(shù)值;
(2)當(dāng)讀index的數(shù)值小于或等于寫index的數(shù)值時,整個數(shù)據(jù)空間長度為: 寫index的數(shù)值-讀index的數(shù)值;
(3)當(dāng)寫index的數(shù)值大于或等于L時,表示寫index的位置已經(jīng)到達(dá)邊界,此時需要跳轉(zhuǎn)到數(shù)據(jù)儲存區(qū)域的起始地址。
(4)當(dāng)寫index的數(shù)值小于讀index的數(shù)值,但是新數(shù)據(jù)存入時,寫index的數(shù)值等于讀index的數(shù)值,此時表明數(shù)據(jù)儲存區(qū)域已滿;當(dāng)新數(shù)據(jù)到來時,需要及時擦除讀index指向的扇區(qū),修正讀index到下一個扇區(qū)位置,以實(shí)現(xiàn)新數(shù)據(jù)始終覆蓋最舊的數(shù)據(jù)的效果。
具體地,F(xiàn)lash以扇區(qū)為基本的擦除單位,當(dāng)寫入新數(shù)據(jù)到扇區(qū)時,應(yīng)當(dāng)擦除整個扇區(qū)再寫,以保證數(shù)據(jù)寫入成功。
本發(fā)明提供的一種Flash數(shù)據(jù)儲存方法,采用FIFO循環(huán)機(jī)制來儲存數(shù)據(jù),當(dāng)所述數(shù)據(jù)儲存區(qū)域的內(nèi)容寫滿時,進(jìn)行數(shù)據(jù)循環(huán)覆蓋,以最新的數(shù)據(jù)覆蓋最舊的數(shù)據(jù)。具體地,如圖4,本發(fā)明的數(shù)據(jù)儲存區(qū)域的內(nèi)容寫滿時,進(jìn)行數(shù)據(jù)循環(huán)覆蓋,以最新的數(shù)據(jù)覆蓋最舊的數(shù)據(jù)采用fifo循環(huán)儲存機(jī)制實(shí)現(xiàn),所述fifo循環(huán)儲存機(jī)制即先進(jìn)先出機(jī)制,能夠通過數(shù)據(jù)同步,查看到最新數(shù)據(jù)更新代替最舊的數(shù)據(jù)。
本發(fā)明提供的一種Flash數(shù)據(jù)儲存方法,對數(shù)據(jù)儲存區(qū)域的數(shù)據(jù)添加表示數(shù)據(jù)生成時間先后順序的時間戳信息。具體地,當(dāng)對數(shù)據(jù)儲存到數(shù)據(jù)儲存區(qū)域時,就開始計(jì)時,對數(shù)據(jù)進(jìn)行時間標(biāo)記,當(dāng)與終端進(jìn)行通信時,能夠依據(jù)時間戳對數(shù)據(jù)進(jìn)行展示,方便直觀。
本發(fā)明提供的一種Flash數(shù)據(jù)儲存方法,在電子產(chǎn)品開機(jī)使用時,能夠及時獲取用戶的配置信息及數(shù)據(jù)存儲情況;在數(shù)據(jù)存儲時,能夠立即跳轉(zhuǎn)到數(shù)據(jù)的寫存儲位置,降低電子產(chǎn)品的遍歷查詢flash時間,提高運(yùn)行速率。同時,因?yàn)椴捎昧搜h(huán)存儲機(jī)制,對整個扇區(qū)的讀寫訪問較均勻,提高了flash的運(yùn)行壽命。
以上所述,僅是本發(fā)明較佳實(shí)施例而已,并非對本發(fā)明作任何形式上的限制,雖然本發(fā)明以較佳實(shí)施例公開如上,然而并非用以限定本發(fā)明,任何熟悉本專業(yè)的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍內(nèi),當(dāng)利用上述揭示的技術(shù)內(nèi)容作出些許變更或修飾為等同變化的等效實(shí)施例,但凡是未脫離本發(fā)明技術(shù)方案內(nèi)容,依據(jù)本發(fā)明技術(shù)是指對以上實(shí)施例所作的任何簡單修改、等同變化與修飾,均屬于本發(fā)明技術(shù)方案的范圍內(nèi)。