-
        

Ergebnis 1 bis 3 von 3

Thema: Frage zum "Conditional Compilation"

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    27.12.2006
    Ort
    Minneapolis
    Beiträge
    30

    Frage zum "Conditional Compilation"

    Anzeige

    Moin,

    ich habe beim stöbern im Netz ein Programcode gefunden, der folgende Zeilen enthielt:
    Code:
    #ifdef RC5_AVAILABLE
      if (enableRC5 && !(count36kHz % 8))
    	IsrRC5(); // wird alle 222.2us aufgerufen
    #endif
    Im Standardwerk von Kernighan & Ritchie finde ich dazu nur auf Seite 208, dass der Code zwischen #ifdef und #endif nur compiliert wird, wenn der identifier (RC5_AVAILABLE) im preprocessor (??) definiert wurde, d.h. wenn er in einer #define control Zeile enthalten war.
    Wo muss (in welchem Programm) das #define RC5_AVAILABLE definiert werden?

    Hat jemand hierzu Erfahrung?

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hi,
    Im Standardwerk von Kernighan & Ritchie finde ich dazu nur auf Seite 208, dass der Code zwischen #ifdef und #endif nur compiliert wird, wenn der identifier (RC5_AVAILABLE) im preprocessor (??) definiert wurde, d.h. wenn er in einer #define control Zeile enthalten war.
    Das ist soweit korrekt.

    Wo muss (in welchem Programm) das #define RC5_AVAILABLE definiert werden?
    Das kann man auf mehrere Arten machen.
    In diesem speziellen Fall würde ich das Define im Makefile selbst definieren.

    Der Hintergrund ist folgender:
    Die Funktion IsrRC5 steht in einer eigenen Quelldatei (rc5.c), ebenso die Variable enableRC5. Diese Quelldatei muß auch im Makefile eingebunden werden. Die #ifdef Abfrage ist deshalb drin, damit es beim Übersetzen anderer Projekte keine Fehlermeldung gibt.

    So sehen dann die Anpassungen im Makefile aus:
    Code:
    # List C source files here. (C dependencies are automatically generated.)
    SRC = $(TARGET).c
    
    # If there is more than one source file, append them above, or adjust and
    # uncomment the following:
    SRC += asuro.c \
           rc5.c
    
    # Optional compiler flags.
    #  -g:        generate debugging information (for GDB, or for COFF conversion)
    #  -O*:       optimization level
    #  -f...:     tuning, see GCC manual and avr-libc documentation
    #  -Wall...:  warning level
    #  -Wa,...:   tell GCC to pass this to the assembler.
    #    -ahlms:  create assembler listing
    CFLAGS = -g -O$(OPT) -I../../lib/inc -DRC5_AVAILABLE\
    	-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
    	-Wall -Wstrict-prototypes \
    	-Wa,-ahlms=$(<:.c=.lst)
    rc5.c ist die zusätzliche Quelldatei.
    CFLAGS = -g -O$(OPT) -I../../lib/inc -DRC5_AVAILABLE\
    Mit der Option -D bei den CFLAGS (Compiler-Optionen) kann man ein Define im Makefile definieren. Dies bewirkt dasselbe wie
    #define RC5_AVAILABLE
    in einer Quell-Datei.

    Das ganze Projekt findet sich im AsuroWiki
    Damit läßt sich der Asuro mit einer IR Renbedienung steuern, die RC5 kompatible ist (z.B. jede Universalfernbedienung)
    Die Doku im AsuroWiki ist derzeit leider noch unvollständig.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    27.12.2006
    Ort
    Minneapolis
    Beiträge
    30
    m.a.r.v.i.n,

    thank for you help! Du bist immer eine sichere Quelle zur Problemlösung!http://www.roboternetz.de/phpBB2/ima...eusa_angel.gif
    Angel

    Noch ein schönes Restwochenende.

Berechtigungen

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