Forum: Compiler & IDEs Bitmanipulation mit Konstante


von henne (Gast)


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

von Johann L. (gjlayde) Benutzerseite


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.

von henne (Gast)


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

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.