Problema librerie

Ragazzi, ho un problema... ho scritto un programma ma lo spazio sulla board mi sta stretto. Sapete per caso se sia possibile estrarre le vari procedure che utilizzo dalle librerie, così da recuperare spazio?

Maniele856:
Ragazzi, ho un problema... ho scritto un programma ma lo spazio sulla board mi sta stretto. Sapete per caso se sia possibile estrarre le vari procedure che utilizzo dalle librerie, così da recuperare spazio?

Il compilatore già si porta dietro solo ciò che realmente gli serve ... quindi hai poco da fare ...

Su che Arduino sei ? Che librerie stai usando ? Dai qualche dettaglio in più ...

Guglielmo

Ciao... io sono su Arduino 1, e sto usando le librerie EEPROM, WIRE, SPI, TOUCHSCREEN, ADAFRUIT_GFX, ADAFRUIT_LCDTFT E LIQUIDCRYSTALDISPLAY_I2C

gpb01:
Il compilatore già si porta dietro solo ciò che realmente gli serve ... quindi hai poco da fare ...

Su che Arduino sei ? Che librerie stai usando ? Dai qualche dettaglio in più ...

Guglielmo

Comunque ho appena verificato aggiungendo un'altra libreria... Non è vero che il compilatore si porta dietro solo lo stretto necessario, infatti solo aggiungendo la libreria e senza utilizzare nulla di essa, la dimensione del programma è cresciuta di circa un megabyte.

Maniele856:
... infatti solo aggiungendo la libreria e senza utilizzare nulla di essa, la dimensione del programma è cresciuta di circa un megabyte.

Che Arduino hai?
Che io sappi un Arduino ha solo 32kByte di Memoria Flash

Ciao Uwe

Maniele856:
Comunque ho appena verificato aggiungendo un'altra libreria... Non è vero che il compilatore si porta dietro solo lo stretto necessario, infatti solo aggiungendo la libreria e senza utilizzare nulla di essa, la dimensione del programma è cresciuta di circa un megabyte.

... tutto il codice non utilizzato non viene linkato, se ci sono costanti statiche probabilmente quelle restano e comunque ... un MEGABYTE ? ? ? :o :o :o Ma di che stiamo parlando ? ? ?

Guglielmo

Maniele856:
Ciao... io sono su Arduino 1, e sto usando le librerie EEPROM, WIRE, SPI, TOUCHSCREEN, ADAFRUIT_GFX, ADAFRUIT_LCDTFT E LIQUIDCRYSTALDISPLAY_I2C

Mi da l'idea che vuoi lavorare con display grafici/touch ...
... salvo piccole cose che ancora riesci a fare con la UNO ... ho idea che dovrai passare alla MEGA.

Guglielmo

gpb01:
... tutto il codice non utilizzato non viene linkato, se ci sono costanti statiche probabilmente quelle restano e comunque ... un MEGABYTE ? ? ? :o :o :o Ma di che stiamo parlando ? ? ?

Guglielmo

//#include <pin_magic.h>
//#include <registers.h>

