Hallo,
wenn das mit dem 1<<i nicht läuft, hätte ich das so in etwa gelöst:
Grüße, BernhardCode:unsigned int maske=1; //das 0.Bit setzen for(...) { if(Alarm_high & maske) { //Ausgabe der Alarmnummer usw } maske=maske*2; //links schieben }
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?
So habe ich es mir gedacht, funktioniert aber leider nicht.Code: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; } }
Habt ihr einen anderen Vorschlag?
Hallo,
wenn das mit dem 1<<i nicht läuft, hätte ich das so in etwa gelöst:
Grüße, BernhardCode:unsigned int maske=1; //das 0.Bit setzen for(...) { if(Alarm_high & maske) { //Ausgabe der Alarmnummer usw } maske=maske*2; //links schieben }
Rückgabewert von alarm():Code: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); }
Bit0-3 = Alarmnummer
Bit7 = Alarmbit ist gesetzt
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Weil du hiermit "if(i=15)" i den Wert 15 zuweist, und nicht mit 15 vergleichst.funktioniert aber leider nicht.
MfG
Stefan
Dankeschön! (Dummer Fehler) Werd ich heute abend gleich testen!
Lesezeichen