Estensione memoria Arduino Mega

Buongiorno a tutti,

continuo con la mia serie di domande un po' da ignorante e vi chiedo se esiste un modo per estendere la memoria di Arduino. Mi spiego: ho costruito una centralina per il controllo di più esperimenti in parallelo e sono presenti un display e un tastierino attraverso cui si accede a un menu abbastanza articolato che permette di svolgere azioni diverse. Penso che ciò che occupa più spazio sia il controllo del display perché occupa parecchie righe del codice.

Grazie mille a chi avrà la pazienza di rispondermi

Alice

Credo che sia necessario fare chiarezza di cosa si intende per “memoria”.
Sui microcontrollori di classe Arduino Mega sono disponibili tre “tipi” di memoria, la Flash memory che contiene il progrmagga che scrivi è da 256KB (otto dei quali già occupati dal bootloader quindi ne hai disponibili 248) e puoi utiizzarla fino all’ultimo bit senza problemi. La seconda tipologia è la SRAM che contiene (tra le altre cose che non sto a specificare) le variabili che vengono usate dal programma, questa è un po’ più critica e se ne sconsiglia di occupare con le varibili più del 75% poiché durante l’esecuzione del programma alcune variabili vengoco allocate dinamicamente (oltre ad altre cose) e se questa memoria viene saturata (o più) il programma si blocca o ha comportamenti anomali.
Quando compili un programma l’IDE di riporta queste informazioni alla fine dlla compilazione:

Lo sketch usa 1448 byte (0%) dello spazio disponibile per i programmi. Il massimo è 253952 byte.
Le variabili globali usano 9 byte (0%) di memoria dinamica, lasciando altri 8183 byte liberi per le variabili locali. Il massimo è 8192 byte.

Questo è l’esempio blink compilato per la MEGA.
Infine il terzo “tipo” di memoria disponbili è la EEPROM che sulla mega è da 4KB che si può usare per memorizzare parametri e altri valori che possono essere letti al successivo avvio di Arduino, infatti questo tipo di memoria persiste anche dopo lo spegnimento (così come il programma memorizzato nella flash) e anche questa può essere sfruttata fino all’ultimo bit senza alcun problema.

Quindi se la compilazione non ti segnala errori o warning vari controlli/display/funzionalità possono convivere tranquillamente sulla tua MEGA

@fabpolli,
se non ricordo male la Mega gestisce della RAM aggiuntiva, ci dovrebbe essere qualcosa in rete.

si ma la sola memoria ram, non la flash. Comunque non è roba facile facile da gestire e non credo che si riesca a gestire tutto da IDE, serve usare malloc & company se non ricordo male, ma non ho mai usato questa tecnica quindi di più non so dire.
Vista la richiesta dell'utente direi che è più una preoccupazione preventiva che non una reale necessità, ma staremo a vedere se e cosa dirà l'OP

zoomx:
se non ricordo male la Mega gestisce della RAM aggiuntiva, ci dovrebbe essere qualcosa in rete.

... certo che si, vendono anche delle schede di espansione, ma da quello che scrive l'OP, non si capisce di CHE memoria parla, perché sembra sia proccupato dell'occupazione del codice (... parla di un menù piuttosto articolato e altre cose) ... ::slight_smile:

Comunque, di base, Arduino NON gestisce la cosa e tocca mettere le mani in vari punti ove occorre una certa esperienza (startup code nella sezione .init per inizializzare tale memoria, modifica dello script di link per la rilocazione della memoria .data e .bss nell'area di memoria aggiunta, ecc).

Se il problema è la SRAM, forse gli converrebbe pensare a qualche cosa basata sul ATmega1284P che, ha si la metà di flash (128KB), ma il doppio di SRAM (16KB) di un ATmega2560 :wink:

Guglielmo

Se il menu è abbastanza articolato, serve la flash su cui spostare il testo. Se non è stata usata la macro F(), quello è il problema.

Mi sa che "Alice non abita più qui".

Mi sa che "Alice non abita più qui".

"Alice" si è trasferita nel paese delle meraviglie?

PS:non ho resistito. :smiley: