有時,我要放在arduino上的嵌入式C程序的程序大小空間不足。那麼,我需要什麼芯片來擴展arduino的程序內存,以便可以在arduino中使用更大的C程序?
有時,我要放在arduino上的嵌入式C程序的程序大小空間不足。那麼,我需要什麼芯片來擴展arduino的程序內存,以便可以在arduino中使用更大的C程序?
當Uno上的程序存儲器用完時,ATmega2560可以添加更多的存儲器。參考arduino.cc上的內存頁面,您會看到它具有Flash = 256KB,SRAM = 8KB,EEPROM = 4KB,其中Uno上的ATmega328芯片具有Flash = 32KB,SRAM = 2KB,EEPROM = 1KB。
當您在Uno上用盡程序存儲器時,有大約三個可行的選擇:減小程序大小;減小程序大小。刪除引導加載程序(以釋放一兩個KB);使用具有更強大功能的處理器的另一塊板。 Uno板上的CPU無法從片上32KB閃存以外的其他位置訪問程序字節。 Mega2560板上的CPU啟動時的閃存數量是8倍,因此它可以容納比Uno更大的程序。
如果卸下引導加載程序,則可以使用USBASP板進行編程,如所述在learningaboutelectronics.com上的“使用帶有10針電纜的USBASP編程AVR芯片”中。
另一種方法(除了具有更多內存的MCU之外)不使用Arduino框架及其庫。這樣的抽象級別在兩種方式上都很昂貴-內存使用率和速度。但這要困難得多。如果需要一些庫,則必須將其移植(如果找不到本機庫),或者至少要提供Arduino所需的功能。
例如在Arduino IDE 1.6.11中,空草圖正在用完444字節的閃存。使用一個 pinMode
和 digitalWrite(13,!digitalRead(13));
+ delay(500);
表示964個字節。當然,這些很可能是一次性的。如果再使用六個引腳並進行切換,則它使用的程序存儲器要比使用第一個引腳(1192B)少得多。
在純C空程序中,其長度約為134字節。相同的功能(每500ms切換一個引腳)需要158個字節(並且速度更快)。
但是對於業餘項目,我會選擇ATMega2560或ATMega644 / 1284。
您也可以使用直接訪問硬件。直接使用寄存器來切換引腳草圖,而來自avr庫的_delay_ms使用468字節而不是964B。延遲了Arduino核心庫的版本是602B。
樹莓pi零怎麼辦?我有一對夫婦,經常將它們用作arduinos。
您還可以研究其他平台。例如,Teensy 3.2與Arduino兼容,並具有2KB eeprom和64KB RAM。
在問一個廣泛的問題時,包括一些細節會很有幫助。就像有多少內存以及為什麼要使用它。
我曾經以2 KB的程序空間,64字節的RAM和1 KIPS來指定處理器。工程師問MIPS,我每秒要解釋數千個。他回答說,他們來的並不慢。在項目結束時,添加了一個巨大的UI,並且內存緊張...但是仍然沒有問題。
因此,請考慮對正在使用的資源進行更仔細的考慮。
回答這個問題:
1)Arduino沒有提供方便的總線來獲取內存,因此,沒有辦法插入芯片來獲取更多的內存。
2)Arduino具有SPI,因此可以訪問SD卡.SD卡上的任何代碼都需要加載到可執行內存中。這很複雜,不適合初學者...
3 )按照建議,收緊代碼。
3)移至更大的Arduino。
有不同的Arduino處理器。有些在ACR線中,有些在ARM線中。使用同一系列中的其他設備是一個相對適度的更改,最多可以提供368字節的progam FLASH。
基於Arduino ARM的設備非常不同,並且使用不同的庫。
查看Arduino Mega 2560,它與Uno非常相似,具有
AVR系列中的設備更大。
注意,AVR32是不同的處理器,外圍設備也足夠不同
如果要進入超大型程序(千兆字節的內存),請查看Beagleboard。它具有完整的linux,帶有虛擬內存(請參閱上面的#2),並且具有更強大的I / O機制。