Go Down

Topic: Memoria RAM (Read 1 time) previous topic - next topic

nikm666

Qualcuno conosce un comando o una libreria per liberare la memoria RAM allocata all'interno dell'arduino alla fine dell'esecuzione del programma?

leo72

La richiesta non è chiara. Un programma non viene mai terminato ma eseguito dal microcontrollore (non da Arduino!) in loop infinito.
Puoi usare la funzione malloc() per far sì che il programma rilasci la memoria allocata per le variabili locali ad una funzione secondaria.

lesto

ehm la funzione è la free()
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

uwefed

Arduino non ha un sistema operativo multitasking percui termini programmi e serve liberare la memoria prima occuparta.
Se hai problemi di memoria Ram ci sono alcune strategie per risparmiare:
* prendere un ATmega piú grande ( un ATmega 1280 o 2560 al posto del 328)
* mettere delle costanti nella flash ( funzione progmem http://www.arduino.cc/en/Reference/PROGMEM)
* memorizzare dati nella EEprom ( libreria EEprom)
* ottimizzare il codice da usare meno variabili

Ciao Uwe


leo72

@lesto:
sì, malloc serve a "prenotare temporaneamente" la memoria di una variabile, che poi può essere liberata da free.

lesto

nikm666 ha chiesto come "liberare la memoria RAM", che a runtime si fa con le free(), a termine programma invece dovrebbe avvenire completamente da sola a meno che tu non abbia usato la malloc, in quel caso le zone mallocate bisogna liberarle a mano con la free.


nikm666 la tua è comunque una richiesta strana, anche se la RAM vien liberata, il suo contenuto non viene riscritto al volo ma solo quando ce ne è bisogno: infatti è per questo che in C bisogna sempre ricordarsi di inizializzare le variabili, altrimenti ti ritrovi a lavorare con vecchi valori a caso, il famoso garbage(spazzatura).

In oltre quando si toglie la alimentazione la RAM viene completamente cancellata data la sua struttura, altrimenti probabilmente non si userebbero gli hard disk :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up