linguaggio c

  • elpablito
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
8 Anni 2 Settimane fa #1 da elpablito
linguaggio c è stato creato da elpablito
Buon giorno
La domanda potrebbe essere banale, ma non so la risposta.
Che differenza fa tra queste due istruzioni?

#define pippo PB1

int pippo = PB1;

Dove PB1 = port B bit1

al solito si ringrazia
Paolo

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • alfa75
  • Platino Utente
  • Platino Utente
Di più
8 Anni 2 Settimane fa #2 da alfa75
Risposta da alfa75 al topic linguaggio c
Salve ,
Paolo.
la #define è una costante è fa parte delle direttive al preprocessore, quando il codice viene compilato il compilatore non fa altro che assocciare ai vari "pippo" che trova la porta RB1 (che a sua volta è gia definità all'interno di una struct nel file header del compilatore).

con la seconda istruzione dichiari una variabile intera che occuperà 2 byte di memoria è che potrai manipolare all'interno del codice.

Saluti,
Andrea

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • elpablito
  • Autore della discussione
  • Platino Utente
  • Platino Utente
Di più
8 Anni 1 Settimana fa #3 da elpablito
Risposta da elpablito al topic linguaggio c
Alfa75 si ringrazia, ciò che mi dicevi mi è abbastanza chiaro, ma dimmi dove sbaglio.
In ambedue i casi mi vado a definire una porta e ogni volta scrivo pippo è come scrivessi PB1, con la differenza che con int mi sono giocato due byte, dove è memorizzato lo stato della porta, qualora interessi. In definitiva nel secondo caso mi sono risparmiato un define e nulla più, visto che lo stesso risultato lo posso ottenere con un define più una variabile.
Paolo

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • alfa75
  • Platino Utente
  • Platino Utente
Di più
8 Anni 1 Settimana fa #4 da alfa75
Risposta da alfa75 al topic linguaggio c
Aspetta!
analizziamo un caso più specifico:

se io dichiaro

int pippo = PORTBbits.RB0;

pippo assumerà il valore del pin RB0 (cioè 0 o 1)

ma se io volessi "scrivere" su quel pin (ad esempio portarlo semplicemente ad 1 )
cioè:
pippo = 1;
la variabile pippo assumerebbe valore 1 ma il valore del port rimarebbe invariato.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Cosimix
  • Elit Utente
  • Elit Utente
Di più
8 Anni 1 Settimana fa - 8 Anni 1 Settimana fa #5 da Cosimix
Risposta da Cosimix al topic linguaggio c
Salve!

In ambedue i casi mi vado a definire una porta e ogni volta scrivo pippo è come scrivessi PB1


I due esempi citati non sono proprio la stessa cosa.

Con:
Code:
#define SEMPLICE QUESTA_COSA_NON_RIESCO_PROPRIO_A_RICORDARLA

stai definendo un nuovo nome (molto più semplice da ricordare) che potrai utilizzare all'interno del codice per una più facile stesura e lettura dello stesso.

Nel secondo caso:
Code:
int pippo = PB1;

stai inizializzando una variabile intera di nome pippo, assegnandole il valore attuale di PB1.
Così come spiegato da alfa75, il contenuto di questa variabile può variare durante l'esecuzione del codice (in base alle tue necessità), ma non potrà mai essere utilizzata in sostituzione di PB1.
Code:
// Esempio banale.. Supponiamo che RB0 valga 0: int pippo = PORTBbits.RB0; // pippo è pari a 0 pippo = 1; // Supponiamo di voler eseguire qualcosa nel caso in cui RB0 valga 1: if(pippo == 1) { // Eseguo qualcosa... ma RB0 non vale 1!!! }

Saluti,
Cosimo
Ultima Modifica 8 Anni 1 Settimana fa da Cosimix.

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiStefA

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi