Go Down

Topic: precompilazione in modo diverso di parti di codice..... (Read 717 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