Hallo zusammen, ich habe derzeit ein etwas 'exotisches' Problem: Ich habe verschiedene defines, mit der ich verschiedene Varianten einer Firmware auswählen kann. Ich möchte mir nun ein Byte im Flash mit der bit-kodierten Variante anlegen. Auf Basis von #define SOUND_TO_LIGHT #define ALT_COLORS sollte nun ein Byte im Flash mit dem Wert von beispielsweise 0b01001000 entstehen. Ich habe schon mit Konstanten und und defines experimentiert - komme aber mit der Umwandlung nicht klar. Es wäre nett, wenn einer einen Tipp hätte. Viele Grüße, Henne
sowas?
1 | const ee_version ... = 0 |
2 | #ifdef SOUND_TO_LIGHT
|
3 | | (1 << 0) |
4 | #endif
|
5 | #ifdef ALT_COLORS
|
6 | | (1 << 6) |
7 | #endif
|
8 | ;
|
oder sauberer:
1 | #ifdef SOUND_TO_LIGHT
|
2 | #define HAVE_SOUND_TO_LIGHT 1
|
3 | #else
|
4 | #define HAVE_SOUND_TO_LIGHT 0
|
5 | #endif
|
6 | |
7 | #ifdef ALT_COLORS
|
8 | #define HAVE_ALT_COLORS 1
|
9 | #else
|
10 | #define HAVE_ALT_COLORS 0
|
11 | #endif
|
12 | |
13 | const ee_version ... = (HAVE_SOUND_TO_LIGHT << 0) | (HAVE_ALT_COLORS << 6); |
oder direkt die Masken definieren.
@Johann: Deine zweite Variante hat mir die Augen geöffnet - Vielen Dank :-) Bei dem Taggen meiner Firmwares habe ich allerdings festgestellt, dass ich ein älteres Programm unverändert nicht mehr kompilieren kann, da ich zwischenzeitlich WinAVR zur Unterstützung eines neueren AVRs geupdated hatte und nun der Code zu groß ist. Ich geh hier mal auf die Suche, um das hoffentlich wieder in den Griff zu bekommen.. Viele Grüße, Hendrik
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.