Pages: [1]   Go Down
Author Topic: precompilazione in modo diverso di parti di codice.....  (Read 510 times)
0 Members and 1 Guest are viewing this topic.
Oristano
Offline Offline
Sr. Member
****
Karma: 0
Posts: 252
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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:
      #if(id_micro = '1') // compila  blocco istruzioni 1
      blocco istruzioni 1;
      #endif   

oppure così

Code:
      #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
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#define micro1    
// #define micro2    

      #ifdef micro1
        // blocco istruzioni 1
      #endif    

     #ifdef micro2
      //  blocco istruzioni 2
      #endif    

Logged

Oristano
Offline Offline
Sr. Member
****
Karma: 0
Posts: 252
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

#define micro1

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

Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10101
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

http://www.cplusplus.com/doc/tutorial/preprocessor/
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Oristano
Offline Offline
Sr. Member
****
Karma: 0
Posts: 252
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 102
Posts: 6542
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: [1]   Go Up
Jump to: