www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zahlen Differnez bestimmtn


Autor: Philipp (Gast)
Datum:

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast also einen Ringpuffer programmiert wolltest du sagen.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und dafür gibt es Beispiele in der Codesammlung
Beitrag "Ringpuffer AVR"

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
differenz = ((Zeiger1 + 256) - Zeiger2) & 255

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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> differenz = ((Zeiger1 + 256) - Zeiger2) & 255

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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

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


Autor: Martin (Gast)
Datum:

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist index1 und index2 ein char-Wert bleibt nur noch
differenz = index1-index2
übrig

Autor: yalu (Gast)
Datum:

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

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.