Vraag : Wat de beste manier zich is te wijzigen bitfields

Als ik sommige individuele beetjes in een hardwareregister moet wijzigen, kan ik this
1 doen:
2:
3:
4:
5:
6:
7:
8:
9:
struct Bitwise
{
	klusjes PM: 3;
	klusjes DR.: 2;
	klusje XEN: 1;
	klusjes YEN: 1;
	klusje ZEN: 1;
} foo; 

Thanks aan phoffric (de goeroe van de Uitwisseling van de Deskundige), heb ik gerealiseerd dat het geen efficiënte oplossing voor portabiliteit is. Het wil ik „DR.“ wijzigen (beetjes 3.2) en als het schrijven Iam binair getal 11 dan het easy.
1 is:
2:
3:
4:
5:
6:
7:
8:
9:
klusje reg1 = 0x34; //some waarde
klusjes DR. = (0x3 << 2);
UpdateReg (DR.);

UpdateReg (klusje val)
{
  reg1 |= DR.; 
} 

The OF exploitant werkt als de waarde binaire 11.
als ik een beetje van 1 tot 0 wil veranderen is, kan het worden gedaan als ik het ex beetje position.
for ken: reg1 &= ~ (1 << 3)

But in onderstaande code
1:
2:
3:
DR. = (0x01 << 3)
Van UpdateReg (DR.)/>My bedoeling 

In UpdateReg het zal kijken als binair getal 00001000 functioneert. Nu kan ik niet de bovengenoemde manier toepassen om a1 in 0 om te zetten. Ik moet de beetjeaantallen ook verzenden die moeten worden gewijzigd.

Is daar een eenvoudigere manier om dit te doen?

Thanks

Antwoord : Wat de beste manier zich is te wijzigen bitfields

>>What is de beste manier zich te wijzigen bitfields gebruikt voor hardwareregister
is te gebruiken niet bitfields.

>> Ik wil „DR.“ wijzigen (beetjes 3.2)
Ik zie niet hoe die gelijken uw bitfieldsDR.
==============

Zie of is dit wat u voor drijft:

In elk geval, schijnt het dat u uw () functie UpdateReg algemeen genoeg wilt zijn om om het even welk scenario te behandelen.

UpdateReg (het klusjesmasker, verkoolt newPattern);
         waar het masker een reeks willekeurig geplaatste beetjes is die zullen ontruimen
Ik veronderstel dat u het register in een temperaturenvariabele lezen, en dan het kunt manipuleren, en definitief het schrijven terug naar het register HW. (Dit is niet altijd waar, aangezien soms het lezen van het register HW de waarde. verandert)

Zo wordt het masker aangepast aan eerst duidelijk de overeenkomstige beetjes in de temperaturenvariabele (nadat u het register HW leest). Dan, opnieuw gebruikend het masker met newPattern, heb ik nu de geldige reeks beetjes (of 0's) aan of in het temperaturenregister. Dan schrijf de temperaturen terug naar HW.
Andere oplossingen  
 
programming4us programming4us