Caricare Sketch molto lungo

Buonasera a tutti, ho fatto diverse ricerche, soprattutto sul forum, ma non sono riuscito a trovar nulla che rispondesse alla mia domanda. Come faccio a caricare in memoria (su un Arduino Mega) uno sketch con tante righe di codice? Per tante righe di codice intendo circa 20+ mila righe. So già che la memoria di Arduino non consente di caricare sketch così lunghi ma vorrei capire quali potrebbero essere le differenti soluzioni per risolvere questo problema.

Grazie in anticipo a chiunque vorrà partecipare alla discussione ;)

Mica contano le righe di codice, conta la dimensione del binario generato dal compilatore, e non sempre le due cose sono legate a filo diretto come può sembrare. Quindi prova a compilare e dicci quale dimensioni risulta.

SukkoPera: Mica contano le righe di codice, conta la dimensione del binario generato dal compilatore, e non sempre le due cose sono legate a filo diretto come può sembrare. Quindi prova a compilare e dicci quale dimensioni risulta.

Si lo so che non vi è una relazione diretta tra righe e dimensione, mi sembra ovvio, ho parlato di righe di codice per semplificare la questione (volevo evitare di distrarre l'attenzione su altri aspetti ma vedo che non ci sono comunque riuscito :D ). La mia domanda è generica quindi la riscrivo: cosa si può fare per utilizzare uno sketch che non può essere caricato completamente in memoria perché occupa troppo spazio? Premesso che non si può agire sul codice e quindi quella sarà la dimensione che dovrà esser occupata: Quali possono essere le differenti soluzioni al suddetto problema e i relativi problemi/cosa da tenere in considerazione? Vorrei capirlo per decidere se utilizzare un approccio diverso (è inutile lavorare in una direzione se so già adesso che mi darà problemi dopo qualche giorno di lavoro) ed inoltre ritengo che possa essere utile a qualcun altro (come detto non ho trovato questo quesito da nessuna parte sul forum) quindi non consideriamo il mio caso specifico. Anche per la dimensione dello sketch consideriamo tre generici casi: 512kb, 1mb, 2mb.

Grazie a chiunque vorrà partecipare :)

Non capisco bene il senso della tua domanda. Se non puoi intervenire sul codice cosa pensi di poter fare? Niente. L'unica possibilità sarebbe quella di usare un microcontrollore con maggiori risorse, ma se vuoi rimanere in ambito Arduino, più grande della Mega non c'è niente. Potresti passare alla Due, che mi pare abbia più flash (ma è anche un'altra architettura, per cui non sono direttamente comparabili), ma con tutti i problemi del caso.

Ma cosa ci devi caricare? Non ho mai visto sketch che non stiano in una Mega... Ma poi è un problema di flash o di RAM?

SukkoPera:
Non capisco bene il senso della tua domanda. Se non puoi intervenire sul codice cosa pensi di poter fare? Niente. L’unica possibilità sarebbe quella di usare un microcontrollore con maggiori risorse, ma se vuoi rimanere in ambito Arduino, più grande della Mega non c’è niente. Potresti passare alla Due, che mi pare abbia più flash (ma è anche un’altra architettura, per cui non sono direttamente comparabili), ma con tutti i problemi del caso.

Ma cosa ci devi caricare? Non ho mai visto sketch che non stiano in una Mega… Ma poi è un problema di flash o di RAM?

Flash!
Ad esempio, è possibile dotare Arduino di una memoria esterna da utilizzare per conservare lo sketch? Se si, quali possono essere le diverse alternative?
[Comunque voglio rimanere su Arduino]

Grazie!

:o non e che prima te lo compri un arduino e ci spippoli un po sopra l'ultima versione di windows non ci sta dentro forse la prossima

arduinopro44: cosa c'è di poco chiaro nella risposta #3 di SukkoPera ?

NO, non hai alternative, devi cambiare board ed andare su altre cose.

Poi ci spieghi che programma ci devi mettere, dato che, ad esempio, tutto il codice che gestisce una stampante 3D, interprete del G-Code, driver motori, ecc. ... migliaia e migliaia di righe di codice ... ... entra tranquillamente in un Arduino Mega. :smiling_imp:

Guglielmo

Se forse ci dai qualche dettaglio in più sullo sketch, qualche suggerimento extra lo possiamo dare. Ad esempio se sfori dalla flash perché ci sono tanti dati embeddati nel codice, magari si possono spostare nella EEPROM o magari su una SD, ma così senza informazioni è impossibile dire di più.

PS: Volevo citare anch'io il fatto che una Mega è in grado di gestire un'intera stampante 3D, ma mi è venuto il dubbio che su facesse con una Due ;).

SukkoPera: PS: Volevo citare anch'io il fatto che una Mega è in grado di gestire un'intera stampante 3D, ma mi è venuto il dubbio che su facesse con una Due ;).

Oggi ci sono versioni su varie schede (la più usata è sempre Arduino MEGA), ma più che altro per ragioni di performance.

... QUI il firmware che è compilabile per le varie schede ... guarda che "bestiola" :grin: :grin: :grin:

Guglielmo

arduinopro44: La mia domanda è generica quindi la riscrivo: cosa si può fare per utilizzare uno sketch che non può essere caricato completamente in memoria perché occupa troppo spazio?

Su cosa basi la tua affermazione che il codice non entra sul Atmega2560 ? Riempire 256k di un processore 8 bit con solo del codice è praticamente impossibile, io ho scritto alcuni programmi per Atmega2560 che tra mio codice e librerie integrate superano abbondantemente le 20000 righe eppure una volta compilati non arrivano a 130k, ne rimangono liberi quasi 100 sulla flash. In tutti i casi se non ti bastano i 256k del Atmega2560, parliamo di codice perché se sono dati puoi spostarli su una memoria esterna, p.e. una EEPROM, non hai nessuna alternativa al cambio di tipologia di processore, anche perché con un codice di queste dimensioni sicuramente un 8 bit è troppo piccolo per gestirlo bene.

gpb01: ... QUI il firmware che è compilabile per le varie schede ... guarda che "bestiola" :grin: :grin: :grin:

Solo il main di Marlin sono oltre 10000 righe di codice, se poi ci mettiamo tutti gli altri file e le librerie anche lui supera abbondantemente le 20000 righe e una volta compilato sono poco più di 100k

astrobeed: Su cosa basi la tua affermazione che il codice non entra sul Atmega2560 ? Riempire 256k di un processore 8 bit con solo del codice è praticamente impossibile, io ho scritto alcuni programmi per Atmega2560 che tra mio codice e librerie integrate superano abbondantemente le 20000 righe eppure una volta compilati non arrivano a 130k, ne rimangono liberi quasi 100 sulla flash. In tutti i casi se non ti bastano i 256k del Atmega2560, parliamo di codice perché se sono dati puoi spostarli su una memoria esterna, p.e. una EEPROM, non hai nessuna alternativa al cambio di tipologia di processore, anche perché con un codice di queste dimensioni sicuramente un 8 bit è troppo piccolo per gestirlo bene.

Ok perfetto. Allora proverò a sviluppare il codice e vi terrò aggiornati.

Grazie a tutti per le risposte!

Facendo una media, pensare che una ogni riga di codice C sia 5 byte in codice macchina, 256K / 5 = 52.400 righe