Forum: Mikrocontroller und Digitale Elektronik Merkwürdiger Code in MSP430-LEDS Beispiel


von StephanW (Gast)


Lesenswert?

Hallo,

ich beziehe mich auf das "leds"-Beispiel im examples-Ordner des
MSPGCC-Compilers. Dort steht:


int main(void) {
    int i;
    int o = 0;

    WDTCTL = WDTCTL_INIT;               //Init watchdog timer

    P3OUT  = P1OUT_INIT;                //Init output data of port1

    P3SEL  = P1SEL_INIT;                //Select port or module
-function on port1

    P3DIR  = P1DIR_INIT;                //Init port direction register
of port1


    while (1) {                         //main loop, never ends...
        for (i=0; i<8; i++, o++) {
            P3OUT = (1<<i) | (0x80>>(o&7));
            delay(0x4fff);
        }
    }
}
----

Im Ausdruck "P3OUT = (1<<i) | (0x80>>(o&7));" ist das (o&7) doch
vollkommen überflüssig, oder? Weil o und o&7 doch vollkommen gleich
sind, solange o < 8...
Verstehe ich nicht, wer kann helfen?

Danke und Gruß
Stephan

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

nur ist o im zweiten Durchlauf der while() Schleife nicht mehr < 8.

Matthias

von StephanW (Gast)


Lesenswert?

Hi,

da liegt der Hund begraben, du hast natürlich recht. Und ich denke mal
das o bei 255 überläuft und wieder bei 0 anfängt, stimmts?

Gruß Stephan

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

nö. o wird irgendwann überlaufen und negativ werden. Das dürfte,
höchstwahrscheinlich, entweder bei 2^15-1 oder 2^31-1 passieren.

Matthias

von Rolf F. (Gast)


Lesenswert?

Das o wird ständig inkrementiert, während das i nach dem Wert 7 wieder
den Wert 0 erhält.
Da int in ANSI-C mindestens 16 Bit hat, läuft o erst nach Stunden über.

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.