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
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.
Lesezeichen