PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : switch case aud union und struct gehen schief, hat einer eine Idee warum ???



jdelphi
29.09.2011, 14:04
PROZESSOR = 18F87K90
Microchip C18 Compiler.



char i_help;

union reg
{
char data;
struct
{
char ek : 2; //Elektrodenkontrolle
char sprache : 1; //Sprachauswahl
char TK : 1;
char Temp_Sens : 1;
char rx_enable : 1;
char RT2025 : 1;
char calfail : 1;
};
};
union reg reg0;

reg0.ek = 0x00; // Geht
reg0.ek = 0x01; // Geht
reg0.ek = 0x02; // Geht nicht richtig
reg0.ek = 0x03; // Geht nicht richtig

switch (reg0.ek) {
case 0x00 : Do1; // Geht
break;
case 0x01 : Do2; // Get
break;
case 0x02 : Do3; // Get nicht
break;
case 0x03 : Do4; // Get nicht
break;
default : DoMist; // Hier lande ich bei 0x02 und 0x03
break;
}


So nun hab ich folgendes kleines Problem. Wieso geht das nicht ??
reg0.ek ist ja 2 Bit breit, womit es insgesammt 4 zustände annehmen kann.
Ich kenn jedoch nur die zustände 0x00 und 0x01 auswerten, 0x02 und 0x03 bekomme ich nie ausgewertet.
Wenn ich reg0.ek einen anderen wert als 0x00 oder 0x01 zuweise, lnde ich immer in DoMist.

Habe ich irgendwo einen Denkfehler?

Der Debugger meldet mir in reg0.ek immer den richtigen wert.