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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.