Problemi di memoria esaurita con Arduino Nano

Buongiorno al Forum e a chi risponde.

Divertendomi con le strisce Led RGB, e usando un Arduino Nano, dopo diversi avviamenti di alcuni programmi, circa una ventina, è sorto il problema: Memoria esaurita.

Come IDE uso arduino 1.8.5
Il programma che si blocca contiene:
Libreria Adafruit_NeoPixel v 1.10.4, Libreria Fastled v. 3,5 . Libreria EEPROM v 2.0

Lo Sketck usa 17976 byte 58% spazio disponibile.
Le variabili globali usano 3047 byte (148%) di memoria dinamica

Il programma non è di mio pugno ma è funzionato sempre bene fino a ora.

Ho spulciato qui.
http://www.arduino.cc/en/Guide/Troubleshooting#size

Qui le istruzioni consigliano di togliere e alleggerire il programma.
Il che vuol dire conoscerlo perfettamente altrimenti si blocca.

Ho fatto una prova con EEPROM.clear, ma il problema rimane.
Non ho capito cosa migliora questo programma o cosa guardare se ha fatto il suo lavoro.

Tengo a precisare che normalmente uso Arduino Uno da svariati anni e ho caricato centinaia di Skecth senza mai avere problemi.

Domanda: è resettabile o no la memoria.
E' possibile azzerarla come inizialmente?
Non mi dite che è da buttare, nonostante il costo di pochi euro. sarebbe una grossa perdita di immagine da parte dei progettisti.
Forse sbaglio io.

La Vostra, Grazie
erosb

Stai usando troppa SRAM ... probabilmente hai definito una striscia LED di dimensioni eccessive per la memoria del Arduino Nano (che è la stessa di un Arduino UNO ovvero 2 KBytes) ...

Ogni singolo LED di una striscia utilizza 3 bytes, più le variabili che occorrono al programma, lo stack, ecc. ... si fa presto a superare i 2 KBytes ... :roll_eyes:

Che strisce LED stai usando ?

Guglielmo

Salve Guglielmo e ben sentito.

La striscia e una W2812b a 5v indirizzabile , e da quello che mi dici, probabilmente è cosi anche se non ho ancora provato.

Il programma originale usa 30 Led, in verticale. Trovato in Internet anche lo Sketch che solitamente non si trova. E' molto bello e il programma è complesso per uno che mastica poco la matematica, comunque io cerco di spulciare per imparare. Nel mio "tabellone " dei Led che ho costruito ne ho messi 150, in varie maniere.
Nel programma o poi modificato il N° massimo che era 30 Led a 150. L'errore è mio.
Chiaramente non li accendi tutti simultaneamente, però come dici giustamente tu influiscono sulla memoria. La cosa strana, è che su programmi fatti da me che uso funzionano correttamente anche 150 Led .
Probabilmente uso meno Variabili o altro rispetto a quello originale che si blocca per la memoria.
Proverò a diminuire drasticamente il numero dei led.

Riguardo alle domande di come pulire la memoria gradirei una delucidazione a riguardo, se non tua per questioni di tempo, da altri che sono all'altezza di una decente spiegazione, cosa che non ho trovato nel forum. Ringrazio sperando di risolvere il problema.

Saluti
erosb

Mmmm ... 150 LED non sono moltissimi, ma comunque, come minimo, si mangiano già da soli 450 bytes di RAM. Probabilmente ci sono anche tante altre variabili che si sommano a questo valore e che alla fine ti portano all'occupazione che indichi tu di 3047 bytes (ricorda che ne hai solo 2048 disponibili per TUTTO).

E una domanda che NON ha molto senso ... intanto di QUALE memoria parliamo? Il ATmega328P ha tre tipi di memoria:

  1. la memoria programma (32 KB di Flash) che viene automaticamente sovrascritta ogni volta che si carica un nuovo programma

  2. la memoria EEPROM (1 KB), memoria in cui puoi scrivere e leggere e che mantiene il contenuto anche dopo lo spegnimento.

  3. la memoria SRAM (2KB), memoria in cui finiscono le variabili, lo stack, ecc., in cui poi scrivere e leggere e che si cancella ogni volta che spegni Arduino.

Quindi ... il concetto di "pulire la memoria" è un po' vago e, per la SRAM, non ha nenache molto senso, salvo ... se tu non voglia inizializzare, da codice, le varibili prima di usarle ... :roll_eyes:

Guglielmo

Le uniche informazioni riguardo alla situazione quando si blocca le ho scritte inizialmente nel post, per il resto delle domande che mi fai, non so risponderti, a me risultava che non c'era più memoria.
Ma dai, avevi ragione ho abassato il N° dei Led dichiarati e subito ha funzionato. Farò una prova per vedere a quanti Led si blocca così ho una informazzione in più. Quindi non è vero quello che gira in Internet che a nemoria piena si deve buttare. Mentre ho ancora il dubbio su EEPRON.Clear
Grazie Guglielmo
erosb

Ma in quei programmi, usi tutte quelle librerie che hai indicato ?

E sì, ma non le ho scelte io sono dell'autore

Ma vedo che anche i miei programmi che stò imparando a scrivere se non usi queste non funzionano, a mia esperienza.
Le librerie o le conosci e te le smazzi o le usi così.
Ciao

Scusa, ma... Hai caricato centinaia di programmi e non hai imparato nulla?... Li hai solo caricati a occhi chiusi?...

Ti diro: ho 78 anni e ho iniziato a 13 anni a lavorare nell'elettrico passando da elettricista, riparatore radio tv, e poi specializzato in una ditta di elettronica.
In quanto a programmare, ho provato un po' di tutto: Dos, Basic, Q-Basic, ZX Spettrum Sinclare , HTLM-4 , Visual Basi 6 e per finire Arduino che è un C++ o giu di lì.
Scusami tanto se non li ho imparati tutti quanti bene, ma a mè è bastato sapere per quello che volevo fare. Di natura preferisco sapere, anche poco ma un po di tutto. Riguardo alla tua domanda, un pò irrispettosa visto che non mi conosci, ma è un problema comune quando non si parla a quattrocchi. Si li ho sempre caricati senza problemi e ti assicuro che ne ho anche fatti tanti. E' la prima volta che ho avuto problemi di memoria EEPROM. e Grazie a Guglielmo ho risolto e capito il problema.

Dimenticavo, a occhi chiusi, no altrimenti sbaglio a sciacciare i tasti.
Saluti

Interessante, su internet ne girano tante, avevo letto di questo C++ o giù di li che molti chiamano wiring, mai che a memoria piena si debba buttare. Se hai il link io faccio la collezione di stupidaggini/imprecisioni.

Per eeprom clear non so nulla, mai capitato di leggere.

Se ti va puoi leggere il mio blog su arduino.

Ciao.

Maurotec, ho letto la pagina del Tuo Blog.
E' molto chiara e utile, alcune cose non le sapevo.
Grazie
erosb

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.