MaJaProL:LED Algorithmus
Zur Navigation springen
Zur Suche springen
Belegungsvektor = Vektor pro Client, welche LEDs setzbar sind.
Statusvektor = Vektor pro Client, welche LEDs grade an sein sollen
Prioritätenverwaltung
Da jeder Client sich seine Belegung der LEDs selbst aussuchen kann, kann es zu Überschneidungen kommen. Um dann noch entscheiden zu können, ob die LED nun an oder aus gehört, werden Prioritäten eingeführt.
Die Prioritäten werden durch die Reihenfolge der Clients in einem Vektor/Array bestimmt.
Um aus den initialen Belegungsvektoren die aktuell gültigen zu berechnen, genügt folgender Algorithmus:
for(int i = MAX_INDEX; i >= 0; i--) { zZbelegung[i] = initialbelegung[i]; for(int j = i - 1; j >= 0; j--) { zZbelegung[i] = ~initialbelegung[j] & zZbelegung[i]; } }
Wer's nicht glaubt, fragt mich. Ich erklär das nochmal.
aktuelle Ausgangsbelegung
Die aktuelle Ausgangsbelegung ergibt sich aus den aktuellen Belegungsvektoren und den aktuellen Statusvektoren.
Der Algorithmus dazu:
ausgangsbelegung=0; for(int i = 0; i <= MAX_INDEX; i++) { ausgangsbelegung = ausgangsbelegung | (zZbelegung[i] & zZstatus[i]); }