亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種提高FLASH參數(shù)保存次數(shù)的實現(xiàn)方法與流程

文檔序號:11707316閱讀:662來源:國知局
一種提高FLASH參數(shù)保存次數(shù)的實現(xiàn)方法與流程

本發(fā)明屬于電子技術(shù)領(lǐng)域,具體涉及一種提高flash參數(shù)保存次數(shù)的實現(xiàn)方法。



背景技術(shù):

flash存儲器(可編程只讀存儲器,以下簡稱flash)是intel公司于1988年推出的一種新型半導(dǎo)體存儲器,具有非揮發(fā)存儲特性,簡稱閃存,該類只讀存儲器具有集成度高、讀取速度快、單一供電、再編程次數(shù)多等顯著優(yōu)點,flash存儲器作為非易失數(shù)據(jù)存儲設(shè)備,被廣泛地應(yīng)用于嵌入式系統(tǒng)中。單片機(jī)片內(nèi)的flash可以在線編程,也可以存儲程序運行時的數(shù)據(jù)。

由于flash在寫入時,只能把其位由1變?yōu)?,每位寫之前必須先變?yōu)?,也即是進(jìn)行擦除;且flash擦除由最小區(qū)域限制,即一次至多要擦除一個扇區(qū),如fm28335的flash容量為256k,分8個扇區(qū),每次至多擦除32k;因此,基于這些特點,flash芯片在使用時,需要進(jìn)行多次擦除,但是,flash芯片的壽命是由擦除次數(shù)限制,如fm28335可承受的擦除次數(shù)為10萬次,那么,當(dāng)擦寫次數(shù)過多時,會導(dǎo)致整個flash芯片損壞掉,進(jìn)而降低flash芯片的使用壽命。

隨著電子技術(shù)的發(fā)展,dsp本身自帶的flash容量也越做越大,除保存程序代碼外往往還能剩很大空間,為了避免在flash存儲器并未存滿,仍然進(jìn)行一次擦除,因擦寫次數(shù)過多而導(dǎo)致falsh芯片損壞,壽命降低的問題,急需一種提高flash芯片的使用壽命的方法。



技術(shù)實現(xiàn)要素:

本發(fā)明的目的在于提供一種提高flash參數(shù)保存次數(shù)的實現(xiàn)方法,用以解決現(xiàn)有flash因并未存滿而仍然進(jìn)行多次擦寫而導(dǎo)致flash芯片損壞的問題。

為實現(xiàn)上述目的,本發(fā)明采用一種提高flash參數(shù)保存次數(shù)的實現(xiàn)方法,包括以下步驟:

(1)在flash保存區(qū)劃分出至少2個虛擬分區(qū);

(2)通過查看flash保存區(qū)起始地址的寄存器中的數(shù)值,判斷虛擬分區(qū)是否已寫過;若數(shù)值為0xffff,則虛擬分區(qū)未寫過,否則已寫過;

(3)若虛擬分區(qū)未寫過,則將數(shù)值為0xffff寫進(jìn)以flash保存區(qū)起始地址為地址的寄存器中;

(4)若虛擬分區(qū)已寫過,則判斷虛擬分區(qū)是否已寫完;若所有虛擬分區(qū)已寫完畢,則一次性擦除整個flash保存區(qū),并將數(shù)值為0xffff寫進(jìn)以flash保存區(qū)起始地址為地址的寄存器中;若虛擬分區(qū)未寫完,則繼續(xù)寫入?yún)?shù),并將參數(shù)按順序地保存在與最近一次保存虛擬分區(qū)相連的一個虛擬分區(qū)內(nèi)。

所述步驟(4)中:比較當(dāng)前參數(shù)起始地址與最后一個虛擬分區(qū)的起始地址,若當(dāng)前參數(shù)起始地址大于等于最后一個虛擬分區(qū)的起始地址,則flash虛擬區(qū)已寫完畢,否則虛擬分區(qū)還未寫完。

所述的當(dāng)前參數(shù)起始地址和最后一個虛擬分區(qū)的起始地址分別為:

pst=fps

pfp=fps+floor((fps-fpn)/spl)

其中fps指flash的起始地址,初始設(shè)定為fps=0x*******,fpn指flash尾或結(jié)束地址,初始設(shè)定為fpn=0x******,spl指所要保存的參數(shù)個數(shù),floor指取小于或等于給定實數(shù)的最大整數(shù)。

在flash中的零虛擬分區(qū)建立索引區(qū),所述索引區(qū)包括索引地址。

當(dāng)虛擬分區(qū)未寫過或已寫完且虛擬分區(qū)中的參數(shù)已擦拭完畢,則執(zhí)行

pst=fps+spl

indexl=0

indexr=0;

并把0xfffe寫進(jìn)以flash起始地址為地址的寄存器中,然后把參數(shù)寫入以當(dāng)前參數(shù)起始地址為首地址的寄存器里面;

其中,pst為當(dāng)前參數(shù)起始地址,fps指flash起始地址,spl指所要保存的參數(shù)個數(shù),indexl指行索引,indexr指列索引。

若虛擬分區(qū)還未寫完,則判斷列索引的指向,若列索引指向sml-1位,執(zhí)行

indexr=0

indexl++

tempt=0xfffe;

則計算虛擬分區(qū)首地址,執(zhí)行

pst=fps+(indexl*sml+indexr+1)*spl

把tempt值寫進(jìn)地址為fps+indexl的寄存器,然后把參數(shù)寫入以當(dāng)前參數(shù)起始地址為首地址的寄存器里面;

若列索引未指向sml-1位,執(zhí)行

indexr++

tempt=1

tempt=*(fps+indexl)-(tempt<<indexr);

則計算虛擬分區(qū)首地址,執(zhí)行

pst=fps+(indexl*sml+indexr+1)*spl

把tempt值寫進(jìn)地址為fps+indexl的寄存器,然后把參數(shù)寫入以當(dāng)前參數(shù)起始地址為首地址的寄存器里面;

其中,indexl指行索引,indexr指列索引,tempt指無標(biāo)識位的16位進(jìn)制數(shù),*指取內(nèi)容,<<indexr指左移列索引位,pst為當(dāng)前參數(shù)起始地址,fps指flash的起始地址,初始設(shè)定為fps=0x*******,sml指單個寄存器所包含的位數(shù),spl指所要保存的參數(shù)個數(shù),fps+indexl指從flash的起始地址向下數(shù)indexl個的地址。

本發(fā)明提出一種提高flash參數(shù)保存次數(shù)的實現(xiàn)方法,其不需要任何硬件變更,參數(shù)保存次數(shù)由原來的flash的可擦寫次數(shù)提高到虛擬分區(qū)的個數(shù)乘以flash可擦寫次數(shù),在參數(shù)保存次數(shù)不變的前提下,大大的延長了flash使用壽命。

本發(fā)明還通過零虛擬分區(qū)的索引地址可以快速的查找到參數(shù)保存的寄存器首地址,提高了設(shè)備運行速率,同時,便于在虛擬分區(qū)未寫完時,繼續(xù)寫入。

附圖說明

圖1是本發(fā)明中flash參數(shù)保存次數(shù)的實現(xiàn)方法示意圖;

圖2是本發(fā)明中flash參數(shù)保存次數(shù)的實現(xiàn)方法流程圖。

具體實施方式

下面將結(jié)合附圖及實施例對本發(fā)明作進(jìn)一步說明。

本發(fā)明提出了一種提高flash參數(shù)保存次數(shù)的實現(xiàn)方法,包括如下步驟:

(1)在flash保存區(qū)劃分出至少2個虛擬分區(qū);

(2)通過查看flash保存區(qū)起始地址的寄存器中的數(shù)值,判斷虛擬分區(qū)是否已寫過;若數(shù)值為0xffff,則虛擬分區(qū)未寫過,否則已寫過;

(3)若虛擬分區(qū)未寫過,則將數(shù)值為0xffff寫進(jìn)以flash保存區(qū)起始地址為地址的寄存器中;

