Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum "Conditional Compilation"
irobot_22587
18.03.2007, 16:29
Moin,
ich habe beim stöbern im Netz ein Programcode gefunden, der folgende Zeilen enthielt:
#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?
m.a.r.v.i.n
18.03.2007, 18:07
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:
# 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 (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/RC5DemoC)
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.
irobot_22587
18.03.2007, 18:45
m.a.r.v.i.n,
thank for you help! Du bist immer eine sichere Quelle zur Problemlösung!https://www.roboternetz.de/phpBB2/images/smiles/eusa_angel.gif
Angel
Noch ein schönes Restwochenende. O:)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.