本發(fā)明涉及數(shù)字電視技術(shù)領(lǐng)域,更具體的說,是涉及一種存儲機(jī)頂盒用戶信息的方法。
背景技術(shù):隨著數(shù)字電視的大力發(fā)展,數(shù)字電視機(jī)頂盒承載了對數(shù)字信號的解碼、對前端下發(fā)的音視頻信息、股票、廣告、雙向信息解析、存儲及展示等工作。數(shù)字電視的功能及增值業(yè)務(wù)的不斷擴(kuò)展,也要求有越來越多的信息需要存儲到本地的機(jī)頂盒上。比如本地的音量、瀏覽節(jié)目的記錄,對來自前端的郵件、滾動消息、下發(fā)廣告圖片的接收和存儲,以及運(yùn)營商對本區(qū)域?qū)崿F(xiàn)機(jī)卡控制的控制信息等。這些信息會隨著用戶的使用習(xí)慣、運(yùn)營商對用戶的管理、增值應(yīng)用的多樣化及升級而變化,信息的變化頻率有高有低,而每一次變化都需要將相應(yīng)信息更新到本地的存儲設(shè)備上。目前,機(jī)頂盒設(shè)備用來存儲數(shù)據(jù)的存儲器通常包括:NOR型FLASH和E2PROM兩部分,主流的機(jī)頂盒存儲信息的方法都是采用FLASH加E2PROM的組合,F(xiàn)LASH對用戶信息進(jìn)行存儲時,需要先判斷與用戶信息對應(yīng)的待存儲數(shù)據(jù)的類型,例如:聲道設(shè)置、視頻輸出比例、OSD菜單顯示時間及節(jié)目的父母控制等信息,這些數(shù)據(jù)中有些是經(jīng)常變化的數(shù)據(jù),例如:聲道設(shè)置、OSD菜單顯示時間等,有些是不經(jīng)常變化的數(shù)據(jù),例如:視頻輸出比例、節(jié)目的父母控制等,對于不經(jīng)常變化的數(shù)據(jù)直接寫入FLASH即可,而對于經(jīng)常變化的數(shù)據(jù),需要先將FLASH中存儲的與待存儲數(shù)據(jù)對應(yīng)的原始數(shù)據(jù)進(jìn)行擦除,然后再將待存儲數(shù)據(jù)進(jìn)行存儲。由于擦除動作本身不支持字節(jié)操作,其使用塊來進(jìn)行擦除,一般一次需要擦除64KB字節(jié)的塊空間,因此,寫入數(shù)據(jù)時需要首先將同塊的其他不與待存儲數(shù)據(jù)對應(yīng)的原始數(shù)據(jù)先保存到E2PROM中,然后將該塊中存儲的數(shù)據(jù)全部擦除,最后,將待存儲的數(shù)據(jù)和其他原始數(shù)據(jù)一起寫入FLASH存儲空間中。由于上述過程中采用的是先擦除,再寫入的方式,很容易造成數(shù)據(jù)丟失的問題,使得整個數(shù)據(jù)存儲過程的可靠性降低。
技術(shù)實(shí)現(xiàn)要素:有鑒于此,本發(fā)明提供了一種存儲機(jī)頂盒用戶信息的方法,以克服現(xiàn)有技術(shù)中由于機(jī)頂盒存儲信息在存儲于FLASH時,采用先擦除,再寫入的方式,很容易造成數(shù)據(jù)丟失,使得整個數(shù)據(jù)存儲過程的可靠性降低的問題。為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:一種存儲機(jī)頂盒用戶信息的方法,包括:預(yù)處理過程和存儲過程,所述預(yù)處理過程,包括:將FLASH劃分為至少兩個連續(xù)的存儲區(qū)域,將所述存儲區(qū)域劃分為多個存儲單元,每個存儲單元的容量不小于預(yù)先設(shè)定的用戶信息量;所述存儲過程,包括:當(dāng)有待寫入用戶信息時,判斷所述FLASH是否為初始存儲狀態(tài),如果否,則確定上次用戶信息的存儲位置及所述存儲位置所在的存儲區(qū)域;當(dāng)所述存儲區(qū)域未寫滿時,將所述待寫入用戶信息寫入所述存儲區(qū)域內(nèi);當(dāng)所述存儲區(qū)域?qū)憹M時,判斷所述存儲區(qū)域是否為最后一個存儲區(qū)域,如果否,則將下一存儲區(qū)域確定為當(dāng)前存儲區(qū)域,如果是,則將第一個存儲區(qū)域確定為當(dāng)前存儲區(qū)域;將用戶信息寫入所述當(dāng)前存儲區(qū)域的第一個存儲單元,并判斷寫入過程是否完成,如果寫入過程完成,則將所述當(dāng)前存儲區(qū)域的上一個存儲區(qū)域內(nèi)的數(shù)據(jù)進(jìn)行擦除。優(yōu)選的,當(dāng)所述FLASH為初始存儲狀態(tài)時,直接將所述待寫入用戶信息從第一個存儲區(qū)域的第一個存儲單元開始存儲。優(yōu)選的,所述判斷所述FLASH是否為初始存儲狀態(tài)具體為:分別判斷所述FLASH的所有存儲區(qū)域的第一個存儲單元是否全部為被占用,如果是,則認(rèn)為所述FLASH的狀態(tài)為初始狀態(tài),如果否,則所述FLASH的狀態(tài)不為初始狀態(tài)。優(yōu)選的,還包括:預(yù)先設(shè)定一個暫存緩沖區(qū),所述暫存緩沖區(qū)用于存儲所述待寫入用戶信息。優(yōu)選的,所述寫入過程完成后還包括:利用預(yù)先設(shè)置的全局變量來記錄用戶信息的存儲位置。優(yōu)選的,所述將待寫入用戶信息寫入所述當(dāng)前存儲區(qū)域的第一個存儲單元步驟之前,還包括:對所述上次用戶信息的存儲位置上的數(shù)據(jù)進(jìn)行數(shù)據(jù)校驗,如果校驗成功,則直接將所述待寫入用戶信息寫入所述當(dāng)前存儲區(qū)域的第一個存儲單元,如果校驗失敗,則對所述當(dāng)前存儲區(qū)域進(jìn)行異常處理,當(dāng)所述異常處理結(jié)束后,再將所述待寫入用戶信息寫入所述當(dāng)前存儲區(qū)域的第一個存儲單元。優(yōu)選的,所述異常處理包括:擦異常、寫異常和讀異常。優(yōu)選的,所述異常處理還包括:從第一個存儲區(qū)域的第一個存儲單元開始,遍歷所有存儲區(qū)域的所有存儲單元,當(dāng)每個存儲單元均為已被占用時,則對整個FLASH進(jìn)行擦除操作。優(yōu)選的,上述所述存儲單元的數(shù)據(jù)格式為:標(biāo)志位、用戶信息和校驗位,其中:所述標(biāo)志位,用于利用預(yù)先設(shè)定的值代表所述存儲單元是否被占用;所述用戶信息,用于存儲用戶信息對應(yīng)的數(shù)據(jù);所述校驗位,用于記錄所述存儲單元除所述標(biāo)志位和所述校驗位以外的全部數(shù)據(jù)的校驗和。經(jīng)由上述的技術(shù)方案可知,與現(xiàn)有技術(shù)相比,本發(fā)明公開了一種存儲機(jī)頂盒用戶信息的方法,將FLASH的若干個存儲區(qū)域進(jìn)行分區(qū),并將分得區(qū)域劃分為多個存儲單元,每個存儲單元的容量不小于預(yù)先設(shè)定的用戶信息量,保證寫入數(shù)據(jù)可以連續(xù)的進(jìn)行,直到寫滿一個完整的存儲區(qū)域,在寫入下一個存儲成功后,再對前一個存儲進(jìn)行一次擦除操作,這樣就減少了對FLASH的擦除次數(shù),并保證數(shù)據(jù)寫入成功以后,再對其進(jìn)行擦除,避免了先擦除,后寫入的傳統(tǒng)操作方式造成存儲過程的數(shù)據(jù)丟失的問題,提高了整個數(shù)據(jù)存儲過程的可靠性;同時,利用FLASH模擬E2PROM對數(shù)據(jù)進(jìn)行存儲,節(jié)省了E2PROM設(shè)備的使用,降低了硬件的成本;另外,對于FLASH在存儲過程中對用戶信息進(jìn)行寫入前,先要對FLASH進(jìn)行擦除,對FLASH設(shè)備的擦除操作比較頻繁,本發(fā)明通過對FLASH的存儲區(qū)域進(jìn)行存儲單元的劃分,將用戶信息按照存儲單元進(jìn)行存儲,當(dāng)一個存儲區(qū)域?qū)憹M后并寫入下一個存儲區(qū)域完成后,再將上一個存儲區(qū)域內(nèi)的數(shù)據(jù)擦除,有效地減少了對硬件設(shè)備的操作次數(shù),因此,提高了設(shè)備使用壽命。附圖說明為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例公開的一種存儲機(jī)頂盒用戶信息的方法的流程圖;圖2為本發(fā)明實(shí)施例公開的用戶信息寫入方式的流程圖;圖3為本發(fā)明實(shí)施例進(jìn)一步公開的一種存儲機(jī)頂盒用戶信息的方法的流程圖;圖4為本發(fā)明實(shí)施例公開的一種考慮異常情況下的查找有效數(shù)據(jù)單元的流程圖。具體實(shí)施方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。機(jī)頂盒廠商選擇FLASH存儲運(yùn)行程序時,考慮應(yīng)用程序的擴(kuò)展性,都會選擇比實(shí)際運(yùn)行程序容量大的FLASH型號。比如實(shí)際占用量為6Mbytes,一般選擇8Mbytes或16Mbytes的FLASH。而通常機(jī)頂盒的用戶信息量在幾Kbytes到幾十Kbytes之間,所以我們利用FLASH寫入速度較快的特點(diǎn),將FLASH的若干個block進(jìn)行分區(qū),保證寫入數(shù)據(jù)可以連續(xù)進(jìn)行,直到寫滿一個完整的block再對其進(jìn)行一次擦除操作。這樣就實(shí)現(xiàn)了使用FLASH模擬E2PROM對信息的存儲,從而節(jié)省了E2PROM設(shè)備。請參閱附圖1,為本發(fā)明公開的一種存儲機(jī)頂盒用戶信息的方法的流程圖;本發(fā)明公開了一種存儲機(jī)頂盒用戶信息的方法,該方法包括:預(yù)處理過程和存儲過程,其中,預(yù)處理過程為將FLASH劃分為至少兩個連續(xù)的存儲區(qū)域,將所述存儲區(qū)域劃分為多個存儲單元,每個存儲單元的容量不小于預(yù)先設(shè)定的用戶信息量,存儲過程具體為:步驟101:當(dāng)有待寫入用戶信息時,判斷所述FLASH是否為初始存儲狀態(tài);步驟102:如果是,則將用戶信息直接從第一個存儲區(qū)域的第一個存儲單元開始存儲;步驟103:如果否,則確定上次用戶信息的存儲位置及所述存儲位置所在的存儲區(qū)域;在確定上次用戶信息的存儲位置及存儲位置所在的存儲區(qū)域之前,首選需要開辟一塊內(nèi)存,用于存儲獲取到的或需要更新到FLASH的用戶信息,同時需要有全局變量來記錄存儲區(qū)域所在的block號及單元號,其用來記錄用戶信息的存儲位置。這段數(shù)據(jù)從開機(jī)上電到關(guān)機(jī),一直常駐內(nèi)存,直到下次開機(jī)再重新建立,其作為為用戶展現(xiàn)數(shù)據(jù)及記錄最新數(shù)據(jù)的暫存緩沖器而存在。本發(fā)明中,為了標(biāo)記每個存儲單元的使用情況及驗證數(shù)據(jù)的有效性,將每個存儲單元按照下述方式進(jìn)行定義:標(biāo)志位,用于利用預(yù)先設(shè)定的值代表所述存儲單元是否被占用;用戶信息,用于存儲用戶信息對應(yīng)的數(shù)據(jù);校驗位,用于記錄所述存儲單元除所述標(biāo)志位和所述校驗位以外的全部數(shù)據(jù)的校驗和。每個數(shù)據(jù)存儲單元在寫入數(shù)據(jù)以后,本存儲單元的標(biāo)志位被置為0x01,同時計算并記錄本段數(shù)據(jù)的校驗和,寫到校驗位。對于確定上次用戶信息的存儲位置及所述存儲位置所在的存儲區(qū)域,從第一個存儲區(qū)域的第一個存儲單元開始遍歷,如果第一個存儲單元標(biāo)志位為0xFF,那么直接跳到下一個存儲區(qū)域的第一個存儲單元;如果其第一個存儲單元的標(biāo)志位為0x01,那么順序遍歷所在存儲區(qū)域的第二個存儲單元、第三個存儲單元......,直到找到單元的標(biāo)志位為0xFF,那么認(rèn)為本存儲單元的上個存儲單元是上次用戶信息的存儲位置,確定了信息位置后,讀取內(nèi)容到RAM,供系統(tǒng)調(diào)用。步驟104:判斷存儲區(qū)域是否寫滿;步驟105:當(dāng)所述存儲區(qū)域未寫滿時,將所述待寫入用戶信息寫入所述存儲區(qū)域內(nèi);步驟106:當(dāng)所述存儲區(qū)域?qū)憹M時,判斷所述存儲區(qū)域是否為...