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
Hi nur ist o im zweiten Durchlauf der while() Schleife nicht mehr < 8. Matthias
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.