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