Forum: Mikrocontroller und Digitale Elektronik Verständniss Frage zu einer Lauflicht Schleife


von Peter Klöppel (Gast)


Lesenswert?

Guten Morgen,

Ich habe hier eine Routine gefunden, die im Zusammenhang mit einer 
anderen, einen "Nightrider" Effekt nachbilden soll.

Das Funktioniert auch komischer weise?!
1
void Set_Channel_Pwm(uint8_t LedNum, uint8_t Rotation)
2
{
3
    uint8_t d = 0;
4
5
    for (uint8_t Index = 0; Index < 4; Index++)
6
    {
7
        /* calculate next index */
8
        if (Rotation)                           // Rotation = 1 ?
9
        d = (uint8_t)((Index)   -   (LedNum));
10
        else                                    // Rotation = 0 ?
11
        d = (uint8_t)((LedNum)  -   (Index));
12
13
        if      (d == 0)
14
        pwm.Ch[Index] = 75;    // led 3
15
        else if (d == 1)
16
        pwm.Ch[Index] = 25;    // led 4
17
        else if (d == 2)
18
        pwm.Ch[Index] = 10;    // led 5
19
        else if (d == 3)
20
        pwm.Ch[Index] = 5;    // led 5
21
        else
22
        pwm.Ch[Index] = 0;     // all other led´s
23
    }
24
}

Wenn ich jetzt davon ausgehe, dass meine Variable Index = 0 ist und 
LedNum einen Wert von 3, da müsste die Variable doch überlaufen und das 
ganze nicht mehr wirklich funktionieren, weil Werte 252 und Co.
Nur wieso klappt alles?

Mfg der Peter K.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Druck dir deinen Code aus, und schreib dir einfach mal die Werte welche 
du für deine einzelnen Variablen annimmst auf der Seite dran.

Soo kompliziert ist der Algorithmus nicht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter Klöppel schrieb:
> Nur wieso klappt alles?
Ziemlich einfach: es kommt auf Rotation an...

von mmm (Gast)


Lesenswert?

Peter Klöppel schrieb:
> weil Werte 252 und Co.

Was passiert denn, wenn d 252 ist?

von Peter Klöppel (Gast)


Lesenswert?

Wenn "LedNum" == 0 ist, Index == 1
Ergibt wenn ich es in DevC++ jage 254..?!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter Klöppel schrieb:
> Ergibt wenn ich es in DevC++ jage 254..?!
Ja, passt.
Und was passiert danach mit dieser Zahl? Wie geht es weiter? Was 
könnte da schädliches passieren?

von Peter Klöppel (Gast)


Lesenswert?

Lothar M. schrieb:
> Peter Klöppel schrieb:
>> Ergibt wenn ich es in DevC++ jage 254..?!
> Ja, passt.
> Und was passiert danach mit dieser Zahl? Wie geht es weiter? Was
> könnte da schädliches passieren?

Das würde ich ja jetzt gerne mal wissen. Sie läuft über und hat den Wert 
254, dieser wird aber nirgends behandelt.

von Thomas E. (picalic)


Lesenswert?

Wenn der Programmi

Peter Klöppel schrieb:
> Das würde ich ja jetzt gerne mal wissen. Sie läuft über und hat den Wert
> 254, dieser wird aber nirgends behandelt.

Wenn der Programmierer statt dem grässlichen "if-else if-else if ..."- 
Konstrukt ein "switch" verwendet hätte, würdest Du sehen, daß im 
"default"-Fall eben doch eine Behandlung stattfindet!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.