Frage : Was die beste Weise ist, bitfields zu ändern

Wenn ich einige einzelne Spitzen in einem Hardware-Register ändern muss, kann ich this
1 tun:
2:
3:
4:
5:
6:
7:
8:
9:
struct bitweise
{
	Putzfrau P.M.: 3;
	Putzfrau Dr: 2;
	Putzfrau XEN: 1;
	Putzfrau YEN: 1;
	Putzfrau ZEN: 1;
} foo; 

Thanks zu phoffric (Austauschguru des Experten), festgestellt ich ich, dass es nicht eine leistungsfähige Lösung für Beweglichkeit ist. Es, das ich „Dr“ ändern möchte (Spitzen 3.2) und wenn Iam, das Zweiheit 11 dann ihn schreibt, easy.
1 ist:
2:
3:
4:
5:
6:
7:
8:
9:
Putzfrau reg1 = 0x34; //some-Wert
Putzfrau Dr = (0x3 << 2);
UpdateReg (Dr);

UpdateReg (Putzfrau val)
{
  reg1 |= DR; 
} 

The ODER Operatorarbeiten, wenn der Wert binäres 11.
ist, wenn ich eine Spitze von 1 bis 0 ändern möchte, kann er getan werden, wenn ich die Spitze position.
for ex kenne: &= reg1 ~ (1 << 3)

But im below code
1:
2:
3:
Dr = (0x01 << 3)
UpdateReg (Dr) 

My Absicht ist gerade, Spitzen 3.4 zu ändern. Aber ich verlor, dass Informationen in der Funktion UpdateReg verloren.
In die UpdateReg Funktion, die sie wie Zweiheit 00001000 aussieht. Jetzt kann ich die oben genannte Weise der Umwandlung 1 bis 0 nicht anwenden. Ich muss die Spitzenzahlen auch senden, die geändert werden sollen.

Is dort eine einfachere Weise des Handelns dies?

Thanks

Antwort : Was die beste Weise ist, bitfields zu ändern

>>What ist die beste Weise, die bitfields zu ändern, die für Hardware-Register benutzt
ist, bitfields nicht zu benutzen.

>> Ich möchte „Dr“ ändern (Spitzen 3.2)
Ich sehe nicht, wie der Ihre bitfields Dr zusammenbringt
==============

Für sehen, wenn dieses ist, was Sie fahren:

Auf jeden Fall scheint es, dass Sie Ihre UpdateReg () Funktion allgemein sein wünschen genug, jedes mögliches Drehbuch zu behandeln.

UpdateReg (Putzfrauschablone, verkohlen newPattern);
         wo Schablone ein Satz willkürlich gesetzte Spitzen ist, die löschen
Ich annehme h, dass Sie das Register in einer Tempvariable lesen können, und manipuliere es dann und schreibe es schließlich zurück zu dem HW Register. (Dieses ist nicht immer zutreffend, seit die HW Registeränderungen manchmal lesen der Wert.)

So angepasst die Schablone erstem freiem die entsprechenden Spitzen in der Tempvariable p (nachdem Sie das HW Register lesen). Dann using die Schablone wieder mit dem newPattern, habe ich jetzt den gültigen Satz der Spitzen (oder 0) oder in zum Tempregister. Den Temp zurück zu dem HW dann schreiben.
Weitere Lösungen  
 
programming4us programming4us