Vai al contenuto
PLC Forum


Errori Di Compilazione In C - Errori di compilazione PICCLITE


sfinge

Messaggi consigliati

Il messaggio precedente era incompleto scusatemi.

Inanzitutto salve a tutti, e scusatemi della mia ignoranza in materia,ma veniamo al dunque.

Ho tentato di eseguire un piccolo programmino in C composto da due file main.c e percentu.c.

Nel file principale ovvero il main.c ho inserito una chiamata ad il sottoprogramma chiamato CALCOLO_PERCENTUALE. In quest'ultimo il programma dovrebbe effettuare un calcolo di percentuale fornendo al sottoprogramma stesso due dati ovvero;"percentuale" e "ritardo" (che è il dato da cui ricavare la percentuale).

Il sottoprogramma dovrebbe fornire il risultato al programma principale all'interno della variabile "cont_percent".

Ho cercato di fare le cose da manuale,ma quando vado a compilare il tutto mi da vari errori di compilazione.

Dove sbaglio?? Qualcuno sarebbe cosi gentile da potermi aiutare??. GRAZIE

//********************************MAIN***************************************

#include<pic1687x.h>

#include"PERCENTU.C"

unsigned char RITARDO = 0x64;

unsigned char PERCENTUALE = 0X4b;

unsigned char CONT_PERC;

void main (void)

{

TRISC = 0X00;

char CALCOLA_PERCENTUALE (char RITARDO,char PERCENTUALE);

PORTC = CONT_PERC;

}

//*********************************PERCENTU***************************************

float CONTEGGIO; //contiene valore di conteggio per tmr0 prima dell'overflow.

char CALCOLA_PERCENTUALE (char RITARDO,char PERCENTUALE)

{

CONTEGGIO = 255 - RITARDO; //ricava il valore da scalare in % per tmr0.

CONT_PERC = (CONTEGGIO / 100.0) * PERCENTUALE; //scala valore in percentuale.

(unsigned int) CONT_PERC; //conversione float >> int

(unsigned char) CONT_PERC; //conversione int >> char

CONT_PERC = 255 - CONT_PERC; //scalto in %.

return(CONT_PERC); //restituisce valore

}

Link al commento
Condividi su altri siti


Ciao,

non conosco il PICC_LITE_C,

ma un pò di C sì.

Da vedere così,

la variabile "CONT_PERC" è locale al modulo MAIN...

quindi, non è visibile al modulo che contiene la funzione della percentuale.

Prova a creare un file header (.h), dove dichiari la variabile.

POi lo includi a entrambi i moduli .C, e non dovresti avere grossi problemi.

Ciao e sappimi dire,

Cesco.

Modificato: da Cesco
Link al commento
Condividi su altri siti

Sperando che sia effettivamente quello il problema,

sì: devi salvare un file in formato ".h".

Occhio perchè lì dovrai mettere l'"EXTERN" della variabile (in questo caso, dovrai scrivere "extern unsigned char CONT_PERC"), richiamarlo nei 2 c con la stringa "#include nomefile.h",

e in uno dei due C, dichiarare la variabile (quindi... "unsigned char CONT_PERC").

Spero di essere stato abb chiaro, :)

provaci e sappimi dire.

Ciao,

Cesco.

Link al commento
Condividi su altri siti

Grazie Cesco intanto che siamo nella discussione,ti chiedo un'altra cosa.

Quando vado a creare un qualsiasi file.c sono obbligato a iniziare il programma con void main (void){

}

altrimenti ho un errore di compilazione.

Se questo file pero' lo devo associare ad un'altro (dove è gia' presente void main (void), cosa faccio lo compilo

e poi lo cancello salvandolo senza il main void?

E' corretta la procedura?

Grazie ancora Ciao

Link al commento
Condividi su altri siti

Torno a sottolineare che non conosco quel compilatore,

ma, teoricamente, dovrebbe esserci il modo per aggiungere al progetto nuovi file .c (solitamente c'è un albero del progetto, da cui riesci ad aggiungere ed eliminare tutti i moduli che compongono il progetto).

Così facendo, tu ti crei il tuo... lo aggiungi, tramite quel sistema, e il compilatore lavorerà in modo corretto, cercando un solo MAIN.

Ciao,

Cesco.

Link al commento
Condividi su altri siti

Salve.

Da una rapida lettura del programma posso dirti che:

1. Avendo incluso il file PERCENTU.C è come se fosse un unico file, quindi, non ci sono moduli esterni, solo che la funzione non vede la variabile CONT_PERC perchè viene dichiarata dopo;

2. Quella che hai messo nel main

char CALCOLA_PERCENTUALE (char RITARDO,char PERCENTUALE);
non è una chiamata ma una dichiarazione della funzione CALCOLA_PERCENTUALE, devi scrivere
 CONT_PERC = CALCOLA_PERCENTUALE (RITARDO, PERCENTUALE);
3. La funzione restituisce il valore della variabile CONT_PERC, cosa non necessaria se tale variabile è una variabile globale. 4. L'istruzione
CONT_PERC = (CONTEGGIO / 100.0) * PERCENTUALE; //scala valore in percentuale.
non ti da un risultato corretto perchè CONT_PERC l'hai dichiarata come unsigned char e non può contenere un float. 5. L'istruzione
(unsigned int) CONT_PERC; //conversione float >> int

converte il valore contenuto in CONT_PERC in intero ma lo salva in una variabile temporanea, che non viene utilizzata, e non in CONT_PERC che rimane inalterata.

Spero di essere stato abbastanza chiaro.

Ciao.

Modificato: da giacomo56
Link al commento
Condividi su altri siti

Giusto Giacomo... altre piccole cosette che non mi erano balzate subito all'occhio.

Ma, domanda di teoria del C, è possibile includere file "C" uno all'interno dell'altro? Io non l'ho mai visto fare...

Ma sopratutto... che logica c'è nel linkare un c ad un'altro? Non conviene, sempre che sia effettivamente fattibile, avere un modulo C unico??

Ciao,

Cesco.

Link al commento
Condividi su altri siti

Si normalmente i programmi di una certa grandezza sono divisi in più file .c che vengono compilati separatamente e poi linkati insieme. Il programma precedente invece è costituito da un unico modulo. Il nome del file incluso che sia .c o .h o .inc è lo stesso.

Ciao.

Modificato: da giacomo56
Link al commento
Condividi su altri siti

Sì, giusto.

Assolutamente d'accordo. Anche i miei SW sono composti da vari file C, ma non ho mai incluso un modulo in un altro...

ma effettivamente, ripensandoci, in fase di linker tutto viene unito!!!!

Ok,

scusa la banalità!

Ciao e grazie,

Cesco.

Link al commento
Condividi su altri siti

Grazie Giacomo , percui nel main devo mettere questo per richiamare la funzione?

CONT_PERC = CALCOLA_PERCENTUALE (RITARDO, PERCENTUALE);

questa che ho scritto non serve a nulla?non la devo scrivere nemmeno nel file linkato?

char CALCOLA_PERCENTUALE (char RITARDO,char PERCENTUALE);

Come faccio a dire al compilatore PCCLITE che ho uno o piu' file da linkare?

E' sufficente dichiarare #include "percentu.c";

Inoltre se definisco CONT_PERC come globale all'uscita dalla funzione dovrei avere il mio valore?

Grazie ancora ciao!

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...