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