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.