semplicemente commentando queste due librerie che non utilizzavo (me le aveva messe in automatico l'IDE) ho recuperato circa 800kb... Cambiare board??? Ragazzi, la mia domanda è: posso spostare le routine che effettivamente uso dalle varie librerie direttamente nel mio programma, così da ridurre al massimo lo spazio sprecato? :wink:

gpb01:
Mi da l'idea che vuoi lavorare con display grafici/touch ...
... salvo piccole cose che ancora riesci a fare con la UNO ... ho idea che dovrai passare alla MEGA.

Guglielmo

Credo che mi basti la UNO... non che ci sia particolarmente affezionato capiamoci XD

Dovresti "scriverti" le librerie in modo da usare esclusivamente quello che ti serve. Credo che il lavoro in termini di tempo sia tale da giustificare il cambio di scheda.

Mmmmm... no, veramente io pensavo più che altro di spostare letteralmente il codice dalla libreria al mio file... solo che non avendolo mai fatto non so se sia possibile fare "copia-incolla"... sto provando ad editare i file .h e .cpp delle librerie così da tagliare via tutte le procedure che non mi sono necessarie... poi semmai vi faccio sapere se ne esco vivo :wink:

Maniele856:
//#include <pin_magic.h>
//#include <registers.h>

semplicemente commentando queste due librerie che non utilizzavo (me le aveva messe in automatico l'IDE) ho recuperato circa 800kb...

@Maniele856: non ci capiamo ... Arduino UNO ha in tutto 32 KBytes di flash (la memoria dove viene messo il programma) ...

NON è fisicamente possibile né un programma di N MBytes, né che delle librerie per Arduino UNO occupino 800 KBytes, quindi ...
... o riporti i dati esatti o non sappiamo che dirti. ::slight_smile:

Guglielmo

gpb01:
@Maniele856: non ci capiamo ... Arduino UNO ha in tutto 32 KBytes di flash (la memoria dove viene messo il programma) ...

NON è fisicamente possibile né un programma di N MBytes, né che delle librerie per Arduino UNO occupino 800 KBytes, quindi ...
... o riporti i dati esatti o non sappiamo che dirti. ::slight_smile:

Guglielmo

Mea culpa... 800 Bytes non 800 kBytes...

... t'ho già detto che se la libreria prevede delle cose "statiche" (es. costanti, valori in PROGMEM, ecc.) quelle probabilmente il compilatore non le trascura, ma tutto il codice non usato sicuramente non se lo porta dietro.

Altra cosa, quando si indicano librerie o quant'altro, si mette il link, visto che noi NON abbiamo la palla di vetro e non necessariamente sappiamo di cosa stai parlando (es. io ignoro a cosa si riferiscano le include che hai citato).

Guglielmo

Ci sono anche librerie che all'interno del file .H dichiarano un oggetto al posto dell'utente e quindi è come se la utilizzassi anche se in apparenza non fai nulla nel codice. Ad esempio Firmata.

Comunque per rispondere alla tua domanda: si.
Puoi copiare il contenuto delle librerie nello sketch. Ma vedrai che tra riferimenti incrociati, dichiarazioni di variabili e costanti, funzioni che richiamano funzioni... alla fine è più semplice fare un #include libreria. :slight_smile:

gpb01:
... t'ho già detto che se la libreria prevede delle cose "statiche" (es. costanti, valori in PROGMEM, ecc.) quelle probabilmente il compilatore non le trascura, ma tutto il codice non usato sicuramente non se lo porta dietro.

Altra cosa, quando si indicano librerie o quant'altro, si mette il link, visto che noi NON abbiamo la palla di vetro e non necessariamente sappiamo di cosa stai parlando (es. io ignoro a cosa si riferiscano le include che hai citato).

Guglielmo

Innanzitutto stai calmino... perchè vedo che la stai prendendo un pochettino sul personale. In più, non ho chiesto aiuto sulla libreria in particolare, ho chiesto se è possibile copiare solo la parte di codice che effettivamente mi serve nel mio programma principale (E questo prescinde dal fatto che la libreria sia la Wire o la EEPROM)... Ho fatto una domanda per consultare chi ne sà più di me, ma vedo che non sei tra essi, visto che hai semplicemente ricordato che la massima memoria del ATmega328p è di 32kB e che il compilatore non ignora le eventuali variabili/costanti della libreria... io ho chiesto un consiglio su altro.

Comunque grazie lo stesso dell'attenzione.
Senza nulla a pretendere :wink:

PaoloP:
Comunque per rispondere alla tua domanda: si.
Puoi copiare il contenuto delle librerie nello sketch. Ma vedrai che tra riferimenti incrociati, dichiarazioni di variabili e costanti, funzioni che richiamano funzioni... alla fine è più semplice fare un #include libreria. :slight_smile:

Sono decisamente d'accordo con te, anch'io preferisco #include, più che altro per la velocità, altrimenti quando posso mi scrivo il tutto da solo ma ciò richiede tempo... l'unico problema è che mi sto avvicinando alla massima dimensione del programma... infatti se non riesco ad ovviare sfoltendo la libreria sarò costretto ad eliminare il bootloader di arduino per avere 0.5 miseri kB in più...

Puoi provare ad aggiungere la flag del compilatore (linker) --gc-sections, come fare ciò con l'ide arduino non so dirtelo, ricordo che si può fare. gc section significa garbage collect, abilitandola, una definizione di variabile non referenziata (cioè non usata) viene inserita nella spazzatura. Attenzione che se usi allocare memoria in eeprom tramite EEMEM e non usi le variabili (oltre la dichiarazione definizione) anche queste finiscono nella spazzatura e la eeprom risulta vuota.

Nella spazzatura ci finisce tutto anche quello che è statico, sempre se non usato (cioè non referenziato).

Ciao.

Maniele856:
Innanzitutto stai calmino... perchè vedo che la stai prendendo un pochettino sul personale.

Premesso che "Stai calmino" lo dici ad un tuo parente e non a me ...
... chiariamo che, dato che portavi esempi specifici, ti ho chiesto link specifici, perché altrimenti come si fa a verificare/provare le occupazioni che segnali ?

Tutto qui. Di personale t'assicuro non c'è nulla, anche perché ... non vedo cosa potrebbe esserci ... ::slight_smile:

Guglielmo