Estoy tratando de establecer múltiples valores en un registro de 32 bits, y cada valor tiene 2 bits. Tratando de encontrar una manera elegante de hacer esto.
Escribe ahora que tengo algo como esto:
struct MuxRegister {
Uint16 PIN1:2;
Uint16 PIN2:2;
...
}
#define LED PIN1 (in a different file of course)
#define PWM PIN2
#define Mux_GPIO 1 (value from 0-3 selects different options)
#define Mux_PWM 3
MuxRegister.LED = Mux_GPIO;
MuxRegister.PWM = Mux_PWM;
...
Y quiero hacer algo donde no tenga que ir a través de cada MuxRegister.X y MuxRegister.Y para cada uno de los 16 pines en la estructura.
Mi idea era hacer algo como esto:
#define BIT1 0x00000001
#define BIT2 0x00000002
#define BIT1 0x00000004
#define BIT2 0x00000008
#define LED (BIT1&&BIT2)
#define PWM (BIT3&&BIT4)
MuxRegister |= ((Mux_GPIO && LED) || (Mux_PWM && PWM) || ... ;
Pero no hay ningún mecanismo para preservar el espaciado del registro Mux (valores entre 0 y 3) más allá de la primera posición. Al igual que en, el valor para Mux_PWM en este ejemplo es 0x00000003 pero el valor para PWM es 0x0000000C, y no interactúan en absoluto ya que no están "superpuestos".
¿Existe un mecanismo con el cual espaciar los valores de los códigos Mux para que interactúen con los valores de pin correctos? Lo siento si no estoy explicando bien la pregunta. No tengo mucha terminología correcta.