ho un un fastidioso problema con una #define. Devo parametrizzare la configurazione dei pin usati in una libreria.
Ho messo le #ifdef nella libreria e poi la #define nello sketch ma sembra non trovarla. Funziona bene se l'include nello sketch è un file header che contiene esso stesso le #ifdef (e poi la #define nello sketch). Il mio caso però è un pò più complesso perchè l'header arriva da una inclusione di inclusione. Per intenderci il file .h nello sketch include a sua volta un altro file .h che in include alla fine l'ultimo della catena contenente la #idef. Una catena fatta così non viene "risolta" in modo corretto ponendo la #define nello skecth... e non funziona nemmeno se metto la #define prima dell'inclusione del file header principale, per intenderci quello iniziale della catena.
Vi risultano buchi nel preprocessore che gestisce le #define nell'IDE
Si come ho scritto l'ho già fatto.... addirittura l'ho messo come prima riga dello sketch (il file .h decine di righe dopo) ... se n'è fregato altamente
alexbn:
Ho messo le #ifdef nella libreria e poi la #define nello sketch ma sembra non trovarla
E non te la troverà mai perché le #define sono valide solo all'interno dello stesso file, devi usare un .h con tutte le define e includerlo nella libreria/e e/o in tutti i file di programma (.c, .pde, .ino) dove devi usare queste #define.
In genere includo solo il file header principale e poi l'IDE risolve le altre dipendenze includendo tutti i file della catena. Ho quindi creato un "case test" minimale. Anche su questo si presenta lo stesso problema, ma riesco a risolverlo (solo sul case test) includendo in maniera esplicita tutti i file header della libreria, "anticipando" il lavoro del pre-processore. In questo modo (ma solo in questo ) la #define viene correttamente gestita.
Purtroppo però l'escamotage non funziona sul mio progetto ... includendo tutti i file della catena .h non risolvo mi da sempre un errore sull'inesistenza della #define.
astrobeed:
E non te la troverà mai perché le #define sono valide solo all'interno dello stesso file
Uhmmm scusa ma normalmente le #define che metto nello sketch sono viste dal "primo livello" di .h incluso. In questo caso non vengono viste perchè gli .h si includono tra loro.
, devi usare un .h con tutte le define e includerlo nella libreria/e e/o in tutti i file di programma (.c, .pde, .ino) dove devi usare queste #define.
includerlo nella libreria non andrebbe bene perchè non avrei più una libreria valida per tutti gli sketch. Includere un .h nello sketch con solo queste #define dentro non ha funzionato.
La mia esigenza è semplice. Ho UNA libreria che però voglio usare su due sketch diversi. Sono destinati a due ardu diverse quindi lo scopo sarebbe mantenere una sola libreria e poter "riconfigurare" i pin direttamente dallo sketch dove dirgli ad es. #define ARDU_ETH o #define ARDU_MINI.
Potresti crearti 2 configurazioni personalizzate del fili pins_arduino.h
Poi crei 2 nuove board nel file board.txt e modifichi solo la parte relativa ai pin (nomescheda.build.variant=miaconfigurazionepin)
Io non l'ho mai fatto, ma teoricamente funzione.
Il problema è che senza queste modifiche la libreria non è portabile.
Apprezzo l'idea ma vorrei qualcosa che non richieda poi troppa memoria per ricordarsi cosa e come ho customizzato l'ambiente. Qualcosa che se sposto i file del progetto altrove vada sempre bene con qualsiasi installazione dell'IDE. Quindi qualcosa da ficcare nel folder dello sketch o meglio ancora come vorrei, nello sketch stesso. La cosa che non capisco è che il "case test" che ho allegato poco sopra funziona se includo esplicitamente i "sotto header" direttamente nello sketch. Sul mio bello pienotto di altro codice NO... non capisco da cosa possa dipendere e cosa possa c'entrare la presenza di altro codice...forse solo che l'IDE va più facilmente nel pallone?