(4)若虛擬分區(qū)已寫過,則判斷虛擬分區(qū)是否已寫完;若所有虛擬分區(qū)已寫完畢,則一次性擦除整個flash保存區(qū),并將數(shù)值為0xffff寫進(jìn)以flash保存區(qū)起始地址為地址的寄存器中;若虛擬分區(qū)未寫完,則繼續(xù)寫入?yún)?shù),并將參數(shù)按順序地保存在與最近一次保存虛擬分區(qū)相連的一個虛擬分區(qū)內(nèi)。

本發(fā)明在保存參數(shù)次數(shù)不變的前提下,可以有效的延長flash使用壽命。

本發(fā)明中包括初始參數(shù)的設(shè)定、flash初次寫的識別、虛擬分區(qū)已寫完的識別、索引地址的計算、虛擬分區(qū)首地址的計算。

首先,初始參數(shù)的設(shè)定為:

fps=0x*******

fpn=0x*******

sml=0x**

spl=0x**

pst=fps

pfp=fps+floor((fps-fpn)/spl)

其中fps指flash起始(或首)地址,fpn指flash結(jié)束(或尾)地址,sml指單個寄存器所包含的位數(shù)(默認(rèn)為16位),spl指所要保存的參數(shù)個數(shù),floor指取小于或等于給定實數(shù)的最大整數(shù),pfp指所保存參數(shù)最后一個虛擬分區(qū)起始地址。

其次,通過查看地址為flash起始地址fps的寄存器中的數(shù)值,若此數(shù)值為

0xffff,則flash寄存器未寫過,若此數(shù)值不為0xffff,則flash寄存器已寫過;同時,通過對比當(dāng)前參數(shù)起始地址pst與最后一個虛擬分區(qū)的起始地址pfp,若

pst>=pfp,則flash虛擬區(qū)已寫完畢,擦除flash參數(shù)所在的扇區(qū),否則虛擬分區(qū)還未寫完。

當(dāng)flash未寫過或flash虛擬分區(qū)已寫完且參數(shù)所在的扇區(qū)已擦拭完畢,并令

pst=fps+spl

indexl=0

indexr=0

把0xfffe寫進(jìn)以flash起始地址fps為地址的寄存器中,然后就可以將參數(shù)數(shù)據(jù)寫入以當(dāng)前參數(shù)起始地址pst為首地址的寄存器里面;

其中,pst為當(dāng)前參數(shù)起始地址,fps指flash起始地址,spl指所要保存的參數(shù)個數(shù),indexl指行索引,indexr指列索引。

若flash虛擬分區(qū)未寫完,則判斷列索引的指向。若列索引指向sml-1位,執(zhí)行

indexr=0

indexl++

tempt=0xfffe

若列索引未指向sml-1位,執(zhí)行

indexr++

tempt=1

tempt=*(fps+indexl)-(tempt<<indexr)

其中,indexl指行索引,indexr指列索引,tempt指無標(biāo)識位的16位進(jìn)制數(shù),*指取內(nèi)容,<<indexr指左移indexr位;

最后,計算虛擬分區(qū)首地址,執(zhí)行

pst=fps+(indexl*sml+indexr+1)*spl

并把tempt值寫進(jìn)地址為fps+indexl的寄存器中,然后將把參數(shù)寫入以pst為首地址的寄存器里面。其中,pst為當(dāng)前參數(shù)起始地址,fps指flash的起始地址,初始設(shè)定為fps=0x*******,sml指單個寄存器所包含的位數(shù),spl指所要保存的參數(shù)個數(shù),fps+indexl指從flash的起始地址向下數(shù)indexl個的地址。

下面對本發(fā)明的工作過程作詳細(xì)說明,所述工作過程以本發(fā)明技術(shù)方案為前提進(jìn)行實施,給出了具體的實施方式和操作過程。

如圖1所示,本方法根據(jù)參數(shù)長度大小,自動在flash保存區(qū)劃分出n+1個虛擬分區(qū),包括索引區(qū)和數(shù)據(jù)保存區(qū),其中零虛擬分區(qū)即為索引區(qū),數(shù)據(jù)保存區(qū)依次分為第一虛擬分區(qū)、第二虛擬分區(qū)…第n虛擬分區(qū)。

