e perché dovrebbe bastargli? mica sei tu a poter stabilire il limite del sapere di chi chiede così gli tagli ogni possibilità di approfondimento D'altra parte solo ora faccio caso al tuo "personal text" ]:D; ricordando un battuta che mi hai fatto non molto tempo fa devo dedurre che non hai mai avuto un buon rapporto con la classe insegnante e temo proprio che il problema sia stato bidirezionale
Risposta piú semplice: Nella RAM vanno le variabili dello Sketch e le variabili del sistema (per esempio lo Stack). Lo stak é una parte di memoria dove per esempio vengono memorizzate dati come indirizzi di ritorno da subrotine) Non c'é controllo se si cerca di usare piú RAM di quella disponibile. Quando si usano tanti variabili (per esempio array) oppure si stampa sulla seriale tante stringhe vengono sovrascrite dalle variabili del Sketch l' aria riservata per le variabili di sistema e l' Arduino si blocca misteriosamente.
Arduino non usa normalmente la memoria EEPROM. Puoi usara Tu nel Tuo sketch con la libreria EEPROM
Nel ATmega328 non é possiblie espandere la memoria (RAM, o FLASH) esternamente per avere piú memoria interna per le variabili.
È possibile sulla ATmega1280 e 2560 di aggiungere una RAM esterna per avere 64kByte di RAm interna. Si perdono ca 20 piedini per questo. http://ruggedcircuits.com/html/megaram.html
Per completare il discorso, esistono dei metodi per conoscere l'occupazione statica e dinamica della SRAM.
Si può vedere la memoria RAM usata staticamente (quindi come stack e creazione di variabili) dopo aver compilato il proprio sketch. Basta spostarsi nella cartella temporanea che l'Arduino crea in /tmp/buildxxxxxxxxxxxxxxxxxx (su Windows non mi ricordo dove la mette), aprire un terminale e dare "avr-size nome_file_sketch.elf -C".
Ti verrà restituita l'occupazione di flash e di Ram del tuo sketch.
Grazie a tutti. Solo ora ho avuto modo di leggere le vostre risposte. Devo provare con avr-size.
So cos'è un heap o uno stack. Una variabile dichiarata in una funzione vive solo in quella funzione? Cioè se dichiaro un array di 10 interi in questa funzione e nel loop() prima di chiamare questa funzione ho 100byte liberi dopo la funzione ne dovrei avere ancora 100 o no? Oppure tutto quello che viene dichiarato, comprese le variabili delle funzioni, viene allocato staticamente? Grazie.