Pergunta : O que é a melhor maneira de modificar bitfields

Se eu tenho que modificar alguns bocados individuais em um registo de ferragem, eu posso fazer o class= " lineNumbers " >
1 do >
struct Bitwise
{
	carvão animal PM: 3;
	Dr. do carvão animal: 2;
	carvão animal XEN: 1;
	IENES do carvão animal: 1;
	ZEN do carvão animal: 1;
} foo; o class= >
Thanks de
1 do >
carvão animal reg1 = 0x34; valor de //some
carvão animal Dr. = (0x3 << 2);
UpdateReg (Dr.);

UpdateReg (carvão animal val)
{
  reg1 |= DR.; 
} o class= >
The de
se eu quero mudar um bocado de 1 a 0, do operador pode ser feito se eu sei o bocado position.
for ex:

But do ~ do &= reg1 (1 << 3) no class= below " lineNumbers " >
1 do >
Dr. = (0x01 << 3)
A intenção " desobstruída " de >
My do class= de UpdateReg (Dr.)
In a função que de UpdateReg olhará como o binário 00001000. Agora eu não posso aplicar a maneira acima de converter um 1 a um 0. Eu devo igualmente emitir os números de bocado que devem ser modificada.

Is lá uma maneira mais simples de fazer isto?

Thanks
class= do

Resposta : O que é a melhor maneira de modificar bitfields

o >>What é a melhor maneira de modificar os bitfields usados para o registo de ferragem
é não usar bitfields.

>> Eu quero modificar o “Dr.” (bocados 3.2)
Eu não ver como aquele combina seu Dr. dos bitfields
==============

Ver se este é o que você está conduzindo para:

Em todo caso, parece que você quer sua função de UpdateReg () ser geral bastante segurar toda a encenação.

UpdateReg (a máscara do carvão animal, carboniza newPattern);
         onde a máscara é um jogo dos bocados arbitrariamente coloc que cancelarão
Eu estou supor que você pode ler o registo em uma variável do temp, e manipulo-o então, e escrevo-o finalmente de volta ao registo de HW. (Isto não é sempre verdadeiro, desde às vezes a leitura das mudanças do registo de HW o valor.)

A máscara está adaptada assim a primeiro desobstruído os bocados correspondentes na variável do temp (depois que você lê o registo de HW). Então, using a máscara outra vez com o newPattern, eu tenho agora o jogo válido dos bocados (ou de 0) ou no registo do temp. Escrever então o temp de volta ao HW.
Outras soluções  
 
programming4us programming4us