mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik simple Erweiterung eines Zählers


Autor: Klausy (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie breit (Bits) ist T2?

Autor: Klausy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
16bit

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> irgendwas mit & | >> oder so...
Da fällt mir nur Gebastel dazu ein... :-/

Ich sehe übrigens die Korrektur des Zählers als kritisch:
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:
T2akt = T2;            // T2 wird nur 1x gelesen, Zähler darf ungestört weiterlaufen
AktPos += T2akt-T2old; // Differenz seit letztem Auslesen auf aktuelle Position aufaddieren
T2old = T2akt;         // Wert merken

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.