本發明涉及一種在flash中實時存儲數據的方法,屬于嵌入式系統。
背景技術:
1、目前,嵌入式程序對flash的擦除指令通常是由上位機下發的,這種操作有以下幾個主要缺點,一是需要上位機持續關注flash剩余存儲空間,避免出現無法存儲最新數據的情況;二是難以確保擦除時最大限度的保留歷史數據;三是擦除flash時無法執行寫入操作,上位機難以避免實時數據可能存儲失敗的問題。
技術實現思路
1、本發明解決的技術問題是:克服現有技術的不足,提供了一種在flash中實時存儲數據的方法,無需上位機控制情況下,通過任務調度,避免寫入與擦除操作沖突,從而實現嵌入式系統自動在flash中實時地存儲數據。
2、本發明的技術解決方案是:一種在flash中實時存儲數據的方法,包括:
3、初始化階段:擦除準備寫入的nowsector扇區和相鄰的下一個扇區,擦除使能標志eraseflag初始化為0;
4、任務調度階段:創建寫入任務和擦除任務,通過實時操作系統進行任務間調度;所述寫入任務的優先級高于所述擦除任務;
5、所述擦除任務包括:
6、s11,判斷擦除使能標志eraseflag是否為1;若擦除使能標志eraseflag為1則進入s12;否則使用實時操作系統將擦除任務掛起一個時間片后重新執行s11;
7、s12,擦除erasesector扇區,然后將擦除使能標志eraseflag置0,以關閉擦除操作;然后使用實時操作系統將擦除任務掛起一個時間片后進入s11;
8、所述寫入任務包括:
9、判斷當前準備寫入的扇區剩余空間是否小于需要存儲的實時數據的長度;若不小于,則向flash寫入實時數據;若小于,則將存儲扇區變更為相鄰的下一個扇區,開啟擦除操作后向flash寫入實時數據。
10、進一步地,所述初始化階段包括:
11、遍歷扇區,若一個首部未標記的扇區的前一個扇區首部已寫入預設標記,則該未標記扇區為當前準備寫入的nowsector扇區,nowsector扇區的下一個相鄰扇區為erasesector扇區;擦除nowsector扇區與erasesector扇區;擦除使能標志eraseflag初始化為0。
12、進一步地,所述寫入任務的步驟包括:
13、s31,判斷從當前地址addr開始存儲數據是否會跨扇區,若跨扇區則執行s32,若不跨扇區則向flash寫入實時數據;使用實時操作系統將寫入任務掛起一個時間片后,執行s31;
14、s32,進行跨區處理,然后執行s33;
15、s33,將擦除使能標志eraseflag置1以使能擦除操作;nowsector扇區的首部寫入預設標記,并將當前地址addr更新為預設標記所存地址的后一個地址;向flash寫入實時數據;使用實時操作系統將寫入任務掛起一個時間片后,執行s31。
16、進一步地,所述跨區處理步驟為:
17、s41,判斷:如果nowsector扇區為最后一個扇區,則將nowsector扇區變更為第一個扇區,執行步驟s43;否則將nowsector扇區自加1,進入步驟s42;
18、s42,判斷:如果變更后的nowsector扇區為最后一個扇區,則將erasesector扇區變更為第一個扇區;否則執行s43;
19、s43,erasesector扇區變更為nowsector扇區相鄰的下一個扇區。
20、進一步地,所述向flash寫入實時數據包括:
21、從當前地址addr開始寫入長度為length的數據,寫入完畢后,當前地址addr自加length,指向下一次準備寫入的地址。
22、進一步地,扇區首部寫入所述預設標記為0xa5a5,以表示該扇區已存有實時數據。
23、進一步地,所述初始化階段通過所述預設標記尋找最近一次存儲實時數據的扇區。
24、一種計算機可讀存儲介質,所述的計算機可讀存儲介質存儲有計算機程序,所述的計算機程序被處理器執行時實現所述一種在flash中實時存儲數據的方法的步驟。
25、一種flash存儲設備,包括flash存儲器、處理器以及存儲在所述flash存儲器中并可在所述處理器上運行的計算機程序,所述的處理器執行所述的計算機程序時實現所述一種在flash中實時存儲數據的方法的步驟。
26、本發明與現有技術相比的優點在于:
27、本發明無需上位機下發擦除指令。采取順序循環存儲數據的方式以保證不會存在空間不足無法存儲新數據的情況。同時對寫入扇區的下一相鄰扇區進行擦除,此時擦除的數據為目前存儲最久的數據,從而最大限度保留最新的歷史數據;寫入任務的優先級比擦除任務高,能保證寫入操作優先于擦除操作執行,保證數據存儲的實時性,進一步的,雖然擦除任務優先級低,但存滿一個扇區所需的時間對于擦除下一相鄰扇區足夠充裕,操作系統必定能找到寫入任務掛起間隙執行擦除任務,從而避免寫入與擦除操作沖突,實現嵌入式系統自動在flash中實時地存儲數據。
1.一種在flash中實時存儲數據的方法,其特征在于,包括:
2.根據權利要求1所述的一種在flash中實時存儲數據的方法,其特征在于,所述初始化階段包括:
3.根據權利要求1所述的一種在flash中實時存儲數據的方法,其特征在于,所述寫入任務的步驟包括:
4.根據權利要求3所述的一種在flash中實時存儲數據的方法,其特征在于,所述跨區處理步驟為:
5.根據權利要求3所述的一種在flash中實時存儲數據的方法,其特征在于,所述向flash寫入實時數據包括:
6.根據權利要求2或3所述的一種在flash中實時存儲數據的方法,其特征在于,扇區首部寫入所述預設標記為0xa5a5,以表示該扇區已存有實時數據。
7.根據權利要求6所述的一種在flash中實時存儲數據的方法,其特征在于,所述初始化階段通過所述預設標記尋找最近一次存儲實時數據的扇區。
8.一種計算機可讀存儲介質,所述的計算機可讀存儲介質存儲有計算機程序,其特征在于,所述的計算機程序被處理器執行時實現如權利要求1~權利要求7任一所述方法的步驟。
9.一種flash存儲設備,包括flash存儲器、處理器以及存儲在所述flash存儲器中并可在所述處理器上運行的計算機程序,其特征在于:所述的處理器執行所述的計算機程序時實現如權利要求1~權利要求7任一所述方法的步驟。