- LiFePO4 Speicher Test         
Ergebnis 1 bis 8 von 8

Thema: Bitmanipulation: Problem

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Bitmanipulation: Problem

    Hallo an alle,
    wir haben ein paar Schwierigkeiten mit der Bitmanipulation auf einem RNmega2560. Folgendes Problem:
    Eine Funktion fragt den Entfernungswert eines SRF10 ab. Zurückgegeben werden soll aber sowohl die Entfernung als auch eine Zahl zwischen 0 - 5 (falls mit der Kommunikation etwas nicht geklappt hat). Wir haben in der Funktion also nun drei 8 Bit Variablen (lsb, msb und die Kontrollzahl). Die Rückgabe der Funktion muss nun 24 Bit groß sein, da das aber nicht geht, nehmen wir 32bit. Die Zahlen werden nun so zusammengesetzt (wir nennen die Variablen jetzt mal returnvar, lsb_srf und msb_srf)

    result = ((returnvar << 16) + (lsb_srf << 8 ) + msb_srf);

    Ist das soweit richtig?

    Wir könnten jetzt mit dem Zerlegen anfangen, aber anscheinend funktioniert nicht mal das Zusammensetzen. Wenn man folgende Werte für die drei Variablen einsetzt:

    returnvar = 0b00000101;
    lsb_srf = 0b00000111;
    msb_srf = 0b11010110;

    ist das Ergebnis, das von der Funktion zurückgegeben wird, Dezimal 2006, was Binär wiederum [0000000000000000[00000]]11111010110 ist. returnvar wurde dem also gar nicht hinzugefügt.
    Jetzt nochmal zum Zusammensetzen:

    So sollte man eigentlich returnvar wieder rausbekommen:

    returnvar = ((result & 0xff0000) >> 16);

    und so das 16 Bit Ergebnis des SRF10:

    srf10 = (result & 0xffff);

    Da hat sich nun bewiesen, dass nur das msb und lsb zusammengesetzt wurden, denn returnvar ist immer 0, egal, was man dafür einsetzt und die Entfernungsmessung funktioniert.
    Woran liegt das?
    Danke schon mal und
    Grüße
    Jan
    teamohnename


    EDIT: Anscheinend ist das Ergebnis 2006, da das Display nur 16 Bit Variablen ausgeben kann. returnvar wurde also bei der Displayausgabe einfach abgeschnitten. Außerdem musste returnvar als 32bit Variable deklariert werden. Uns ist gerade aufgefallen, dass vorher die Warnung
    warning: left shift count >= width of type
    Ausgegeben wurde. Aber warum braucht die Variable, die um 16 bit verschoben wird so viel Platz, während die 8bit Variable, die um 8 bit verschoben wird, nicht 16 bit groß sein muss?
    Geändert von teamohnename (02.01.2013 um 11:01 Uhr)

Ähnliche Themen

  1. problem mit bitmanipulation
    Von _maddin im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 30.07.2008, 00:37
  2. Bitmanipulation
    Von raoul4 im Forum Assembler-Programmierung
    Antworten: 6
    Letzter Beitrag: 03.04.2007, 13:54
  3. Anschlussbelgung anpassen mit Bitmanipulation
    Von waldi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 19.12.2006, 13:04
  4. Bitmanipulation in ASM
    Von teslanikola im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 11.04.2006, 13:19
  5. Bitmanipulation
    Von teslanikola im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 29.08.2005, 21:28

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test