Arduino記憶體的二三事
在任何電子裝置中記憶體的操作與管理是很重要的是,尤其是在記憶體容量較小的微控制器上。 Programmer必須考量到需要儲存資料的量,以及未來若需要擴充的解決方案。否則就會面臨資料錯誤或損失的窘境。 以avr-based的Arduino控制器來看內建記憶體可分為3種 1.Flash memory 2. SRAM 3. EEPROM Flash memory稱為快閃記憶體,在Arduino中是用來儲存你所撰寫的程式碼的。 SRAM稱為隨機存取記憶體,是用來存放執行時期的資源和變數,所以當設備斷電後記憶體內的資源也隨之被釋放掉。 EEPROM則是電子抹除式可複寫唯讀記憶體,是用來存放長期資料的,當有資料不想要在系統斷電後就消失掉,那就放在這邊吧。 UNO使用的ATmega328記憶體規格如下 Flash 32k bytes (of which .5k is used for the bootloader) SRAM 2k bytes EEPROM 1k byte Mega2560使用的ATmega2560記憶體規格如下 Flash 256k bytes (of which 8k is used for the bootloader) SRAM 8k bytes EEPROM 4k byte 我們可以注意到UNO的SRAM只有2K,這個容量很容易就會用完了,舉個例子來說。 假設你宣個一個字元陣列如下 char message[] = "I support the Cape Wind project."; 每一個字元都佔一個bytes,所以這樣你就已經用掉了 33 個bytes。 你就會發現如果你需要處理很多字串或用到很多變數,你很容易就到達2048的上限。 當到記憶體(SRAM)達上限後會發什麼事情? 大多情況下程式可能還是可以運作,只是可能不會是你預期的情況,你的資料可能錯誤,或者遺失。更慘的,甚至你的程式可能完全無法動作。 那我們要如何解決這個問題呢? 你可以: 1.把資料丟到其他儲存裝置上 2.可以用較小的資料型態來存放變數,如用 byte 取代 int ,前提是你確定不會有溢位的情況。 3.使用flash記憶體取代sram,不過當程式在運行時不能修改資料。(使用PROG