Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] operazioni bit a bit

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

    codice:
      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);

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    La prima operazione è del tutto equivalente a questa:
    codice:
    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:
    codice:
    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:
    codice:
    lsb = BBBxBBBB
    
    rtr = 0000000x
    La terza operazione assegna a len il valore costituito dagli ultimi 4 bit (meno significativi) di lsb. Graficamente:
    codice:
    lsb = BBBBwxyz
    
    len = 0000wxyz
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie mille, proprio quello che doveva fare :mavieni: : prendere una sequenza di 16bits e separarne i vari campi. Mi sei stato di grandissimo aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.