mikrocontroller.net

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


Autor: StephanW (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Matthias

Autor: StephanW (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.