- Messaggi: 4
- Ringraziamenti ricevuti 0
Conflitto compilazione mia "libreria"
8 Anni 5 Mesi fa - 8 Anni 5 Mesi fa #1
da Cicche
Conflitto compilazione mia "libreria" è stato creato da Cicche
Salve,
sto seguendo il manuale per XC18 con le librerie 3. (visto che gli esempi calzano su quelle).
Ora mi ritrovo nei capitoli Funzioni e Libreria, ho colto l'occasione per provare un motorino passo passo implementando 3 funzioni che fanno muovere rispettivamente l'albero di 180°, 90° e 45° in modo che sul main posso richiamare la funzione invece che riscrivere tutto il codice.
Ho un piccolo problema che non riesco a capire e da poco risolto dichiarando il prototipo di funzione sul main:
nel file Rotazioni.c ho dovuto includere la libreria delay.c, tutto funziona finché non ho deciso di implementare sul main le chiamate alle 3 funzioni con relativi BTN (ho una scheda di sviluppo FreedomII).
Inserendo un ritardo per antirimbalzo (con funzione delay_ms) il compilatore mi va in conflitto restituendomi:
"conflicting declarations for variable "_delay_ms" (main.c:26)"
sia passandogli un valore nella funzione che una variabile dichiarata all'interno dell'IF antirimbalzo.
In pratica mi par di aver capito che avendo già dichiarato un valore in Rotazioni.c non posso rifarlo nel main?
Ho trovato due soluzioni ma non capisco se è così che si deve comportare...
1. Sostituisco pausa l'antirimbalzo con un ciclo for (ma vorrei poter usare le librerie delay anche nel main)
2. Includendo il prototipo di funzione sul main "void delay_ms (unsigned int value_ms);" il programma mi viene compilato. Ma non è il file .h di delay che dovrebbe già farlo?
Dove sbaglio?
sto seguendo il manuale per XC18 con le librerie 3. (visto che gli esempi calzano su quelle).
Ora mi ritrovo nei capitoli Funzioni e Libreria, ho colto l'occasione per provare un motorino passo passo implementando 3 funzioni che fanno muovere rispettivamente l'albero di 180°, 90° e 45° in modo che sul main posso richiamare la funzione invece che riscrivere tutto il codice.
Ho un piccolo problema che non riesco a capire e da poco risolto dichiarando il prototipo di funzione sul main:
nel file Rotazioni.c ho dovuto includere la libreria delay.c, tutto funziona finché non ho deciso di implementare sul main le chiamate alle 3 funzioni con relativi BTN (ho una scheda di sviluppo FreedomII).
Inserendo un ritardo per antirimbalzo (con funzione delay_ms) il compilatore mi va in conflitto restituendomi:
"conflicting declarations for variable "_delay_ms" (main.c:26)"
sia passandogli un valore nella funzione che una variabile dichiarata all'interno dell'IF antirimbalzo.
In pratica mi par di aver capito che avendo già dichiarato un valore in Rotazioni.c non posso rifarlo nel main?
Ho trovato due soluzioni ma non capisco se è così che si deve comportare...
1. Sostituisco pausa l'antirimbalzo con un ciclo for (ma vorrei poter usare le librerie delay anche nel main)
2. Includendo il prototipo di funzione sul main "void delay_ms (unsigned int value_ms);" il programma mi viene compilato. Ma non è il file .h di delay che dovrebbe già farlo?
Dove sbaglio?
Ultima Modifica 8 Anni 5 Mesi fa da Cicche.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Cicche
- Autore della discussione
- New Member
Riduci
Di più
8 Anni 5 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Conflitto compilazione mia "libreria"
Ciao Cicche,
potresti fare lo zip del progetto e allegarlo.
In questo modo possiamo vedere i dettagli delle varie inclusioni.
In generale il file .c lo includo solo nel file main mentre negli altri file dove uso la libreria includo il file .h (incluso nel main)
Saluti,
Mauro
potresti fare lo zip del progetto e allegarlo.
In questo modo possiamo vedere i dettagli delle varie inclusioni.
In generale il file .c lo includo solo nel file main mentre negli altri file dove uso la libreria includo il file .h (incluso nel main)
Saluti,
Mauro
Ringraziano per il messaggio: Cicche
Si prega Accedi o Crea un account a partecipare alla conversazione.
8 Anni 5 Mesi fa #3
da Cicche
Risposta da Cicche al topic Conflitto compilazione mia "libreria"
Ecco qui..
è un po' incasinato con i commenti
è un po' incasinato con i commenti
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Cicche
- Autore della discussione
- New Member
Riduci
Di più
- Messaggi: 4
- Ringraziamenti ricevuti 0
8 Anni 5 Mesi fa #4
da Cicche
Provato, funziona!!
Grazie!
Risposta da Cicche al topic Conflitto compilazione mia "libreria"
Mauro Laurenti ha scritto: Ciao Cicche,
In generale il file .c lo includo solo nel file main mentre negli altri file dove uso la libreria includo il file .h (incluso nel main)
Saluti,
Mauro
Provato, funziona!!
Grazie!
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Cicche
- Autore della discussione
- New Member
Riduci
Di più
- Messaggi: 4
- Ringraziamenti ricevuti 0
8 Anni 5 Mesi fa #5
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Conflitto compilazione mia "libreria"
Bene!
Considera pero' che il file header sebbene vengano messi in ogni file, ne verra' incluso solo uno.
Nel caso in cui l'ordine di inclusione non e' corretto e un file che usa la libreria viene compilato prima che il file di header venga incluso, l'aver incluso il file di header in ogni file aiuta.
Includendo il file di header in un solo file puo' richiedere nei file secondari di dichiarare la funzione come extern, cosi anche per eventuali variabili globali.
Saluti,
Mauro
Considera pero' che il file header sebbene vengano messi in ogni file, ne verra' incluso solo uno.
Nel caso in cui l'ordine di inclusione non e' corretto e un file che usa la libreria viene compilato prima che il file di header venga incluso, l'aver incluso il file di header in ogni file aiuta.
Includendo il file di header in un solo file puo' richiedere nei file secondari di dichiarare la funzione come extern, cosi anche per eventuali variabili globali.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.