- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 6 von 6

Thema: C für Programmierer

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.10.2004
    Ort
    Rheinstetten
    Alter
    41
    Beiträge
    357

    C für Programmierer

    Anzeige

    E-Bike
    Hi,

    ich habe schon sehr viel Erfahrung in der Programmierung mit Java. Auch habe ich schon mit C++ programmiert.

    Seit ich einen Asuro habe, probiere ich an den Beispielprogrammen, die etwas hardwarenähere Programmierung in C zu kapieren.

    Wenn ich da aber vor Zeilen wie:
    Code:
    UCSRB = (1<<RXEN)|(1<<TXEN); 
          UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    stehe (siehe Beispielprogramm im Wiki: https://www.roboternetz.de/wiki/pmwi...sComVergleich2 ), dann stehe ich vor einem programmiertechnischen schwarzen Loch.

    Gibt es irgendwo eine Erklärung, was diese tollen Befehle darstellen sollen? Ich programmiere eigentlich lieber Objektorientiert, aber ich lerne auch gerne neues bzw. altes, aber bewährtes.

    Ich würde mich freuen, wenn mir jemand entweder einen Link geben könnte, wo ich nachlesen kann, was diese Befehle bedeuten und ich auch lernen kann, wie ich sie selbst anwende, ohne nur von anderen Dateien zu kopieren, oder wenn es mir jemand einfach erklären könnte.

    Danke
    Unwissenheit ist ein Segen

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.07.2004
    Alter
    45
    Beiträge
    196
    du setzt mit (1<<xxxx) einfach ein flag in einem byte (die xxxx sind die jeweilige bezeichnung)
    also mit dem
    UCSRB = (1<<RXEN)|(1<<TXEN);
    setzt du einfach nur enable für receive & transmit
    mfg

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.10.2004
    Ort
    Rheinstetten
    Alter
    41
    Beiträge
    357
    Ok, und für was sind diese Bytes, gibt es da eine Liste?

    und warum mache ich eine Zuweisung zu UCSRB?
    Was kann ich dann mit dem UCSRB machen?
    Unwissenheit ist ein Segen

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    RXEN ist eine #define irgendwo tief in den Headern (<AVR>/avr/include/avr/ioxxxx.h)
    Es wird zu einer Konstanten aufgelöst, zB 3
    Nachdem der Präprozessor über die Quelle gehuscht ist, steht noch da
    (1<<3)
    also eine 1 um 3 Stellen nach linke geschoben, also 1000 binär.
    Man hat in dem Wert dadurch Bit 3 gesetzt. Mit | (bitweise oder) kann man mehrere solcher Werte -- oft auch als Maske bezeichnet -- überlagern.

    Eine Maske, in der Bit 3 und 5 gesetzt sind, wäre dann (1<<3)|(1<<5).
    Das geht in Java und C++ übrigens genauso, nur daß man in Java nicht direkt auf die Hardware greifen kann. Das Komplement erhält man mit ~ (nicht zu verwechseln mit ! (nicht))
    ~ dreht einfach alle Bits um 0 zu 1 und umgekehrt.
    Eine Maske, in der alle Bits gesetzt sind ausser Bit 6 ist daher ~(1<<6)
    Bit 6 in einer Variable zu löschen schreibt sich also so:
    foo = foo & ~(1<<6);
    oder kurz
    foo &= ~(1<<6);

    Für die arithmetischen Operationen hat man
    | (oder)
    & (und)
    ~ (not)
    ^ (exclusive or)
    &=, |=, ^=

    Für die logischen hat man
    && (und)
    || (oder)
    ! (nicht)
    &&=, ||=
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.04.2005
    Ort
    Weilburg
    Beiträge
    676
    Das sind nur BIT Manipulationen mit Konstanten.
    In der avr.lib (C:\WinAVR\avr\include) sind Makros für die unterschiedlichen AVR Typen.
    Das wird dann vom Compiler aufgelöst.
    Code:
    /* UART Status Register */
    #define    RXC        7
    #define    TXC        6
    #define    UDRE       5
    #define    FE         4
    #define    DOR        3
    #define    MPCM       0
    
    /* UART Control Register */
    #define    RXCIE      7
    #define    TXCIE      6
    #define    UDRIE      5
    #define    RXEN       4
    #define    TXEN       3
    #define    CHR9       2
    #define    RXB8       1
    Prostetnic Vogon Jeltz

    2B | ~2B, That is the Question?
    The Answer is FF!

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.07.2004
    Alter
    45
    Beiträge
    196
    ucsrb/c sind register jeweils 1byte in deinem µC mit denen du einstellungen am usart festlegen kannst.
    ->datenblatt sollte dir da doch sehr weiterhelfen..
    mfg

Berechtigungen

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

Solar Speicher und Akkus Tests