Bitmanipulation mit Konstante

Gast #1723303
Lesenswert?

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
Persönliche Seite #1723318
Lesenswert?

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.
Gast #1724605
Lesenswert?

@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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren