Fråga : Vad är det bäst långt som ändrar bitfields

Om jag måste att ändra några individbitar i ett maskinvaruregister, jag kan göra för class=" codeSnippet " för this
1 för >

struct Bitwise
{
röding PM: 3;
röding DR: 2;
röding XEN: 1;
rödingYEN: 1;
rödingZEN: 1;
} foo; <-/pre>

Thanks till phoffric (expertens utbytesguruen), har jag realiserat att det inte är en effektiv lösning för portability. Det som jag önskar att ändra ”DR” (bitar 3.2) och om Iam handstil binära 11 det är därefter för class=" codeSnippet " för easy.
1 för >

röding reg1 = 0x34; //some värderar
röding DR = (0x3 << 2);
UpdateReg (DR);
UpdateReg (val röding)
{
reg1 |= DR;
} <-/pre>

The ELLER operatören fungerar, om värdera är binär 11.
, om jag önskar att ändra a bet från 1 till 0, det kan göras, om jag vet att bet före detta för position.
for:

But för ~ för &= reg1 (1 << 3) i den nedanföra för class=" codeSnippet " för code
1 för >

DR = (0x01 << 3)
Avsikten för >
My för UpdateReg (DR)
In som UpdateRegen fungerar den, ska look lika binära 00001000. Nu jag kan inte applicera det ovannämnt långt av att konvertera en 1 till en 0. Jag måste också överföra bet numrerar som ska ändras.

Is där ett enklare långt av att göra detta?

Thanks
" klar "

Svar : Vad är det bäst långt som ändrar bitfields

>>What är det bäst långt som ändrar bitfields som används för maskinvaruregister
är att inte använda bitfields.

>> Jag önskar att ändra ”DR” (bitar 3.2)
Jag ser inte hur det matchar dina bitfields DR
==============

Se, om detta är vad du kör för:

I något fall det verkar att du önskar din UpdateReg () fungerar för att vara allmän nog att behandla något scenario.

UpdateReg (rödingen maskerar, bränner till kol newPattern);
         var maskera, är en uppsättning av godtyckligt förlade bitar som ska fri
Förmiddag som I antar, att du kan läsa registret i en vikarievariabel, och behandlar därefter den och skriver slutligen det baksida till HW-registret. (Detta inte är alltid riktigt, efter ibland läsning som HW-registret ändrar värdera.),

Så maskera anpassas till första klart de motsvarande bitarna i vikarievariabeln (efter du läser HW-registret). Därefter using maskera igen med det newPattern, jag har nu den giltiga uppsättningen av bitar (eller 0) till eller in i vikarieregistret. Skriv därefter vikarierna tillbaka till HWEN.
Andra lösningar  
 
programming4us programming4us