Ich würde gerne eine bestehende Firmware portieren.
Im bestehenden Code hat es einen Header mit einer Reihe von "Defines" im
folgenden Stil:
1 | #define O_LED_1 (P3OUT_bit.P3OUT_0)
|
Diese Ausgänge werden dann im Weiteren folgendermassen benutzt:
1 | if(is_shutter_closed()) {
|
2 | O_LED_1 = 1;
|
3 | else
|
4 | O_LED_1 = 0;
|
Das Problem ist nun, dass dieser bitweise Zugriff auf Port-Pins
IAR-spezifisch ist. Ich könnte also nun entweder den ganzen Code
durchgehen und umschreiben:
1 | #define LED1_ON (P3OUT |= BIT0)
|
2 | #define LED1_OFF (P3OUT &= ~(BIT0))
|
1 | if(is_shutter_closed()) {
|
2 | LED1_ON
|
3 | else
|
4 | LED1_OFF
|
Oder aber ich "rüste" den bitweisen Zugriff nach. Dafür wollte ich etwas
in der folgenden Art und Weise definieren:
1 | volatile union {
|
2 | struct {
|
3 | unsigned char P1OUT_0 : 1;
|
4 | unsigned char P1OUT_1 : 1;
|
5 | unsigned char P1OUT_2 : 1;
|
6 | unsigned char P1OUT_3 : 1;
|
7 | unsigned char P1OUT_4 : 1;
|
8 | unsigned char P1OUT_5 : 1;
|
9 | unsigned char P1OUT_6 : 1;
|
10 | unsigned char P1OUT_7 : 1;
|
11 | };
|
12 | unsigned char P1OUT;
|
13 | } P1OUT_bit;
|
Dummerweise erschaffe ich so aber ein neues Bitfeld namens "P1OUT" in
Zeile 12. Wie kann ich das mit dem bestehenden P1OUT verknüpfen?