PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Integervariable Bitweise abfragen und Ergebnis "durchscrollen"



sunshine
10.04.2011, 09:20
Hallo,
ich habe eine Integervariable Alarm_high. Jedes Bit dieser Variablen steht für einen Alarm. Wenn mehrere Alarme aktiv sind, möcht ich bei jedem Funktionsaufruf eine andere Alarmnummer zurückbekommen. Im Grunde möchte ich die Alarmvariable "durchscrollen".
Nur wie mache ich das programmiertechnisch am besten?



static int Alarmstelle = 0

for(i=Alarmstelle; i<16; i++)
{
if (Alarm_high & (1 << i))
{
//Ausgabe der Alarmnummer
Alarmstelle = i+1;
break;
}
if(i=15)
{
Alarmstelle = 0;
}
}


So habe ich es mir gedacht, funktioniert aber leider nicht.
Habt ihr einen anderen Vorschlag?

BMS
10.04.2011, 10:06
Hallo,
wenn das mit dem 1<<i nicht läuft, hätte ich das so in etwa gelöst:


unsigned int maske=1; //das 0.Bit setzen
for(...)
{
if(Alarm_high & maske)
{
//Ausgabe der Alarmnummer usw
}
maske=maske*2; //links schieben
}
Grüße, Bernhard

radbruch
10.04.2011, 10:22
unsigned int Alarm_high;
unsigned char alarm(void)
{
static char Alarmstelle = 0;
unsigned char temp = 0;

temp = Alarmstelle; // Alarmstelle in Lownipple laden (0 - 15)
if(Alarm_high & (1 << Alarmstelle))
temp |= 128; // Bit 7 setzen bedeutet Alarmbit in Alarm_high war gesetzt

if(Alarmstelle < 15) Alarmstelle++; else Alarmstelle = 0;
return(temp);
}

Rückgabewert von alarm():
Bit0-3 = Alarmnummer
Bit7 = Alarmbit ist gesetzt

sternst
10.04.2011, 11:35
funktioniert aber leider nicht. Weil du hiermit "if(i=15)" i den Wert 15 zuweist, und nicht mit 15 vergleichst.

sunshine
10.04.2011, 12:36
Dankeschön! (Dummer Fehler) Werd ich heute abend gleich testen!