Utilizzo di #define e riconoscimento nelle librerie

Salve, è possibile utilizzare le direttive #define e #ifdef tra sketch e librerie?
Mi spiego meglio, se li utilizzo entrambi nello sketch o entrambi in una libreria tutto funziona a meraviglia, se invece in una librerie inserisco il #ifdef e metto il corrispondente #define nello sketch (prima di caricare la libreria) che a sua volta richiama la libreria in oggetto allora l' #ifdef della libreria non viene riconosciuto e caricato.
Spero di essermi spiegato bene.
Grazie
Luciano

non c'è nessuno che riesca a darmi una mano?
la mia esigenza è di far eseguire alcune istruzioni in una libreria piuttosto che altre ma scegliendo quali dallo sketch stesso, visto che ognuna occupa tanta memoria ho bisogno di sceglierne 1 alla volta, ma se utilizzo variabili che passo alla libreria allora tutte le possibilità vengono caricate in memoria, per questo utilizzo i #define .

che versione di ide hai?

1.5.4

Fino alla 1.6.5 succede questo:
l'ide Arduino preleva indistintamente tutti gli include e li va a compilare, poi il compilatore vero e proprio esegue le direttive, solo che in questo passaggio tutte le varie variabili globali vengono incluse comunque facendo sprecare la memoria.
l'unica soluzione è provare con le più recenti versioni dell'ide

no ma forse mi sono spiegato male, non utilizzo gli #incude ma i #define
se io nello sketch principale metto:

#define ciao
#include <ciccio.h>

e nella libreria ciccio.h aggiungo:

#ifdef ciao
operazione 1
operazione 2
operazione 3
#endif

le operazioni da 1 a 3 non mi vengono eseguite, in pratica lo sketch non passa il "#define ciao" alla libreria usata.

anche quello è colpa dell'ide, ma questa volta non puoi nemmeno provare con IDE più aggiornati.
Tutto ciò avviene perché prima viene compilato il core poi le librerie e infine il tuo firmware, quindi la libreria al momento di essere compilata non è a conoscenza di quelle definizioni.
unica soluzione è crearsi il proprio makefile.

Non ci sono altre soluzioni alla mia esigenza?
mi spieghi cosa è il makefile? vedo se riesco a farlo...
Grazie di tutto.

il makefile è un file che viene dato in pasto al programma make, o chi ne fa le veci.
Il make sostanzialmente è un'automatismo sul processo di compilazione.
l'ide di Arduino si sostituisce al makefile e prende le redini su come e cosa compilare, quindi se ti crei il tuo makefile e compili da riga di comando, bypassando Arduino, puoi fare ciò che ti pare.
Se cerchi in rete "Arduino Makefile" ne trovi di già pronti solo da modificare.

ok, grazie mille, faccio un pò di ricerche e vedo come risolvere, grazie mille, gentilissimo!

@LucianoArdu : Io però, prima di buttarmi a fare un makefile, un tentativo con la nuova versione dell'IDE (la 1.6.6) lo farei ... la logica di compilazione è cambiata parecchio ... visto mai ... ::slight_smile:

Guglielmo

Grazie Guglielmo, faccio prima questo tentativo allora.
Se ottengo risultati vi informo immediatamente :wink:
Grazie ancora.

Ho istallato la versione aggiornata, ma in compilazione (a parità di listato, librerie ecc..) mi escono una marea di errori, di conversioni impossibili tra string e *char ...ed altro....
sono tornato alla versione 1.5.4 per ora, al momento non riesco ad avere il tempo di verificare e correggere gli errori, ma appena posso faccio il tutto e vi aggiorno.
Grazie Guglielmo.

... probabilmente stai usando librerie un po' datate ... magari guarda se ci sono degli aggiornamenti.

Se continui ad avere degli errori, prova a riportarli qui che li guardiamo con te.

Guglielmo

Grazie Guglielmo,
appena ho modo di potermi dedicare a questa cosa lo farò sicuramente e condividerò le mie problematiche :wink: