Zählrichtung erkennen
-
Ist das Zählintervall immer gleich?
Du kannst vermutlich auch die Differenz bilden, zumindest bei unsigned-Typen könnte es gut sein, dass da auch bei Überlauf das gleiche rauskommt wie sonst (bei unsigned char z.B. entweder 1 oder 255).
-
Ist das Zählintervall immer gleich?
Das Intervall ist unterschiedlich.
Du kannst vermutlich auch die Differenz bilden, zumindest bei unsigned-Typen könnte es gut sein, dass da auch bei Überlauf das gleiche rauskommt wie sonst (bei unsigned char z.B. entweder 1 oder 255).
Dann brauche ich aber einen Schwellwert z.B. wenn die Differenz (unsigned) größer als 127 ist, dann war es ein Richtungswechsel?
Denn ich habe bei einem normalen Überlauf wie du schon sagst als Ergebnis der Differenz einen kleinen Ergebniswert und bei einem Richtungswechsel, also wenn der neue Wert kleiner als der alte Wert ist eine große Differenz.
-
Bei z.B. unsigned char ist 255 -> 0 eben genau so mit einem Vorschritt wie mit einem Rückschritt möglich. Warum würde man den Vorschritt bevorzugen? Wohl weil er kleiner ist.
Also solltest Du den Schritt nach vorne und den Schritt nach hinten betrachten. Und dann nimmst Du den kleineren.
-
Du kannst doch auch schon vor dem Zählvorgang erkennen, in welche Richtung das geht.
-
Du kannst doch auch schon vor dem Zählvorgang erkennen, in welche Richtung das geht.
Mein Programm zählt nicht. Das zählen findet wo anders statt.
Bei z.B. unsigned char ist 255 -> 0 eben genau so mit einem Vorschritt wie mit einem Rückschritt möglich.
Genau, jedoch hätte ich auch die Möglichkeit das Ergebnis als signed zu interpretieren was mir an der Stelle aber auch nicht weiterhilft?
Also solltest Du den Schritt nach vorne und den Schritt nach hinten betrachten. Und dann nimmst Du den kleineren.
Wenn es leider keine andere Möglichkeit gibt.
-
Natürlich gibt es keine andere Möglichkeit.
Bis auf die anderen Möglichkeiten die es gibt. z.B. sich als Debugger auf den Prozess daufzuhängen und zu gucken wie die Speicherstelle wirklich modifiziert wird.
Das ganze klingt allerdings nach einem höchst sinnlosem Unterfangen. Womit sich noch eine Möglichkeit auftut: lass es einfach und widme deine Zeit etwas sinnvollerem.
-
Das ganze klingt allerdings nach einem höchst sinnlosem Unterfangen. Womit sich noch eine Möglichkeit auftut: lass es einfach und widme deine Zeit etwas sinnvollerem.
Was soll denn dieses Vorurteil. Du kennst die Verwendung ja gar nicht.
Außerdem interessieren mich keine Speicherstellen, das hast du falsch verstanden.
-
Anaconda55 schrieb:
Das ganze klingt allerdings nach einem höchst sinnlosem Unterfangen. Womit sich noch eine Möglichkeit auftut: lass es einfach und widme deine Zeit etwas sinnvollerem.
Was soll denn dieses Vorurteil. Du kennst die Verwendung ja gar nicht.
Außerdem interessieren mich keine Speicherstellen, das hast du falsch verstanden.Was interessiert dich denn sonst?
Wenn du ordentliche Antwortenhastwillst, dann beschreib doch einfach mal was du eigentlich erreichen willst.
-
Wenn die Intervalle, in welchen du den Zählerstand abgreifst, klein genug sind, damit dort drin mal kein Überlauf stattfindet, dann sammle mehrere Werte (mindestens 2). Dann kannst du feststellen, in welche Richtung es geht und falls einer der Werte ein Überlauf war, dann kannst du durch die anderen Werte überprüfen, in welche Richtung der Überlauf stattfand.
@hustbaer,
Eine Anwendung wäre z.B. den Zähler eines Motoren auszulesen und damit dann die Drehrichtung von eben diesem Motor festzustellen.Grüssli
-
Anaconda55 schrieb:
ich habe einen Zähler. Ich möchte die Zählrichtung erkennen.
Dies könnte ich realisieren indem dass ich mir den alten Wert merke und mit dem neuen vergleiche. Wenn der neue Wert größer als der alte gemerkte Wert ist, dann ist die Zählrichtung vorwärts.Was mache ich jedoch bei einem Überlauf? Gehen wir mal von 8bit aus.
Hallo Anaconda55,
das kann man realisieren, wenn man zumindest festlegt, dass der Absolutwert eines Sprung zwischen zwei Zählerständen einen Schwellwert nicht überschreitet. Bei 8bit wäre der Wert 127. Du vergleichst zunächst beide Werte und stellst dann fest, ob der Sprung von alt auf neu <127 ist.
Beispiel: von 80(0x50) auf 120(0x78) sind delta=abs(120-80)=40< 127 ok positive Drehrichtung
von 120(0x78) auf -64(0xa0) sind delta=abs(-64-120)=184 >= 127 -> der Sprung war zu groß, also war es ein Überlauf. Die Drehrichtung ist immer noch positivIn negativer Richtung geht es genauso. Nur musst Du bei der Berechnung des deltas aufpassen, da kann es natürlich auch zu einem Überlauf kommen. Das gilt es zu berücksichtigen.
Gruß
Werner