Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Direttiva #error mplab c18

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Direttiva #error mplab c18

Messaggioda Foto UtenteMarcRider » 20 feb 2012, 21:27

Salve a tutti,
sto scrivendo una libreria per alcuni mie progetti, e volevo inserire un po di controlli.
Ad esempio non sapevo che il c non avesse l'override delle funzioni ( se non è così illuminatemi :-P ) e quindi scrivo la stessa funzione con un nome diverso che accetta gli stessi parametri e altri parametri aggiuntivi, vorrei però fare in modo che se ovviamente uso una funzione con meno parametri, non vado poi ad usarne un'altra con più parametri che fa la stessa cosa più altre operazioni, sarebbe un inutile spreco di istruzioni. Ragion per cui volevo aggiungerci i warning e gli error.

Purtroppo seguendo la guida c18 step by step e cercando anche in giro non ho ben capito come usarli. Ho provato anche a guardare i documenti di scrittura del c, ma continua a darmi errore il compilatore. ecco qui cosa ho cercato di fare:

Codice: Seleziona tutto
   Controllo++;
   if (Controllo != 1)
   {
   #error non va bene cosi.
   }


Dove controllo è una variabile globale che all'uso di una funzione si incrementa, se usassi più volte la stessa funzione si incrementerebbe più di uno e in questo caso mi deve generare l'errore non permettendo di compilare il codice.

Ho provato a scrivere a logica anche così:

Codice: Seleziona tutto
   Controllo++;
   #if (Controllo != 1)
   #error "non va bene cosi."
   #endif


ed ho provato altre soluzioni senza avere nessuno buon risultato.
Probabilmente ho ragionato che non va usato all'interno di una funzione, forse è una direttiva che devo specificare in maniera globale. Anzi penso che sia proprio così. Ma allora come faccio per creare una lista di possibili errori, e utilizzarli quando alcune condizioni si vengono a verificare?

Grazie in anticipo di un vostro parare,
Marco Novelli.
Avatar utente
Foto UtenteMarcRider
5 1 4
New entry
New entry
 
Messaggi: 53
Iscritto il: 16 feb 2012, 17:37

0
voti

[2] Re: Direttiva #error mplab c18

Messaggioda Foto UtenteAjKDAP » 20 feb 2012, 21:45

hmm

Codice: Seleziona tutto
controllo++;


è un'operazione che viene eseguita a run-time, durante l'esecuzione del codice nel micro in tempo reale.

mentre questa ad esempio:

Codice: Seleziona tutto
#ifdef xxx


viene gestita in fase di compilazione. Quindi nel tuo caso il compilatore si fermerà sempre alla riga dove hai posizionato l'errore perché compilando il tuo codice prima o poi arriverà sempre a quella riga.

il contollo di quante voltè viene richiamata una funzione penso si possa fare solamente a runtime, o sbaglio?

Hmm, potresti fare un esempio più concreto di quello che vorresti evitare utilizzando questi "controlli" ?
'˙˙˙·٠•● Alberto ●•٠·˙˙˙'
________________________
http://www.ajk.altervista.org
Avatar utente
Foto UtenteAjKDAP
1.255 2 6 9
Expert EY
Expert EY
 
Messaggi: 796
Iscritto il: 17 mag 2006, 0:13
Località: nella coda dei pronti

0
voti

[3] Re: Direttiva #error mplab c18

Messaggioda Foto UtenteMarcRider » 20 feb 2012, 21:57

Infatti hai perfettamente ragione, è che sono abituato a ragionare in dot net.

In pratica il mio obbiettivo era quello di fare:

Codice: Seleziona tutto
void pippo(unsigned char a)
{
a ... fai qualcosa
}

void pippoPazzo(unsigned char a, unsigned int b)
{
pippo(a);
b ... fai qualcosa
}




ovviamente con l'override la faccenda è semplice perché in runtime il programma esegue la funzione che si è scelta con i parametri che vai ad utilizzare, ma siccome pensavo di poter passare la libreria a chiunque me la chiedesse, e quindi erroneamente, andasse ad usare sia pippo, che pippopazzo, rischirebbe di riempire inutilmente la memoria e comunque non avrebbe alcun senso usare una funzione che la stessa cosa due volte, o per lo meno, sto sviluppando una libreria in cui non avrebbe senso usare le funzioni così.

Quindi io ero abituato ad inserire sempre dei controlli dei software che scrivevo. mi rendo conto che però questo non è il modo giusto. credo proprio che dovro scrivere in maniera precisa come usare la libreria e basta.
Avatar utente
Foto UtenteMarcRider
5 1 4
New entry
New entry
 
Messaggi: 53
Iscritto il: 16 feb 2012, 17:37


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti