完成指令。
[0102]步驟1045:在當(dāng)所述存儲(chǔ)區(qū)域內(nèi)寫入數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)相同時(shí)觸發(fā)所述待寫入Flash的數(shù)據(jù)寫完成指令時(shí),記錄所述存儲(chǔ)區(qū)域與所述待寫入Flash的數(shù)據(jù)之間的對(duì)應(yīng)關(guān)系,并結(jié)束寫操作。
[0103]以便于在讀取所述待寫入Flash的數(shù)據(jù)時(shí),確定讀取所述待寫入Flash的數(shù)據(jù)的存儲(chǔ)區(qū)域。
[0104]步驟1046:繼續(xù)選擇下一個(gè)存儲(chǔ)區(qū)域,跳轉(zhuǎn)執(zhí)行步驟1041。
[0105]經(jīng)過步驟1041?步驟1046的操作,直至在確定選擇的所述下一個(gè)存儲(chǔ)區(qū)域內(nèi)沒有存儲(chǔ)數(shù)據(jù)時(shí),將所述待寫入Flash的數(shù)據(jù)直接寫入選擇的所述下一個(gè)存儲(chǔ)區(qū)域,完成待寫入數(shù)據(jù)的寫操作。
[0106]需要說明的是,所述Flash內(nèi)部的存儲(chǔ)區(qū)域?qū)儆谝巡脸鎯?chǔ)區(qū)域,處于可被寫入數(shù)據(jù)的狀態(tài)。
[0107]通過本發(fā)明實(shí)施例一的方案,接收光模塊發(fā)送的寫數(shù)據(jù)指令,其中,所述寫數(shù)據(jù)指令中包含了待寫入閃存Flash的數(shù)據(jù);根據(jù)所述寫數(shù)據(jù)指令中包含了待寫入Flash的數(shù)據(jù)的邏輯地址,確定所述待寫入Flash的數(shù)據(jù)存儲(chǔ)在所述Flash內(nèi)部的物理地址;根據(jù)設(shè)定的物理地址與至少兩個(gè)存儲(chǔ)區(qū)域之間的對(duì)應(yīng)關(guān)系,得到確定的所述物理地址對(duì)應(yīng)的至少兩個(gè)存儲(chǔ)區(qū)域;并從得到的所述至少兩個(gè)存儲(chǔ)區(qū)域中選擇一個(gè)存儲(chǔ)區(qū)域,在所述選擇的存儲(chǔ)區(qū)域內(nèi)沒有存儲(chǔ)數(shù)據(jù)時(shí),將所述待寫入Flash的數(shù)據(jù)直接寫入所述選擇的存儲(chǔ)區(qū)域,這樣,光模塊在執(zhí)行寫操作時(shí),由于Flash內(nèi)部為同一物理地址分配了多個(gè)存儲(chǔ)區(qū)域,當(dāng)多個(gè)待寫入Flash數(shù)據(jù)的邏輯地址對(duì)應(yīng)同一個(gè)物理地址時(shí),可以不執(zhí)行擦除操作,而是選擇該物理地址對(duì)應(yīng)的沒有存儲(chǔ)數(shù)據(jù)的存儲(chǔ)區(qū)域進(jìn)行存儲(chǔ),節(jié)省了寫數(shù)據(jù)過程中擦除Flash的時(shí)間,有效地縮短了光模塊寫數(shù)據(jù)的周期,提高了寫數(shù)據(jù)的效率,并且由于減少了 Flash內(nèi)部的擦除次數(shù),避免了頻繁擦除Flash操作造成Flash壽命縮短的問題,有效提升了 Flash的使用周期。
[0108]實(shí)施例二:
[0109]如圖2所示,為本發(fā)明實(shí)施例二提供的一種寫數(shù)據(jù)的設(shè)備的結(jié)構(gòu)示意圖。本發(fā)明實(shí)施例二所述的設(shè)備具備執(zhí)行本發(fā)明實(shí)施例一的功能,所述設(shè)備可以采用通用計(jì)算機(jī)系統(tǒng)結(jié)構(gòu),計(jì)算機(jī)系統(tǒng)可具體是基于處理器的計(jì)算機(jī)。所述處理實(shí)體包括至少一個(gè)處理器21,通信總線22,存儲(chǔ)器23以及至少一個(gè)通信接口 24。
[0110]處理器21可以是一個(gè)通用中央處理器(CPU),微處理器,特定應(yīng)用集成電路(applicat1n-specific integrated circuit, ASIC),或一個(gè)或多個(gè)用于控制本發(fā)明方案程序執(zhí)行的集成電路。
[0111]其中,所述通信總線22可包括一通路,在上述組件之間傳送信息。所述通信接口24,使用任何收發(fā)器一類的裝置,用于與其他設(shè)備或通信網(wǎng)絡(luò)通信,如以太網(wǎng),無線接入網(wǎng)(RAN),無線局域網(wǎng)(Wireless Local Area Networks, WLAN)等。
[0112]計(jì)算機(jī)系統(tǒng)包括一個(gè)或多個(gè)存儲(chǔ)器23,可以是只讀存儲(chǔ)器(read-only memory,ROM)或可存儲(chǔ)靜態(tài)信息和指令的其他類型的靜態(tài)存儲(chǔ)設(shè)備,隨機(jī)存取存儲(chǔ)器(randomaccess memory, RAM)或者可存儲(chǔ)信息和指令的其他類型的動(dòng)態(tài)存儲(chǔ)設(shè)備,也可以是電可擦可編程只讀存儲(chǔ)器(Electrically Erasable Programmable Read-Only Memory,EEPR0M)、只讀光盤(Compact Disc Read-Only Memory, CD-ROM)或其他光盤存儲(chǔ)、光碟存儲(chǔ)(包括壓縮光碟、激光碟、光碟、數(shù)字通用光碟、藍(lán)光光碟等)、磁盤存儲(chǔ)介質(zhì)或者其他磁存儲(chǔ)設(shè)備、或者能夠用于攜帶或存儲(chǔ)具有指令或數(shù)據(jù)結(jié)構(gòu)形式的期望的程序代碼并能夠由計(jì)算機(jī)存取的任何其他介質(zhì),但不限于此。這些存儲(chǔ)器通過總線與處理器相連接。
[0113]其中,所述存儲(chǔ)器23用于存儲(chǔ)執(zhí)行本發(fā)明方案寫數(shù)據(jù)的應(yīng)用程序代碼,執(zhí)行本發(fā)明方案的應(yīng)用程序代碼保存在存儲(chǔ)器中,并由處理器21來控制執(zhí)行。所述處理器21用于執(zhí)行所述存儲(chǔ)器23中存儲(chǔ)的應(yīng)用程序。
[0114]在一種可能的實(shí)施方式中,當(dāng)上述應(yīng)用程序被所述處理器21執(zhí)行時(shí),實(shí)現(xiàn)如下功倉泛:
[0115]接收光模塊發(fā)送的寫數(shù)據(jù)指令,其中,所述寫數(shù)據(jù)指令中包含了待寫入閃存Flash的數(shù)據(jù);
[0116]根據(jù)所述寫數(shù)據(jù)指令中包含了待寫入Flash的數(shù)據(jù)的邏輯地址,確定所述待寫入Flash的數(shù)據(jù)存儲(chǔ)在所述Flash內(nèi)部的物理地址;
[0117]根據(jù)設(shè)定的物理地址與至少兩個(gè)存儲(chǔ)區(qū)域之間的對(duì)應(yīng)關(guān)系,得到確定的所述物理地址對(duì)應(yīng)的至少兩個(gè)存儲(chǔ)區(qū)域;并
[0118]從得到的所述至少兩個(gè)存儲(chǔ)區(qū)域中選擇一個(gè)存儲(chǔ)區(qū)域,在所述選擇的存儲(chǔ)區(qū)域內(nèi)沒有存儲(chǔ)數(shù)據(jù)時(shí),將所述待寫入Flash的數(shù)據(jù)直接寫入所述選擇的存儲(chǔ)區(qū)域。
[0119]在一種可能的實(shí)施方式中,所述處理器21,還用于執(zhí)行:
[0120]確定物理地址與至少兩個(gè)存儲(chǔ)區(qū)域之間的對(duì)應(yīng)關(guān)系,具體用于:
[0121]預(yù)先將Flash內(nèi)部的存儲(chǔ)區(qū)域劃分成N個(gè)子存儲(chǔ)區(qū)域,其中,N為自然數(shù);
[0122]從N份存儲(chǔ)區(qū)域中選擇至少兩個(gè)子存儲(chǔ)區(qū)域作為一個(gè)物理地址對(duì)應(yīng)的存儲(chǔ)區(qū)域,并建立所述物理地址與所述至少兩個(gè)子存儲(chǔ)區(qū)域之間的對(duì)應(yīng)關(guān)系,其中,不同物理地址對(duì)應(yīng)的子存儲(chǔ)區(qū)域不同。
[0123]在一種可能的實(shí)施方式中,所述處理器21,具體用于執(zhí)行:
[0124]將Flash內(nèi)部的存儲(chǔ)區(qū)域平均劃分成N個(gè)子存儲(chǔ)區(qū)域。
[0125]在一種可能的實(shí)施方式中,所述處理器21,具體用于執(zhí)行:
[0126]從得到的所述至少兩個(gè)存儲(chǔ)區(qū)域中選擇一個(gè)存儲(chǔ)區(qū)域,并判斷所述選擇的存儲(chǔ)區(qū)域內(nèi)是否已存儲(chǔ)數(shù)據(jù);
[0127]若所述選擇的存儲(chǔ)區(qū)域內(nèi)沒有存儲(chǔ)數(shù)據(jù)時(shí),將所述待寫入Flash的數(shù)據(jù)直接寫入所述選擇的存儲(chǔ)區(qū)域。
[0128]在一種可能的實(shí)施方式中,所述處理器21,還用于執(zhí)行:
[0129]若所述選擇的存儲(chǔ)區(qū)域內(nèi)已有存儲(chǔ)數(shù)據(jù)時(shí),將所述存儲(chǔ)區(qū)域內(nèi)的存儲(chǔ)數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)進(jìn)行比較;
[0130]當(dāng)所述存儲(chǔ)區(qū)域內(nèi)的存儲(chǔ)數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)相同時(shí),觸發(fā)所述待寫入Flash的數(shù)據(jù)寫完成指令;
[0131]當(dāng)所述存儲(chǔ)區(qū)域內(nèi)寫入數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)不相同時(shí),繼續(xù)選擇下一個(gè)存儲(chǔ)區(qū)域,直至在確定選擇的所述下一個(gè)存儲(chǔ)區(qū)域內(nèi)沒有存儲(chǔ)數(shù)據(jù)時(shí),將所述待寫入Flash的數(shù)據(jù)直接寫入選擇的所述下一個(gè)存儲(chǔ)區(qū)域。
[0132]在一種可能的實(shí)施方式中,所述處理器21,還用于執(zhí)行:
[0133]在當(dāng)所述存儲(chǔ)區(qū)域內(nèi)寫入數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)相同時(shí)觸發(fā)所述待寫入Flash的數(shù)據(jù)寫完成指令時(shí),記錄所述存儲(chǔ)區(qū)域與所述待寫入Flash的數(shù)據(jù)之間的對(duì)應(yīng)關(guān)系,以便于在讀取所述待寫入Flash的數(shù)據(jù)時(shí),確定讀取所述待寫入Flash的數(shù)據(jù)的存儲(chǔ)區(qū)域。
[0134]在一種可能的實(shí)施方式中,所述Flash內(nèi)部的存儲(chǔ)區(qū)域?qū)儆谝巡脸鎯?chǔ)區(qū)域,處于可被寫入數(shù)據(jù)的狀態(tài)。
[0135]本實(shí)施例中,應(yīng)用程序被處理器執(zhí)行時(shí),本發(fā)明實(shí)例所述設(shè)備的處理,以及與其他網(wǎng)元之間的交互方法可以參考上述方法實(shí)施例。這里不再詳細(xì)描述。
[0136]本實(shí)施例提供的設(shè)備,光模塊在執(zhí)行寫操作時(shí),由于Flash內(nèi)部為同一物理地址分配了多個(gè)存儲(chǔ)區(qū)域,當(dāng)多個(gè)待寫入Flash數(shù)據(jù)的邏輯地址對(duì)應(yīng)同一個(gè)物理地址時(shí),可以不執(zhí)行擦除操作,而是選擇該物理地址對(duì)應(yīng)的沒有存儲(chǔ)數(shù)據(jù)的存儲(chǔ)區(qū)域進(jìn)行存儲(chǔ),節(jié)省了寫數(shù)據(jù)過程中擦除Flash的時(shí)間,有效地縮短了光模塊寫數(shù)據(jù)的周期,提高了寫數(shù)據(jù)的效率,并且由于減少了 Flash內(nèi)部的擦除次數(shù),避免了頻繁擦除Flash操作造成Flash壽命縮短的問題,有效提升了 Flash的使用周期。
[0137]實(shí)施例三:
[0138]如圖3所示,為本發(fā)明實(shí)施例三提供的一種寫數(shù)據(jù)的設(shè)備的結(jié)構(gòu)示意圖,所述設(shè)備包括:接收模塊31、確定模塊32和寫數(shù)據(jù)模塊33,其中:
[0139]接收模塊31,用于接收光模塊發(fā)送的寫數(shù)據(jù)指令,其中,所述寫數(shù)據(jù)指令中包含了待寫入閃存Flash的數(shù)據(jù);
[0140]確定模塊32,用于根據(jù)所述寫數(shù)據(jù)指令中包含了待寫入Flash的數(shù)據(jù)的邏輯地址,確定所述接收模塊31接收到的所述待寫入Flash的數(shù)據(jù)存儲(chǔ)在所述Flash內(nèi)部的物理地址;
[0141]寫數(shù)據(jù)模塊33,用于根據(jù)設(shè)定的物理地址與至少兩個(gè)存儲(chǔ)區(qū)域之間的對(duì)應(yīng)關(guān)系,得到所述確定模塊32確定的所述物理地址對(duì)應(yīng)的至少兩個(gè)存儲(chǔ)區(qū)域;并從得到的所述至少兩個(gè)存儲(chǔ)區(qū)域中選擇一個(gè)存儲(chǔ)區(qū)域,在所述選擇的存儲(chǔ)區(qū)域內(nèi)沒有存儲(chǔ)數(shù)據(jù)時(shí),將所述接收模塊接收到的所述待寫入Flash的數(shù)據(jù)直接寫入所述選擇的存儲(chǔ)區(qū)域。
[0142]可選地,所述設(shè)備還包括:對(duì)應(yīng)關(guān)系確定模塊34,其中:
[0143]所述對(duì)應(yīng)關(guān)系確定模塊34,用于確定物理地址與至少兩個(gè)存儲(chǔ)區(qū)域之間的對(duì)應(yīng)關(guān)系,具體用于:
[0144]預(yù)先將Flash內(nèi)部的存儲(chǔ)區(qū)域劃分成N個(gè)子存儲(chǔ)區(qū)域,其中,N為自然數(shù);
[0145]從N份存儲(chǔ)區(qū)域中選擇至少兩個(gè)子存儲(chǔ)區(qū)域作為一個(gè)物理地址對(duì)應(yīng)的存儲(chǔ)區(qū)域,并建立所述物理地址與所述至少兩個(gè)子存儲(chǔ)區(qū)域之間的對(duì)應(yīng)關(guān)系,其中,不同物理地址對(duì)應(yīng)的子存儲(chǔ)區(qū)域不同。
[0146]具體地,所述對(duì)應(yīng)關(guān)系確定模塊34,具體用于將Flash內(nèi)部的存儲(chǔ)區(qū)域平均劃分成N個(gè)子存儲(chǔ)區(qū)域。
[0147]具體地,所述寫數(shù)據(jù)模塊33,具體用于從得到的所述至少兩個(gè)存儲(chǔ)區(qū)域中選擇一個(gè)存儲(chǔ)區(qū)域,并判斷所述選擇的存儲(chǔ)區(qū)域內(nèi)是否已存儲(chǔ)數(shù)據(jù);
[0148]若所述選擇的存儲(chǔ)區(qū)域內(nèi)沒有存儲(chǔ)數(shù)據(jù)時(shí),將所述待寫入Flash的數(shù)據(jù)直接寫入所述選擇的存儲(chǔ)區(qū)域。
[0149]具體地,所述寫數(shù)據(jù)模塊33,還用于若所述選擇的存儲(chǔ)區(qū)域內(nèi)已有存儲(chǔ)數(shù)據(jù)時(shí),將所述存儲(chǔ)區(qū)域內(nèi)的存儲(chǔ)數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)進(jìn)行比較;
[0150]當(dāng)所述存儲(chǔ)區(qū)域內(nèi)的存儲(chǔ)數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)相同時(shí),觸發(fā)所述待寫入Flash的數(shù)據(jù)寫完成指令;