Cuestión : Cuál es la mejor manera de modificar bitfields

Si tengo que modificar algunos pedacitos individuales en un registro de hardware, puedo hacer el class= " lineNumbers " >
1 del >
struct Bitwise
{
	carbón de leña P.M.: 3;
	carbón de leña dr: 2;
	carbón de leña XEN: 1;
	YENES del carbón de leña: 1;
	ZEN del carbón de leña: 1;
} foo; el class= >
Thanks de
1 del >
carbón de leña reg1 = 0x34; valor de //some
carbón de leña dr = (0x3 << 2);
UpdateReg (dr);

UpdateReg (carbón de leña val)
{
  reg1 |= DR; 
} el class= >
The de
si quiero cambiar un pedacito a partir de la 1 a 0, del operador puede ser hecho si sé el pedacito position.
for ex: ~ del &= reg1 (1 << 3)

But en el class= below " lineNumbers " >
1 del >
Dr = (0x01 << 3)
La intención " clara " de >
My del class= de UpdateReg (dr)
In la función de UpdateReg que parecerá el binario 00001000. Ahora no puedo aplicar la manera antedicha de convertir un 1 a un 0. Debo también enviar los números de pedacito que deben ser modificados. ¿

Is allí una manera más simple de hacer esto?

Thanks
class= del

Respuesta : Cuál es la mejor manera de modificar bitfields

el >>What es la mejor manera de modificar los bitfields usados para el registro de hardware
es no utilizar bitfields.

>> Quiero modificar el “dr” (pedacitos 3.2)
No veo cómo eso empareja sus bitfields dr
==============

Ver si esto es para lo que usted está conduciendo:

En todo caso, parece que usted quisiera que su función de UpdateReg () fuera bastante general manejar cualquier panorama.

UpdateReg (la máscara del carbón de leña, socarra newPattern);
         donde está un sistema la máscara de los pedacitos arbitrariamente puestos que despejarán
Estoy asumiendo que usted puede leer el registro en una variable del temp, y después lo manipulo, y finalmente lo escribo de nuevo al registro de HW. (Esto no es siempre verdad, desde a veces la lectura de los cambios del registro de HW el valor.)

La máscara se adapta tan a primer claro los pedacitos correspondientes en la variable del temp (después de que usted lee el registro de HW). Entonces, usar la máscara otra vez con el newPattern, ahora tengo el sistema válido de pedacitos (o 0) o en al registro del temp. Entonces escribir a temp de nuevo al HW.
Otras soluciones  
 
programming4us programming4us