moin, hat einer ne Idee wie man folgende Code_Zeilen effektiver machen kann: if((signed)T2>1023){T2 -= 1023; revolution_extension += 1023;} if((signed)T2<-1023){T2 += 1023; revolution_extension -= 1023;} irgendwas mit & | >> oder so...
Klausy wrote: > moin, hat einer ne Idee wie man folgende Code_Zeilen effektiver machen > kann: > > if((signed)T2>1023){T2 -= 1023; revolution_extension += 1023;} > if((signed)T2<-1023){T2 += 1023; revolution_extension -= 1023;} > sicher, dass revolution_extension um 1023 hoch bzw. runter gezählt wird? Ist irgendwie ungewöhnlich > irgendwas mit & | >> oder so... Ginge schon. deine Grenze ist ja offensichtlich der Überlauf ins 11. bit. Aber die Unterscheidung positiv/negativ bleibt einem nicht erspart (wegen revolution_extension) und ob ein T2 &= 0x03FF; so wahnsinnig effektiver als ein T2 -= 1023; ist ... na ich weiß nicht. Wenn du nicht nachweisen kannst, dass du tatsächlich an dieser Stelle ein Performance Bottleneck hast, würde ich das so lassen wie es ist.
> irgendwas mit & | >> oder so...
Da fällt mir nur Gebastel dazu ein... :-/
Ich sehe übrigens die Korrektur des Zählers als kritisch:
1 | T2 -= 1023; |
Das ist ein Read-Modify-Write Zyklus. Was ist, wenn der Zähler nach dem Lesen weiterzählt? Willst du einen Drehgeber verwalten? Ich würde das etwas anders angehen:
1 | T2akt = T2; // T2 wird nur 1x gelesen, Zähler darf ungestört weiterlaufen |
2 | AktPos += T2akt-T2old; // Differenz seit letztem Auslesen auf aktuelle Position aufaddieren |
3 | T2old = T2akt; // Wert merken |
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.