Question : Ce qui est la meilleure manière de modifier des bitfields

Si je dois modifier un certain peu individuel dans un registre interne, je peux faire le class= les " lineNumbers " >
1 de >
struct au niveau du bit
{
	char P.M. : 3 ;
	char DR : 2 ;
	char XEN : 1 ;
	YENS de char : 1 ;
	ZEN de char : 1 ;
} foo ; le class= de 

Thanks à phoffric (le gourou de l'échange de l'expert), je me suis rendu compte que ce n'est pas une solution efficace pour la portabilité. Il que je veux modifier le « DR » (peu 3.2) et s'Iam l'écrivant à la binaire 11 alors est class= les " lineNumbers " >
1 de >
char reg1 = 0x34 ; valeur de //some
char DR = (0x3 << 2) ;
UpdateReg (DR) ;

UpdateReg (char val)
{
  reg1 |= DR ; 
} le class= >

The de
si je veux changer un peu de 1 en 0, il peut être fait si je connais le peu position.
for ex : ~ du &= reg1 (1 << 3)

But dans le class= ci-dessous " lineNumbers " >
1 de >
DR = (0x01 << 3)
L'intention " claire " de >

My de class= d'UpdateReg (DR)
In la fonction d'UpdateReg qu'elle ressemblera à la binaire 00001000. Maintenant je ne peux pas appliquer la manière ci-dessus de convertir un 1 à un 0. Je dois également envoyer les nombres de bits qui doivent être modifiés.

Is là une manière plus simple de faire ceci ?

Thanks
class= de

Réponse : Ce qui est la meilleure manière de modifier des bitfields

le >>What est la meilleure manière de modifier des bitfields utilisés pour le registre interne
est ne pas employer des bitfields.

>> Je veux modifier le « DR » (peu 3.2)
Je ne vois pas comment cela assortit vos bitfields DR
==============

Voir si est ce pour ce que vous conduisez :

En tous cas, il semble que vous voulez que votre fonction d'UpdateReg () soit assez générale pour manipuler n'importe quel scénario.

UpdateReg (le masque de char, carbonisent newPattern) ;
         là où le masque est un ensemble de peu arbitrairement placé qui se dégagera
Je suppose que vous pouvez lire le registre dans une variable de temp, et puis le manoeuvre, et l'écris finalement de nouveau au registre de HW. (Ce n'est pas toujours vrai, depuis lire parfois les changements de registre de HW la valeur.)

Ainsi le masque est adapté au premier clair le peu correspondant dans la variable de temp (après que vous lisez le registre de HW). Puis, using le masque encore avec le newPattern, j'ai maintenant l'ensemble valide de peu (ou de 0) ou dans au registre de temp. Écrire alors le temp de nouveau au HW.
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us