DG.M Inserito: 19 settembre 2007 Segnala Inserito: 19 settembre 2007 Salve a tutti,usando il C18 e dichiarando una variabile da 8 bit char, è possibile dopo averla scritta modificare solo alcuni bit?Graize
Livio Orsini Inserita: 19 settembre 2007 Segnala Inserita: 19 settembre 2007 Certamente basta fare AND con una maschera per forzare zeri e OR con maschera per forzare uni
DG.M Inserita: 19 settembre 2007 Autore Segnala Inserita: 19 settembre 2007 Inizialmente mi chiedevo se fosse possibile "chiamare" direttamente un bit, come si fa per i registri, ho capito che non si può ma la via dell'AND è addirittura più comoda
ifachsoftware Inserita: 4 ottobre 2007 Segnala Inserita: 4 ottobre 2007 Per usare direttamente i singoli bit dovresti fare una struttura tipo questa (l'esempio e' a 16 Bit) : typedef struct sBit { unsigned int B0 :1; unsigned int B1 :1; unsigned int B2 :1; unsigned int B3 :1; unsigned int B4 :1; unsigned int B5 :1; unsigned int B6 :1; unsigned int B7 :1; unsigned int B8 :1; unsigned int B9 :1; unsigned int B10 :1; unsigned int B11 :1; unsigned int B12 :1; unsigned int B13 :1; unsigned int B14 :1; unsigned int B15 :1; }sBit; typedef union sDato // Una Union differisce dalla struct per il fatto che il dato e' condiviso { unsigned int W; sBit B; }sDato; void main(){ sDato ArrBit; ArrBit .W = 0; // Azzera tutti i bit ArrBit.B.B0 = 1; // Mette ad 1 il Bit 0 ArrBit.B.B1 = 0; // Mette a 0 il Bit 1} Ciao
DG.M Inserita: 4 ottobre 2007 Autore Segnala Inserita: 4 ottobre 2007 grazie!Non ho capito bene la sintassi di unsigned int B5 :1;Cosa vuol dire :1?O meglio: -il tipo di dato di sBit deve essere lo stesso di W? Cioè perchè dichiarare int dei singoli bit, e non boolean?-l' :1 indica il numero di bit, partendo a dichiarare dal meno significativo?Per capire meglio, volessi poter modificare singolarmente i bit più significativi ed in blocco il byte meno significativo, come sarebbe la dichiarazione nella struct?GrazieDomenico
ifachsoftware Inserita: 5 ottobre 2007 Segnala Inserita: 5 ottobre 2007 Vuol dire che prendi 1 BitDeve avere la stessa dimensioneIl tipo BOOL ce l'hanno solo alcuni compilatoriHo usato il tipo unsigned int perche' i DSPIC da cui ho estrapolato questo codice sono a 16Bit ed il tipo unsigned int viene manipolato velocemente.Ciao
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora