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

Thema: #define send, #define reveice

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941

    #define send, #define reveice

    Anzeige

    LiFePo4 Akku selber bauen - Video
    wie kann ich verschiedene programme aufrufen:
    zur zeit ist jetzt receive aktiv.

    //#define send
    #define receive

    void main(void) {
    .....
    #ifdef receive
    #endif
    .....
    #ifdef send
    #endif
    ...
    }


    zur zeit ist #define receive aktiv.
    wie kann ich in einem programm wechseln, das jetzt
    #define receive ausgeschaltet wird und #define send
    eingeschaltet wird. es soll in der main durchgeführt
    werden, wenn zum beispiel ein bestimmter pin aktiv ist.
    mfg pebisoft

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    HI

    Also nach ansi-C ist dein #define send auskommentiert, und kann garnicht eingeschaltet werden.
    Das würde nur einen Compilerfehler einbringen.

    Du musst es halt ändern. Kann man nciht automatisch, wenn man's gleich mit dem Preprocessor abfragt!

    Ganz liebe Grüße; Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Pebi, die ganzen #-Anweisungen sind für den Kompiler
    In deinem Beispiel generiert er den Code für receive, und "send" ignoriert er.
    Zur Laufzeit kannst du da nix mehr machen
    das sind sog. "Präprozessor" Anweisungen.
    Brauchen tut man das, um das Programm z.B. je nach #define zu variieren.
    Beispiel:
    #define _mega32
    ..
    ..
    #ifdef _mega32
    printf("Ich bin ein 32\n");
    #else
    printf("Ich bin ein was anderes\n");
    #endif

    D.h. im HEX file ist entweder den eine Printf ODER der andere

    klaro ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    HI

    Genau. Der Preprocessor od. Präprozessor setzt nur die Werte für "send" ein.
    D.H. Überall wo im Programmcode "send" steht, schreibt er den Wert hin.

    Und DANN wird erst in HEX umgewandelt. Also compiliert.

    Jetzt kann man ihn aber auch anweisen (z.B. mit #ifdef), zu prüfen, ob ein Label definiert wurde. Genau das machst du da.

    Und wenn Bedingung 1 erfüllt ist, passiert nur, was zwischen #ifdef steht.
    Alles andere wird einfach abgeschnitten, und kommt einfach garnicht in dein Endsystem, kann also auch nicht On the Run geändert werden.

    Ganz liebe Grüße,
    Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    danke für die antwort, gut erklärt.
    mfg pebisoft

Berechtigungen

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

Solar Speicher und Akkus Tests