PDA

Visualizza la versione completa : [C] operazioni bit a bit


adone79
12-05-2004, 15:59
sapreste dirmi che effetto hanno queste operazioni sui bits dei due byte lsv e msb? Dovrebbero servire a selezionare i bit dei tre campi ident, rtr e len, ma non riesco a capire come avviene sta ripartizione..



msb = inb(RXID_REG);
lsb = inb(RRTR_REG);

package->ident = ((msb & 0xff) << 3) + ((lsb & 0xE0) >> 5);
package->rtr = ((lsb & 0x10) >> 4);
package->len = (lsb & 0x0F);

LeleFT
13-05-2004, 12:06
La prima operazione è del tutto equivalente a questa:


package->ident = (msb << 3) + ((lsb & 0xE0) >> 5);

mettere un valore in AND bit a bit con -1 non ha alcun senso, in quanto lascia inalterato il valore.
Questa operazione prende i primi tre bit di lsb (quelli più significativi) e li aggiunge come bit meno significativi a msb. msb viene però privato dei suoi primi 3 bit e gli altri vengono shiftati a sinistra (lasciando degli zeri nei 3 bit meno significativi). Graficamente:


msb = xyzAAAAA
lsb = abcBBBBB

ident = AAAAAabc

La seconda operazione assegna a rtr il valore del quarto bit (a partire dal più significativo) di lsb. Graficamente:


lsb = BBBxBBBB

rtr = 0000000x


La terza operazione assegna a len il valore costituito dagli ultimi 4 bit (meno significativi) di lsb. Graficamente:


lsb = BBBBwxyz

len = 0000wxyz


Ciao. :ciauz:

adone79
14-05-2004, 14:39
Grazie mille, proprio quello che doveva fare :mavieni: : prendere una sequenza di 16bits e separarne i vari campi. Mi sei stato di grandissimo aiuto ;)

Loading