errore nel cambio di stato di un Pin di uscita.

7 Anni 10 Mesi fa #1 da MauroFx
Non avevo mai usato prima l'operatore di complemento ~ (NOT), che inverte i bit di un valore di una costante.
La costante è riferita ad un latch di uscita. Ma è uguale anche se riferita al PORT.

In questa situazione ho un "warning" in fase di compilazione, che a volte, impedisce la compilazione stessa.

Se questo può contare e cambiare qualcosa, sto usando il PIC18F4550.

Le istruzioni fondamentali che manipolano la costante sono:

#define Apribile LATAbits.LATA0

LATA = 0b00000000;
TRISA = 0b11000000;

l'errore è su questa istruzione

Apribile = ~Apribile; warning: (752) conversion to shorter data type

Tale situazione viene determinata dalla inversione dei bit di LATA0, che sembra siano molti. Ma quanti ? E che razza di tipo di valore si raccoglie dal LATch e dal PORT?

Per capirci qualcosa ho provato a modificare l'istruzione, usando l'operatore or esclusivo (XOR Alt+94) al posto del NOT, così:

Apribile ^= 0b00000001; (il risultato ritorna "1" se solo uno tra i valori di "Apribile" e "1" è "1", per cui, se Apribile è "1" torna "0", se invece è "0" torna "1")

E funziona ! Ma questo mi preoccupa ! Perché gli errori di compilazione più subdoli derivano spesso dalla conversione inattesa del tipo di variabile.
E non solo la lettura del LATch, ma anche, (ho provato) quella di PORTAbits.RAO , che torna lo stesso errore e risultato.

Vuol dire che l'istruzione NOT, provocando l'inversione di tutti i bit, quanti bit cambia di stato ? Quanti ce ne sono ?
Quando uso XOR ho 8 bit. Quindi, col NOT, passa forse da 0b00000001 ,valore 1, a 0b11111110, valore 254 ? Che non può essere contenuto nel tipo di variabile originata dalla lettura iniziale del Pin ? E quindi il compilatore la converte in shorter (int) ?

Che tipo di valore si ottiene dalla lettura di LATAbits.LA0 e PORTAbits.RA0 ?
Mi aiutate a capirci qualcosa ?

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

  • MauroFx
  • Senior Member
  • Senior Member
Di più
7 Anni 10 Mesi fa - 7 Anni 10 Mesi fa #2 da permax1958
Risposta da permax1958 al topic errore nel cambio di stato di un Pin di uscita.
credo che si tratti di un "errore" che sta alla base di una buona programmazione, LATAbits.LATA0 non è una vera variabile ma una struttura dati complessa dove LATA0 identifica un bit della struttura LATAbits definita nel file "pic18f4550.h" della cartella include del compilatore che si riferisce al registro speciale LATA (Data Latch register) a 8bit collegato ai latch della Porta A e mappato nel banco 15, come static RAM, della data memory del pic 18F4550 all'indirizzo 0xF89, quindi il compilatore potrebbe interpretare "LATAbits.LATA0 = ~ LATAbits.LATA0" come un tentativo di invertire tutti i bits del registro LATA e di assegnarli ad un singolo bit LATAbits.LATA0 generando warning o errore.
Secondo me l'uso dell'operatore bitwise NOT "~" non è corretto mentre è corretto l'uso dell'operatore logico NOT "!" quindi l'istruzione diventa: "LATAbits.LATA0 = ! LATAbits.LATA0".
Prova e fammi sapere
Ultima Modifica 7 Anni 10 Mesi fa da permax1958.

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

  • permax1958
  • Premium Member
  • Premium Member
Di più
7 Anni 10 Mesi fa #3 da MauroFx
Si, funziona anche così, ed è anche più chiara la lettura del codice rispetto all'uso di XOR. Grazie.

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

  • MauroFx
  • Senior Member
  • Senior Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

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

Registrati al sito LaurTec.

Login