Variabili unsigned

8 Anni 5 Mesi fa #1 da Claudio_F
Variabili unsigned è stato creato da Claudio_F
Cercando di usare il modulo A/D del PIC18F4550, mi sono trovato a sottrarre da un unsigned int inizializzato a 512 un insigned int che conteneva il valore di 1024. Dato che le variabili sono entrambe unsigned, mi sarei atteso come risultato 0, ma sul display usando la fumzione "LCD_write_integer()" mi sono trovato a leggere -512. E' normale, un difetto del compilatore o della libreria Display?

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

  • Claudio_F
  • Premium Member
  • Premium Member
Di più
8 Anni 5 Mesi fa - 8 Anni 5 Mesi fa #2 da firstcolle
Risposta da firstcolle al topic Variabili unsigned
il numero che vedi è dato da 2 fattori
1 il pic quando si trova a fare una sottrazione a-b con b>a arriva a 0 e poi continua a sottrarre partendo dal valore massimo della variabile unsigned int (65536). quindi hai
512 - 1024
512 - 512 = 0
rimangono altri 512 da sottrarre (1024-512 = 512)
la variabile si resetta al valore massimo quindi
65536 - 512 = 65024
tradotto in esadecimale = 0xFE00

2 la funzione write integer scrive su display un valore signed int quindi tratta il tuo dato come fosse signed e FE00 in signed int è -512.

ragionamento fatto al volo senza controllare libreria e valori.. ma sembra quadrare
Ultima Modifica 8 Anni 5 Mesi fa da firstcolle.

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

  • firstcolle
  • Avatar di firstcolle
  • Platinum Member
  • Platinum Member
Di più
8 Anni 5 Mesi fa #3 da Claudio_F
Risposta da Claudio_F al topic Variabili unsigned
quindi tutto sommato in questo caso è meglio usare delle variabili (signed) int, così non ho sorprese.

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

  • Claudio_F
  • Premium Member
  • Premium 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