Forum: Mikrocontroller und Digitale Elektronik Frage zu #define mit mehreren Werten, art array


von Markus (Gast)


Lesenswert?

Ich habe letztens irgendwo in einem code sowas hier gesehen:

#define test 10
#define MODI  255, 150, 15,test


Ich kann dazu keine näheren Infos finden.
Ich fände es sehr elegant wenn man den PWM duty cycle, im Programmkopf 
auf verschiedene modi definieren könnte.
Kann mir bitte jemand erläutern was es mit so einem #define mit mehreren 
Werten auf sich hat? Und wie man darauf zugreift?

Danke Markus

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Immer daran denken:

Der Präprozessor macht Textersatz.

D.h. das Wort "MODI" wird durch die Zeichenfolge
"255, 150, 15,test" bzw. durch die Zeichenfolge
"255, 150, 15,10" ersetzt.

von Achim M. (minifloat)


Lesenswert?

Meinst du etwa so wie folgt?
1
#define test 10
2
#define MODI  255, 150, 15,test
3
4
uint8_t modens[4] = {MODI};
5
// danach einfach aufs Array langen...
Zwar nicht schön, aber wenns funktioniert, bittesehr...

: Bearbeitet durch User
von Markus (Gast)


Lesenswert?

bisher habe ich einfach ein array, dass array jetzt einfach mit dem 
define zu füllen anstatt direkt mit den Werten macht nicht so einen 
großen Sinn...
Vielleicht habe ich mir da was eingebildet was gar nicht da war....

Danke

von Karl H. (kbuchegg)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Markus schrieb:
> bisher habe ich einfach ein array, dass array jetzt einfach mit dem
> define zu füllen anstatt direkt mit den Werten macht nicht so einen
> großen Sinn...

Das kommt drauf an. Im Zusammenspiel mit anderen Präprozessor 
Anweisungen kann das durchaus Sinn machen
1
#ifdef TEST_MODE
2
#define MODI 10, 20, 30, 40
3
#else
4
#define MODI 1, 2, 4, 5
5
#endif
6
7
uint8_t PWM_Values[] = { MODI };

je nachdem, ob das Makro TEST_MODE vor dieser Codestelle definert war 
oder nicht, wird das Array mit anderen Werten initialisiert, was zb zum 
Debuggen nützlich sein kann, weil sich bei einer 8-Bit PWM die PWM Werte 
für 10, 20, 30, 40 mit einer LED gut unterscheiden lassen, die Werte für 
1, 2, 4 und 5 aber vielleicht nicht.

Oder vielleicht 'errechnet' sich einer der Werte bereits zur Compilezeit 
aus einem anderen Wert zb der µC-Taktfrequenz die in F_CPU steht.

Ob etwas Sinn macht oder nicht, kann man nicht a priori an irgendetwas 
fest machen. Allerdings: Der Präprozessor macht Textersetzungen, ehe der 
Compiler den Programmtext zu Gesicht bekommt. Nicht mehr und nicht 
weniger. Was du dann daraus machst, ist deine Sache.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.