PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : #define send, #define reveice



pebisoft
08.03.2005, 18:54
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

tobimc
08.03.2005, 19:08
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

PicNick
08.03.2005, 19:14
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 ?

tobimc
08.03.2005, 19:22
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

pebisoft
09.03.2005, 07:37
danke für die antwort, gut erklärt.
mfg pebisoft