基于MC9S08QG8單片機的EEPROM虛擬技術(shù)
使用C語(yǔ)言而不是匯編語(yǔ)言編寫(xiě)這個(gè)函數是因為C語(yǔ)言表達更清晰,另外目前的C編譯器能夠產(chǎn)生高效的匯編代碼。函數的入口參數cmd為Flash操作命令,具體命令內容及其命令字節如表1所列;ProgAddr為待操作的Flash的地址,若是擦除操作則為Flash頁(yè)內或者整個(gè)Flash內的任意地址;buff-erAddr為緩沖區首地址;buff-ersize為待寫(xiě)入的數據長(cháng)度。
2.2 存儲信息區的設計
存儲信息區由5個(gè)字節構成。其中第一個(gè)字節為長(cháng)度信息,記錄的是空白Flash第一次被寫(xiě)入的數據大小。另外四個(gè)字節為寫(xiě)入控制信息,用來(lái)記錄Flash的寫(xiě)入情況。每次寫(xiě)入成功后,將該信息區按從低到高的順序將對應的位由1變?yōu)?。這里需要提到的一點(diǎn)是:Flash被擦除后,每個(gè)字節的數據都變?yōu)?xFF,對Flash編程,其實(shí)是將Flash中每一位由“1”狀態(tài)變?yōu)椤癘”狀態(tài),或者保持“1”狀態(tài)。正是利用這一點(diǎn),控制信息可以記錄當前Flash數據的寫(xiě)入情況。例如,若長(cháng)度信息為16,則會(huì )用到控制信息的31位;若長(cháng)度信息為63,則僅用到低8位,寫(xiě)入8次后,若要進(jìn)行下一次寫(xiě)入操作,由于該頁(yè)剩余的長(cháng)度僅有3字節(512—5—63×8),小于63,所以需要擦除后才能進(jìn)行。為了減少擦除次數,這里規定每次寫(xiě)入的數組長(cháng)度不能超過(guò)63,同時(shí)由于控制信息位數的限制,數字長(cháng)度至少為16字節。
評論