本方法中每次參數(shù)按順序地保存在與最近一次保存虛擬分區(qū)相連的一個虛擬分區(qū)內(nèi),直到所有虛擬分區(qū)用完,一次性的擦除整個flash保存區(qū),重新從第一虛擬分區(qū)開始順序地往虛擬分區(qū)中保存參數(shù)。另外,本方法在零虛擬分區(qū)建立索引區(qū),通過索引區(qū)中的索引地址能夠快速的查找到當(dāng)前參數(shù)要保存的寄存器的起始地址。

具體的實現(xiàn)過程,如圖2所示,包括初始參數(shù)設(shè)定、flash初次寫的識別、虛擬分區(qū)已寫完的識別、索引地址的計算、虛擬分區(qū)首地址的計算等10個模塊。

在初始參數(shù)設(shè)定模塊1中,不但要設(shè)定flash起始(或首)地址fps,flash尾(或結(jié)束)地址fpn,單個寄存器所包含的位數(shù)(默認(rèn)為16位)sml,所要保存的參數(shù)個數(shù)spl,而且要通過以下公式計算出所保存參數(shù)最后一個虛擬分區(qū)起始地址pfp

pfp=fps+floor((fps-fpn)/spl)

在以上完成后進(jìn)入模塊2。

通過查看地址為fps的寄存器中的數(shù)值完成flash初次寫識別模塊2,若此數(shù)值為0xffff,則flash寄存器未寫過,若此數(shù)值不為0xffff,則flash寄存器已寫過。

若flash已寫過,則進(jìn)入虛擬分區(qū)已寫完的識別模塊3中。通過對比當(dāng)前參數(shù)起始地址pst與最后一個虛擬分區(qū)的起始地址pfp,若大于等于,則flash參數(shù)區(qū)已寫完畢,并進(jìn)入模塊4擦除flash參數(shù)所在的扇區(qū),否則虛擬分區(qū)還未寫完。

若flash寄存器未寫過或模塊4已執(zhí)行完成,則進(jìn)入模塊5。令

pst=fps+spl

indexl=0

indexr=0

并把0xfffe寫進(jìn)以fps為地址的寄存器中,也即進(jìn)行初始化后,把零虛擬分區(qū)(索引區(qū))跳過,寫數(shù)據(jù)時會自動在第一個虛擬分區(qū)寫入。

若模塊3判斷虛擬分區(qū)未寫完,則進(jìn)入模塊6判斷列索引的指向。若列索引指向sml-1位,則進(jìn)入模塊8,執(zhí)行

indexr=0

indexl++

tempt=0xfffe

若列索引未指向sml-1位,則進(jìn)入模塊7,執(zhí)行

indexr++

tempt=1

tempt=*(fps+indexl)-(tempt<<indexr)

其中tempt指無標(biāo)識位的16位進(jìn)制數(shù),*指取內(nèi)容,<<indexr指左移indexr位。

若執(zhí)行完模塊7或模塊8,則進(jìn)入模塊9計算虛擬分區(qū)首地址,執(zhí)行

pst=fps+(indexl*sml+indexr+1)*spl

若模塊5或模塊9執(zhí)行完畢,則進(jìn)入模塊10,把參數(shù)寫進(jìn)以pst為首地址的寄存器里面。

若模塊10執(zhí)行完畢,則進(jìn)入下一個周期,重新從模塊2開始執(zhí)行。

本發(fā)明通過增加參數(shù)可寫次數(shù)達(dá)到延長flash使用壽命的目的,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)明白,在不脫離本發(fā)明范圍的情況下,還可以對本發(fā)明進(jìn)行各種變換及等同替代。因此,本發(fā)明不局限于所公開的具體實施例和示意圖,而應(yīng)當(dāng)包括落入本發(fā)明權(quán)利要求范圍內(nèi)的全部實施方式。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1