MaJaProL:LED Algorithmus: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Pegro (Diskussion | Beiträge) |
Pegro (Diskussion | Beiträge) K |
||
Zeile 1: | Zeile 1: | ||
Belegungsvektor = Vektor pro Client, welche LEDs setzbar sind. | Belegungsvektor = Vektor pro Client, welche LEDs setzbar sind. | ||
+ | |||
Statusvektor = Vektor pro Client, welche LEDs grade an sein sollen | Statusvektor = Vektor pro Client, welche LEDs grade an sein sollen | ||
Zeile 11: | Zeile 12: | ||
for(int i = MAX_INDEX; i >= 0; i--) { | for(int i = MAX_INDEX; i >= 0; i--) { | ||
− | zZbelegung[i]=initialbelegung[i]; | + | zZbelegung[i] = initialbelegung[i]; |
− | for(int j = i-1; j >= 0; j--) { | + | for(int j = i - 1; j >= 0; j--) { |
− | zZbelegung[i]=~initialbelegung[j]&zZbelegung[i]; | + | zZbelegung[i] = ~initialbelegung[j] & zZbelegung[i]; |
} | } | ||
} | } | ||
Zeile 27: | Zeile 28: | ||
ausgangsbelegung=0; | ausgangsbelegung=0; | ||
− | for(int i = 0;i <= MAX_INDEX; i++) { | + | for(int i = 0; i <= MAX_INDEX; i++) { |
− | ausgangsbelegung=ausgangsbelegung | (zZbelegung[i] & zZstatus[i]); | + | ausgangsbelegung = ausgangsbelegung | (zZbelegung[i] & zZstatus[i]); |
} | } |
Version vom 11. Juni 2006, 13:46 Uhr
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]); }