A volte esaurisco lo spazio della dimensione del programma per il programma C incorporato che voglio mettere su un arduino. Quindi di quale chip ho bisogno per espandere la memoria del programma di arduino in modo da poter utilizzare programmi C più grandi con il mio arduino?
Commenti
- Considerando che un tizio di nome Petri H ä kkinen put un gioco in stile arcade su un Atmega328P, forse dovresti cercare di risparmiare spazio nel tuo codice? Se questo non è ‘ t pratico, come dicono alcune delle risposte, puoi ottenere un chip più grande con più memoria di programma. LAtmega644, ad esempio, viene fornito in un pacchetto DIP-chip, tra gli altri.
- Vedi anche forum.arduino.cc/index.php?topic= 226465.0
- puoi spiegare un po di più la tua risposta? 2) Arduino ha SPI, quindi è possibile accedere a una scheda SD. Qualsiasi codice sulla scheda SD dovrebbe essere caricato nella memoria eseguibile. Questo è complicato e non per i principianti … Vuoi dire che puoi cambiare o riprogrammare la memoria delle istruzioni mentre il programma è in esecuzione? Il programma in esecuzione può chiamare il bootloader e caricare nuove istruzioni su indirizzi diversi? Ha vinto ´ in questa età la memoria del programma? Una soluzione diversa potrebbe essere identificare le routine nel programma e tutte le ” chiamate ´ s ” memorizzato con i dati su una memoria esterna spi … Grazie!
Risposta
Un ATmega2560 è il chip da aggiungere per più memoria quando si esaurisce la memoria del programma su Uno. Facendo riferimento alla pagina web Memoria su arduino.cc, vedrai che ha Flash = 256KB, SRAM = 8KB, EEPROM = 4KB, dove si trova il chip ATmega328 Uno ha Flash = 32KB, SRAM = 2KB, EEPROM = 1KB.
Quando esaurisci la memoria del programma su Uno, hai circa tre scelte pratiche: rimpicciolire il programma; rimuovere il bootloader (per liberare uno o due KB), utilizzare una scheda diversa con un processore più capace La CPU su una scheda Uno non ha un modo per accedere ai byte del programma da luoghi diversi dalla flash da 32 KB sul chip. La CPU su una scheda Mega2560 inizia con 8 volte più flash, quindi può contenere programmi più grandi di quanto possa fare uno Uno.
Se rimuovi il bootloader, puoi invece programmare usando una scheda USBASP, come descritto in un articolo “Programma il chip AVR utilizzando un USBASP con cavo a 10 pin” su learningaboutelectronics.com.
Commenti
- ma se liberi il bootloader, come potrei usare lIDE di arduino per programmare?
- @ qwerty10, vedi lultimo paragrafo di modifica. LIDE di Arduino supporta USBASP ok.
- Non funzionerebbe con qualsiasi programmatore in grado di caricare codice su ATMEGA? Invece di solo un USBASP. A quanto ho capito, non utilizza effettivamente 10 pin, ma un sottoinsieme di quei pin.
- @ qwerty10, USPASP è un programmatore ISP (nella programmazione di sistema). In generale, qualsiasi programmatore ISP può essere utilizzato per programmare un chip (con o senza un bootloader su di esso) purché sul chip di destinazione siano disponibili i pin MOSI, MISO, SCK, RST, VCC e GND.
- Gli Uni correnti utilizzano il bootloader optiboot molto compatto. La rimozione libererà solo 512 byte.
Risposta
Un altro modo (diverso dallMCU con più memoria) è non utilizzando il framework Arduino e le sue librerie. Tale livello di astrazione è costoso in entrambi i modi: utilizzo della memoria e velocità. Ma questo è un modo molto più difficile. Se hai bisogno di una libreria, devi portarla (se non ne hai trovata una nativa) o almeno fornire le funzioni richieste da Arduino.
Ad esempio in Arduino IDE 1.6.11 sketch vuoto utilizza fino a 444 byte di flash. Utilizzare uno pinMode
e digitalWrite(13, ! digitalRead(13));
+ delay(500);
significa 964 byte. Naturalmente, questi sono molto probabilmente occasionali. Se si utilizzano altri sei pin e lo si attiva, viene utilizzata molta meno memoria del programma rispetto al primo (1192B). Ma cresce ancora molto velocemente.
In C puro il programma vuoto è lungo circa 134 byte. La stessa funzionalità (commutazione di un pin ogni 500 ms) richiede 158 byte (ed è molto più veloce).
Ma per il progetto hobby preferirei ATMega2560 o ATMega644 / 1284.
E puoi anche utilizzare laccesso diretto allhardware. Attiva / disattiva lo sketch pin utilizzando direttamente i registri e _delay_ms dalle librerie avr utilizza 468 byte invece di 964B. Con il ritardo dalle librerie core Arduino è 602B.
Commenti
- Intendi
_delay_ms()
. - Questo ha lulteriore vantaggio di conoscere effettivamente lMCU che ‘ in uso. Gli AVR su questi Arduino sono molto più capaci di quanto la ” libreria standard ” voglia far credere.++
Risposta
Che ne dici di un raspberry pi zero ? Ne ho un paio e li uso abbastanza spesso come arduino.
Commenti
- Altre architetture dovrebbero effettivamente essere prese in considerazione, ma un sistema Linux integrato con avvio obbligatorio da scheda SD come il pi aggiunge molta complessità ed è fragile in modi unici, anche se non più costosi. Esistono molte schede basate su MCU ARM più piccoli e altamente integrati che sono molto più simili ad un Arduino in termini di applicazioni, pur essendo drasticamente più capaci. Ma se hai bisogno di molta elaborazione, o megabyte di memoria, allora sì, queste complessità iniziano ad essere utili.
- Preferisco anche lo zero perché è così flessibile. Puoi aggiungere più spazio di archiviazione o incorporarlo nei progetti avendo anche un processore abbastanza grande per fare praticamente qualsiasi cosa.
Risposta
Potresti anche esaminare altre piattaforme. Ad esempio, un Teensy 3.2 è compatibile con Arduino e ha una eeprom da 2 KB e 64 KB di RAM.
Risposta
Wen chiedendo un ampio domanda, è utile includere alcuni dettagli. Ad esempio quanta memoria e perché pensi di averne bisogno.
Una volta ho specificato un processore con 2 KB di spazio di programma, 64 byte di RAM e 1 KIPS. Lingegnere ha chiesto, MIPS, ho spiegato migliaia al secondo. Ha risposto, non vengono così lentamente. Alla fine del progetto, è stata aggiunta unenorme interfaccia utente e la memoria si è ristretta … ma comunque si adattava senza problemi.
Quindi, considera di essere più premuroso sulle risorse utilizzate.
Per rispondere alla domanda:
1) Arduino non fornisce un comodo bus per recuperare la memoria. Quindi, non cè modo di collegare un chip per ottenere più memoria.
2) Arduino ha SPI, quindi è possibile accedere a una scheda SD. Qualsiasi codice sulla scheda SD dovrebbe essere caricato nella memoria eseguibile. Questo è complicato e non per i principianti …
3) Come suggerito, rafforza il codice. Questo è probabilmente un buon modo per imparare.
3) Passa a un Arduino più grande.
Esistono diversi processori Arduino. Alcuni nella linea ACR, altri nella linea ARM. Passare a un dispositivo diverso nella stessa famiglia è un cambiamento relativamente modesto e può fornire fino a 368 byte di FLASH del programma. Ma queste non sono schede Arduino esattamente.
I dispositivi basati su ARM Arduino sono molto diversi e usa librerie diverse.
Dai unocchiata ad Arduino Mega 2560, è molto simile a Uno, ha unimpronta simile, il codice dovrebbe essere portato in modo relativamente semplice ed è poco costoso.
Ci sono dispositivi più grandi nella famiglia AVR.
Nota, lAVR32 è un processore diverso e le periferiche sono abbastanza diverse da essere un dispositivo diverso.
Se vuoi entrare in programmi molto grandi ( gigabyte di memoria) controlla il Beagleboard. Ha un Linux completo, con memoria virtuale (vedi # 2 sopra) e ha meccanismi di I / O più potenti.
Commenti
- Forse aggiustare alcuni errori di battitura, come Wen, 3 e diversi
- Voglio dire, se correggi questi errori di battitura, qualcuno potrebbe votare la tua risposta …