將數(shù)據(jù)存儲(chǔ)在Flash中
通常程序在調(diào)用變量時(shí),會(huì)在RAM中分配一段存儲(chǔ)空間用于存儲(chǔ)該變量,Arduino的RAM資源有限,如果沒有合理利用,可能造成程序運(yùn)行錯(cuò)誤。
編譯器在編譯時(shí)也會(huì)預(yù)計(jì)RAM使用量,如若超出則會(huì)有如下提示:
項(xiàng)目使用了 11734 字節(jié),占用了 (36%) 程序存儲(chǔ)空間。最大為 32256 字節(jié)。
全局變量使用了2612字節(jié),(127%)的動(dòng)態(tài)內(nèi)存,余留-564字節(jié)局部變量。最大為2048字節(jié)。
相對(duì)于RAM空間,F(xiàn)lash雖然讀寫速度較慢,但存儲(chǔ)空間更大,當(dāng)項(xiàng)目遇到RAM空間不足時(shí),如果利用好更大的Flash空間,即可釋放出相應(yīng)的RAM空間。
在本書LCD驅(qū)動(dòng)章節(jié),通過圖片取模獲得了一個(gè)較大的數(shù)組變量,示例中使用了PROGMEM
定義了存儲(chǔ)圖片的變量,從而使該變量存儲(chǔ)在Flash中。
關(guān)鍵字PROGMEM
是一個(gè)變量修飾符,使用該修飾符可實(shí)現(xiàn)將變量存儲(chǔ)在Flash空間內(nèi),而不占用RAM空間。
使用方法如下:
const 數(shù)據(jù)類型 變量名[] PROGMEM = {data0, data1, data3…};
需要注意的是,通常使用PROGMEM的變量,需要是全局變量。如果在局部變量中使用,需要添加static關(guān)鍵字,將變量定義為靜態(tài)變量,方法如下:
const static 數(shù)據(jù)類型 變量名[] PROGMEM = {data0, data1, data3…};
F() 宏函數(shù)
對(duì)于一些需要輸出的長(zhǎng)文本字符串,可以使用Arduino提供的F()
宏函數(shù),以達(dá)到和使用PROGMEM
一樣的效果。如:
將
Serial.print("Early to bed early to rise makes a man healthy wealthy and wise");
可修改為:
Serial.print(F("Early to bed early to rise makes a man healthy wealthy and wise"));
即可將變量存儲(chǔ)到Flash中,以節(jié)省RAM空間。
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。