大部分flash性質儲存器都有很多相似的操作規則,比如擦除方式就很特殊,最小擦出單位必須按照扇區來操作,而資料的寫入位址的內容必須是擦除狀態。這也是為什麼eeprom還能存在的一方面的原因吧(可以位元組擦除)。由於這種特殊的性質,導致我們在利用flash儲存資料的時候必須注意對扇區擦除的操作。這裡我總結個人的兩個操作技巧(以下內容是針對不帶檔案系統的儲存器說明的,帶檔案系統的也可以參考)。
技巧1:如果可以,盡可能將協議長度定義為2的n次方,這樣的話能保證每次要操作的乙個新的扇區的時候位址剛好是新扇區的起始位置,那麼這種擦除方式就很簡單了,方式如下(假設扇區大小4kb):
if(wraddr%4096 == 0)//剛好上次寫到了上個扇區的末尾
if(wraddrcmp <(wraddr +4096))
sst25_erasesector(wraddr);
}講解:先判斷是不是新的扇區位址,是的情況下讀出扇區資料,判斷是否都在擦除狀態,否的情況下擦除該扇區。
技巧2:如果我們定義的協議長度不是2的n次方,或者寫入長度完全不是固定的,那就可以參考下列方式來處理:
if((wraddr%4096 == 0) || ((4096 - (wraddr%4096)) < recordlength))
if(wraddrcmp <(wraddr +4096))
sst25_erasesector(wraddr);
}else if((4096 - (wraddr%4096)) < recordlength)//這次寫入的資料會占用乙個新的扇區
if(wraddrcmp <(wraddr%4096 + 4096 + 4096))
sst25_erasesector(wraddr%4096 + 4096);}}
講解:這裡同樣新增了技巧1的計算方式是因為會有技巧1的情況出現比如40960(每次寫40b,40960%40==0)。後面的思路是
先判斷這次寫入的資料從開始寫入的位址算起到寫入的長度結束,是不是超過了原先的扇區,如果超過了,就需要在寫入之前對下乙個扇區
做擦除處理。先獲取下乙個扇區的首位址,然後從首位址開始讀取該扇區所有資料,是否都在擦除狀態,如果有資料不在擦除狀態就對下乙個扇區
進行一次擦除操作。
後續需要考慮的問題就是,儲存器資料存滿的處理方式,一般會選擇迴繞,將最舊的資料刪除掉,再開始儲存新的資料,有時間再考慮。
flash 基礎 筆記
一 文字工具 屬性打散 ctrl b 兩次 可填充顏色 線性漸變下筆要在文字上 二 圖層 跟ps差不多,預設上層覆蓋下層 實驗五 旋轉文字 1.寫文字,調整大小 2.打散兩次 3.墨水瓶工具新增筆觸 4.刪除填充顏色 5.插針 補間動畫 屬性 6.新建圖層 7.參差貼上幀 三 鋼筆工具 1 操作方法...
Flash程式設計入門筆記
今天起開始學習flash程式設計。1.trace trace 是在flash測試影片時輸出資訊,例如想知道影片裡的哪個變數的數值,就可以用它檢視,方便我們知道變數的值是不是自己要的結果,方便除錯.語法為 trace 變數或其它資訊 例如,我們設定乙個變數bb 10,然後在幀的動作欄裡輸入 bb 10...
Flash開發筆記 Flash 執行exe檔案
我們都知道,在flash中,可以通過fscommand命令來啟動 執行外部應用程式,如以下 on release 這在早期版本中,執行的好好的。可是f lash 7以後,這樣的做法卻失靈了。而在flash幫助中,也沒有找到具體的說明 也許我太笨 原來在flash 7以後,flash player增強...