Hi,
ich habe folgendes defniert:
1  | union{
 | 
2  |     volatile struct{
 | 
3  |    unsigned         :2;
  | 
4  |    unsigned  white:1;
  | 
5  |    unsigned  red:1;
  | 
6  |    unsigned  blue:1;
  | 
7  |    unsigned  green:1;
  | 
8  |    unsigned  violett:1;//Magenta
  | 
9  |    unsigned  yellow:1;
  | 
10  | }bits;
  | 
11  | unsigned int all;
  | 
12  | }ColorPick;
  | 
und führe dann später folgendes aus:
1  | //6 Farben
  | 
2  |     for (; temp > 0; temp--)
  | 
3  |     {
 | 
4  |         ColorPick.all >> 1;
  | 
5  | 
  | 
6  |         if (ColorPick.all < 4)
  | 
7  |             ColorPick.all = 0b10000000;
  | 
8  |     }
  | 
9  |     set_pwm((ColorPick.bits.white | ColorPick.bits.red | ColorPick.bits.violett) ? 255 : 0,
  | 
10  |             (ColorPick.bits.white | ColorPick.bits.green) ? 255 : 0,
  | 
11  |             (ColorPick.bits.white | ColorPick.bits.blue | ColorPick.bits.violett) ? 255 : 0, 255);
  | 
Kurze Erklärung dazu, was ich eingentlich bewecken möchte.
Ich benötige etwas ähnliches wie ein BOOL[6], bei dem immer nur EIN 
Eintrag TRUE ist und dieser mittels Schleife weitergeschoben wird. 
Möchte aber gerne die einzelnen Bits benennen können. Des Weiteren 
befinde ich mich auf einem PIc und möchte nicht 6x uint8_t verschwenden.
Laut Compilerhandbuch ist die erste variable im struct das LSB. Da ich 
nur 6 benötige lasse ich ab dem vorletztem LSB "resetten".
Um ein Shift ausfüren zu dürfen, musste ich noch das Union drumherum 
basteln.
Nun die Frage an euch: Geht es auch schöner und kompakter?
In jedem Fall möchte ich "red" etc. noch lesen können. ColorPick >> x 
wäre auch schön, aber ich sehe keinen Weg das Union zu umgehen und ein 
Shift direkt auf das struct machen zu dürfen.
Grüße Oekel