Alleggerire Librerie

Buon pomeriggio a tutti, ho creato uno Sketch per Arduino UNO ma sto avendo problemi di "memoria dinamica" troppo occupata..

"Lo sketch usa 18646 byte (57%) dello spazio disponibile per i programmi. Il massimo è 32256 byte.
Le variabili globali usano 1572 byte (76%) di memoria dinamica, lasciando altri 476 byte liberi per le variabili locali. Il massimo è 2048 byte.Poca memoria disponibile, potrebbero presentarsi problemi di stabilità"

Ho fatto un "piccolo esperimento" lasciando solo il codice essenziale di uno Sketch ed inserendo solo una Libreria :

// Prova per Verifica occupazione Memoria Dinamica 

#include "Libreria_in_oggetto.h"


void setup()
{

}

void loop(void)
{

}

Ho rifatto la compilazione :

"Lo sketch usa 2226 byte (6%) dello spazio disponibile per i programmi. Il massimo è 32256 byte.
Le variabili globali usano 1124 byte (54%) di memoria dinamica, lasciando altri 924 byte liberi per le variabili locali. Il massimo è 2048 byte."

Cavolo..pensavo che cancellando le variabili la memoria diventasse quasi zero... invece no.
A sto punto la domanda sorge spontanea.. Le librerie si possono "alleggerire" ?
Si possono togliere le istruzioni non utilizzate all'interno dello Sketch?
Farne una personalizzata da utilizzare solo un questo Sketch.
Se non ho capito male se io inserisco la Libreria in questo modo :

#include "Libreria_in_oggetto.h"

il compilatore la cercherebbe prima nella cartella dello Sketch e, se non la trova, nella cartella di default, è corretto? ( L'ho letto su un libro che ho preso da poco ed ho acquistato di recente "Arduino , la guida essenziale" ).

Dite è fattibile o sto dicendo delle castronerie?

Grazie

Il compilatore è piuttosto "intelligente" e ... include SOLO quello che ritiene strettamente necessario.

Se quella libreria ha bisogno di un certo numero di bytes di SRAM ... evidentemente ci sono variabili statiche allocate (es. buffers) che non puoi eliminare, pena ... il mancato funzionamento della libreria.

Purtroppo Arduino UNO ha solo 2 KBytes di SRAM ... all'aumentare delle esigenze ocorre cominciare a pensare di prendere qualche cosa di più grande (es. Arduno MEGA).

Guglielmo

Ciao, in effetti può essere come dici.
Nella "mia ignoranza di C" stavo guardando e nella libreria ci sono parecchi riferimenti a molte variabili per la configurazione dell Shield che utilizza questa libreria..
Cavolo però... quasi quasi scrivo al produttore dello Shield, ed anche compilatori della libreria, per capire se è "normale" che una libreria occupa il 54% di un Arduino UNO.. quasi improponibile, mica deve comandare lo shuttle per la luna :smiley: :smiley: .. A sto punto mi viene da chiedermi quante altre migliaia di istruzioni ci sono in una libreria così :slight_smile:
e pensare che l'hanno fatta apposta per Arduino UNO..
L'ho provata anche sul Mega ma devo modificare alcuni collegamenti interni, eliminando alcuni piedini e saldandone altri.. funziona, però usare un Mega solo per quello mi pare esagerato.. oltretutto mi occupa pure il BUS SPI, anche in questo caso ho scritto loro per farmi mandare documentazione, ma per ora..picche.. e non parlo di modulini "cinesi" ( con rispetto parlando per questi modulini), ma di moduli da 50Euro :roll_eyes: :roll_eyes:

Saluti

Spesso è perché si vuole far fare ad una piccola MCU, nata per piccoli controlli, cose ben più complesse di quelle per cui è progettata e che andrebbero fatte fare a MCU di altra categoria … ::slight_smile:

Guglielmo

.. può essere, ma non nel mio caso.. :slight_smile:
Io devo solo inviare un dato via radio da un arduino ad un altro :slight_smile:

Mi sa che per progetti più complessi cercherò qualcosa di più leggero :slight_smile:

longiarduino:
.. può essere, ma non nel mio caso.. :slight_smile:
Io devo solo inviare un dato via radio da un arduino ad un altro :slight_smile:

Non è detto ...
... Se hai "sbagliato" la scelta del :smiley: trasmettitore e ne hai preso uno fatto per comunicare con gli "astronauti sulla luna", beh, ovviamente, richiede mooooolto più codice che se avessi usato ... due volgarissimi HC-11/HC-12 :grin:

Guglielmo

Ciao, quelli ne avevo sentito parlare e mi sembrano mooooolto ma moooolto più comodi :slight_smile: :slight_smile: Se non ho capito male sono paragonabili ad una seriale , ma mi hanno detto non arrivano a più di 1 km in linea d'aria senza ostacoli .. a me ne servono di più . :wink: e molta più affidabilità anche ( non che non siano affidabili ... :slight_smile: ma se c'è questa grossa differenza di prezzo un motivo ci sarà ).

Peccato, ho dovuto provare con gli altri moduli, ma mettendo le varie librerie che mi servono ( in tutto 3 ) arrivo al 73% di memorie su Arduino UNO... finirò per usare almeno un Mega 2560 e ne approfitto per fargli fare altre cosette di piccola automazione.

Comunque se "alleggerire " le librerie non si può, o meglio dire forse è un po' troppo complicato , possiamo chiudere il Post.

Grazie mille per le Info .

Buona serata

Ciao