Go Down

Topic: precompilazione in modo diverso di parti di codice..... (Read 816 times) previous topic - next topic

Paolo S

scusate il titolo del topic che sicuramente è poco chiaro...

provo a spiegarmi:

dovrei compilare parti di codice in modo diverso a seconda che una variabile, già definita e valorizzata prima, abbia un valore oppure un altro ... più o meno cosi:

Code: [Select]

#define id_micro '1'         // assegno alla variabile id_micro il valore '1'
// #define id_micro '2'         // assegno alla variabile id_micro il valore '2'


poi vorrei che compilasse così

Code: [Select]

      #if(id_micro = '1') // compila  blocco istruzioni 1
      blocco istruzioni 1;
      #endif   


oppure così

Code: [Select]

      #if(id_micro = '2') // compila  blocco istruzioni 2
      blocco istruzioni 2;
      #endif   


non so se mi sono spiegato.. insomma devo mettere lo stesso codice su due micro ma deve essere compilato in modo diverso su un micro rispetto all'altro..  e la differenza la introduco attivando questa linea
#define id_micro '1'         // assegno alla variabile id_micro il valore '1'
o quest'altra
#define id_micro '2'         // assegno alla variabile id_micro il valore '2'

ogni suggeriemnto e più che gradito.. mi piacerebbe anche capire se si puo fare qualcosa tipo

     #if(id_micro = '1') // compila  blocco istruzioni 1
       ... blocco istruzioni 1
     #else if (id_micro = '2')
      blocco istruzioni 2;
      #endif   

grazie e ciao

astrobeed


scusate il titolo del topic che sicuramente è poco chiaro...


La compilazione condizionale serve proprio per inserire/escludere parti di codice a seconda di come imposti dei valori, però la sintassi che stai usando è errata:

Questa è quella corretta
Code: [Select]

#define micro1    
// #define micro2    

     #ifdef micro1
       // blocco istruzioni 1
     #endif    

    #ifdef micro2
     //  blocco istruzioni 2
     #endif    


Paolo S

grazie astro....
ed esiste qualcosa per fare un if else endif??? ... vabbè ma non è importante posso fare come dici tu.. grazie...



astrobeed


ed esiste qualcosa per fare un if else endif???


Si la compilazione condizionale, o meglio le direttive del preprocessore, prevede anche la #else e la #elif (attenzione al '#'), p.e.:

Code: [Select]


#define micro1

#ifdef micro1
// codice micro 1
#else
// codice micro2
#endif


lesto

credo che intendesse più usare gli operatori logico/booleani.. quì un elenco delle direttive c++

http://www.cplusplus.com/doc/tutorial/preprocessor/
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Paolo S

grazie lesto e astro... stasera mi leggo qualcosa... ciao

PaoloP

Se vuoi vedere degli esempi pratici puoi guardare il codice del core di Arduino o le sue libreria. Si fa molto uso delle direttive di precompilazione soprattutto per discriminare i diversi microcontrollori montati su Arduino.
Vedi ad esempio il codice per le seriali diverso per la UNO, MEGA e LEONARDO.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy