Go Down

Topic: Verificare SRAM utilizzata (Read 3 times) previous topic - next topic

pablos

Buongiorno a tutti

Mi trovo in difficoltà a caricare dati da un file .ini su matrici che a conti fatti non dovrebbe essere più di 1100 byte, essendoci però molte altre variabili pubbliche + quelle private che vanno e vengono non riesco a quantificare quanto spazio sto usando.
Diciamo che la lettura dei dati funziona perfettamente, quando poi fondo il programma aggiungendo altre fuzioni testate singolarmente arduino si pianta (non sono errori di programma) se riduco le quantità di byte usate nelle matrici funziona nuovamente.

le caratteristiche della MEGA 2560 sono:
Flash Memory   256 KB of which 8 KB used by bootloader
SRAM   8 KB
EEPROM   4 KB

C'è un modo per farsi restituire solo lo spazio utilizzato dalle variabili?

Spesso dichiaro le variabili pubbliche così non devo sbattermi a inviarle a determinate funzioni, le pesco e basta da qualsiasi punto del programma. Adesso è ora di finirla, ho bisogno di imparare bene come passare le variabili alle funzioni void senza renderle pubbliche, qualcuno potrebbe accennarmi qualcosa di corretto ?

Grazie saluti
no comment

leo72

Ci sono 2 metodi, uno dinamico ed uno statico.
Quello dinamico prevede l'uso di una piccola lib che calcola istantaneamente il quantitativo di memoria disponibile e lo spedisce via seriale. Quello statico calcola l'occupazione della memoria "sulla carta", cioè cosa il compilatore ha riservato in memoria ai dati del programma.
Ci sono pro e contro per entrambi i metodi: il primo, come detto, necessita di una modifica al tuo sketch e poi serve che la scheda sia collegata al PC per spedire i dati; il secondo non può tener conto di array dinamici creati a runtime.
A parte questo, io preferisco sempre il secondo.

http://www.leonardomiliani.com/?p=572

pablos

Grazie Leo :)

E' qui che non capisco

Quote
Serial.println(freeMemory());
questo metodo è invasivo ed altera il consumo di SRAM dato che sia la libreria che l'uso della comunicazione seriale aumentano la memoria usata dallo sketch. Esso inoltre richiede un modo per poter comunicare all'utente il valore della memoria disponibile.


forse il mio problema sono proprio i debug su seriale, ma quanta SRAM prende il buffer della seriale?

no comment

leo72

Fino all'IDE 002x prendeva 128 byte, dalla 1.0 in poi ne prende 64.
Ma hai fatto il test con avr-size? Cosa ti dice?

astrobeed


forse il mio problema sono proprio i debug su seriale, ma quanta SRAM prende il buffer della seriale?


Con l'IDE 1.x  in totale 128 byte suddivisi in parti uguali (64 e 64) tra trasmissione e ricezione.
Per passare dei dati alle funzioni è indispensabile che queste siano dichiarate nel modo corretto, p.e. "void myfunc (char v1, byte v2, int v3)", ove ho una funzione che riceve tre parametri, v1, v2, v3, il primo è uno char, il secondo è un byte e il terzo è un int.
All'interno della funzione hai disponibili le variabili v1,v2,v3, senza ulteriori dichiarazioni, che rappresentano i valori ricevuti.
Trovo strano che sulla MEGA2560 hai problemi ad utilizzare una matrice di 1100 byte, a meno che non hai in giro per il programma molti array e molte variabili long/float che si "mangiano" tutta la ram.

Go Up