Forum: Mikrocontroller und Digitale Elektronik Zahlen Differnez bestimmtn


von Philipp (Gast)


Lesenswert?

Hallo, hab damal folgende Frage: Ich habe mir einen speicher 
porogrmmiert und auf diesem Speicher zeigen 2 Pfeile! Ich muss halt 
jetzt nur die IF Anweisung wissen, dsa wenn sich Pfeil 1 Pfeil 2 nähert! 
Da der Speicher 255 Zeichen Platz hat kann der zeiger auch über die 255 
kommen und wieder bei 0 anfange. Ich bräuchte also eine IF-Anweisung die 
sagt wenn die Difference zwischen Zeiger 1 und 2 zu klein wird soll er 
das und das machen!

von Martin (Gast)


Lesenswert?

Du hast also einen Ringpuffer programmiert wolltest du sagen.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Und dafür gibt es Beispiele in der Codesammlung
Beitrag "Ringpuffer AVR"

von Martin (Gast)


Lesenswert?

differenz = ((Zeiger1 + 256) - Zeiger2) & 255

Je nachdem, wie das einsetzt musst du zeiger1 und Zeiger2 austauschen.

von yalu (Gast)


Lesenswert?

> differenz = ((Zeiger1 + 256) - Zeiger2) & 255

... und die +256 kannst du weglassen, da das Ergebnis eh auf 8 Bit
begrenzt wird. Also
1
differenz = (Zeiger1 - Zeiger2) & 255

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

differenz = (Zeiger1 - Zeiger2) & 255 Das & ist doch Unsinn.. das ändert 
nix am Ergebnis...

 XXXXXXXX
&11111111
---------
 XXXXXXXX

Weil
1 & 1 = 1
0 & 1 = 0
Also
x & 1 = X

Also ändert ein & mit 1 nix am Erbenis...


von Martin (Gast)


Lesenswert?

@yalu
Das stimmt nicht was du schreibst. Rechne nochmal alle möglichkeiten 
durch.

Eins solle ich aber ergänzen, mit Zeiger ist nicht der Zeiger gemeint 
sondern eher der Index im Array[256].

also : differenz=((index1 + 256) - index2) & 255

ich bin davon augegangen, dass index1 und index2 Int-Werte sind, also 
kein char.

von Martin (Gast)


Lesenswert?

Ist index1 und index2 ein char-Wert bleibt nur noch
differenz = index1-index2
übrig

von yalu (Gast)


Lesenswert?

Etwas spät, aber:

@Läubi:

Ich bin wie Martin davon ausgegangen, dass alle beteiligten Variablen
(Zeiger1, Zeiger2 und differenz) vom Typ int sind (wie bei Indizes
üblich). Deswegen hat das & 255 schon eine Bedeutung.

Du hast aber recht, wenn differenz ein unsigned char und 8 Bit breit
ist. Dann kann man das & 255 weglassen.

Aus Portabilitätsgründen würde ich aber auch in diesem Fall dazu
tendieren, die das & 255 beizubehalten. Stören tut's nicht und mit
etwas Glück wird es in den Fällen, wo es nicht benötigt wird,
wegoptimiert.

@Martin:

> Das stimmt nicht was du schreibst. Rechne nochmal alle möglichkeiten
> durch.

Habe ich, die beiden Ausdrücke

  differenz = ((Zeiger1 + 256) - Zeiger2) & 255

und

  differenz = (Zeiger1 - Zeiger2) & 255

liefern für alle Zeiger1 und Zeiger2 aus [0, 255] das gleiche
Ergebnis. Oder reden wir vielleicht irgendwo aneinander vorbei?

> Ist index1 und index2 ein char-Wert bleibt nur noch
> differenz = index1-index2
> übrig

Stimmt, aber unsigned char passt besser, da dann auch Differenzen >127
als positive Zahlen repräsentiert werden.

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
Noch kein Account? Hier anmelden.