- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Was bedeutet dieser C- Code

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2008
    Beiträge
    29

    Was bedeutet dieser C- Code

    Anzeige

    Praxistest und DIY Projekte
    Hallo
    Ich bin mich gerade durch den Code eines bekannten am kämpfen, dadurch bin ich auf folgende Zeile gestoßen

    Code:
    SBUF0 = 0xFF & *p >> 8;          // put character
    kann mir jemand erklären was der da macht? so richtig versteh ich das nicht.
    Irgendwie ließt er was ein und verschiebt es gleichzeitig. die 0xFF ist als standartwert 0 ???
    ... aber was genau macht das & ???

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Ne Vermutung hätt ich. Aber da wär interessant, was *p (bzw. p) fürn Datentyp ist, und ob SBUF0 8 oder 16 Bit hat.

    Vermutung: *p wird 8 Bit nach rechts verschoben. Vom Resultat werden dann die 8 untersten Bits (Maske 0xFF = 0b11111111) SBUF0 zugewiesen...
    #ifndef MfG
    #define MfG

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    25.08.2004
    Ort
    Planegg
    Beiträge
    96
    Der holt sich Daten von Adresse p (pointer), verschiebt sie um 8 bit nach unten, maskiert die untersten 8 bit und schreibt das Ergebnis nach SBUF0. Das & ist ein bitweises UND. Das lässt nur die gesetzten Bits durch. Alle anderen werden auf Null gesetzt. Für den Fall, dass SBUF0 ein 8-bit-Register ist, wäre die Verundung mit 0xFF nicht notwendig, da das dann automatisch geschieht...
    Schöne Grüsse... Beppo

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2008
    Beiträge
    29
    SBUF= hat 8 Bit.
    "bitweises UND" bedeutet das, das er im Prinzip ein bit nach dem anderen kopiert?
    was bedeutet hier "maskiert" ?

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    "bitweise" heisst, dass es keine Überträge auf andere Bits gibt (im Unterschied zu addieren)
    MACHEN tut er die 8 Bit schon auf einmal.
    "maskieren" heisst, nur die bits durchlassen, die in der "Maske" auf 1 sind
    Wobei es egal ist, welches Byte die Daten und welches die Maske ist.
    ( A & B = B & A)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2008
    Beiträge
    29
    ah... hinter dem *p ist ja eigentlich ein int wert, z.b 3.
    die ist aber eigentlich abgespeichert als 0000011.
    durch das & wird die 0000011 jetzt bitweise in das SBUF0 geschrieben?!?

    ist das richtig???

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Folgendes: Angenommen der Wert in *p wäre 0110110111001100.
    Wenn du jetzt *p & 0xFF machst, dann werden die rechten 8 Bit unverändert gelassen, und der Rest auf 0 gesetzt.
    die "Maske" ist 0000000011111111.

    Untereinander geschrieben:
    0110110111001100: Wert
    0000000011111111: Maske
    0000000011001100: Ergebnis (alle Werte, bei denen die Maske 1 ist, werden übernommen).

    Durch das = wird das ganze dann zugewiesen.
    #ifndef MfG
    #define MfG

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    25.08.2004
    Ort
    Planegg
    Beiträge
    96
    Das ganze Byte wird nach SBUF0 geschrieben. Ich nehm mal an, daß SBUF0 das Buffer-Register für eine serielle Schnittstelle ist. Der Controller sorgt dafür, daß das Byte dann bitweise rausgejagt wird. Das & 0xFF schneidet die oberen Bits ab.
    Schöne Grüsse... Beppo

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    25.08.2004
    Ort
    Planegg
    Beiträge
    96
    @PicNick: danke für die Übersetzung
    Schöne Grüsse... Beppo

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2008
    Beiträge
    29
    Zitat Zitat von beppo
    Das ganze Byte wird nach SBUF0 geschrieben. Ich nehm mal an, daß SBUF0 das Buffer-Register für eine serielle Schnittstelle ist.
    Ja, ist es. 8 bit


    [/quote]
    Das & 0xFF schneidet die oberen Bits ab.[/quote]

    weil SBUF0 nur 8 bit groß ist?????????
    muss ich das machen..... was passiert wenn ich das nicht mache???

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad