Hallo, wenn ich immer wieder einen konstanten Wert auf mein Capture-Compare-Register drauf addiere, was passiert beim Überlauf? Startbedingung CCR0-Inhalt: 65000 im 16 bit Register CCR0 += 1000; was steht nun drin? CCR0 == 65535 == 0xFFFF oder CCR0 == 465 mfg
MSP430 schrieb im Beitrag #2740546: > Hallo, > > wenn ich immer wieder einen konstanten Wert auf mein > Capture-Compare-Register drauf addiere, was passiert beim Überlauf? > > Startbedingung CCR0-Inhalt: 65000 im 16 bit Register > > CCR0 += 1000; > > was steht nun drin? > > CCR0 == 65535 == 0xFFFF > > oder > > CCR0 == 465 Da das unsigned Arithmetik ist, funktioniert das wie bei einer Uhr. Wenn der Sekundenzeiger auf 50 steht, dann steht er 25 Sekunden später auf der 15. Denn um Dunstkreis der Sekundenberechnung auf einem Zifferblatt gilt nun mal 50 + 25 -> 15 > was steht nun drin? > CCR0 == 65535 == 0xFFFF Das wäre ein bischen viel Aufwand, wenn der µC jede Berechnung dahingehend überwachen müsste. Der addiert einfach und was nicht mehr (durch den Overflow) in die Ergebnisvariable passt, das passt einfach nicht und geht verloren. So wie wenn du auf einem Papierblock rechnest und die Zahlen so groß werden, dass sie nicht mehr aufs Papier passen. Alles was du links vom Papier 'in die Luft' schreibst, hast du 'in die Luft' geschrieben.
...kann man das auf alle Befehle übertragen, die mit "physikalisch" existenten Registern arbeiten? mfg
MSP430 schrieb im Beitrag #2740566: > ...kann man das auf alle Befehle übertragen, die mit "physikalisch" > existenten Registern arbeiten? Das kannst du auf alles übertragen, was sich in C "unsigned" schimpft. Bei 'unsigned' ist dieses Verhalten garantiert. Bei signed ist es meist ähnlich, allerdings ist es da nicht garantiert.
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.