Forum: Mikrocontroller und Digitale Elektronik #defines in Schleifen verwenden (mit laufender Variable)


von Gustav (Gast)


Lesenswert?

Hallo,

zur Übung möchte ich mehrere Portpins meines MC (ATMEGA328) als Eingang 
mit aktivierten Pull Up Widerständen setzen.

In der .h File definiere ich die einzelnen Pins/Ports:
1
//Eingang 1
2
#define BM_1_DDR    DDRD
3
#define BM_1_PORT    PORTD
4
#define BM_1_PIN    PIND
5
#define BM_1_BIT    3
6
7
//Eingang 2
8
#define BM_2_DDR    DDRD
9
#define BM_2_PORT    PORTD
10
#define BM_2_PIN    PIND
11
#define BM_2_BIT    2
12
13
//Eingang 3
14
#define BM_3_DDR    DDRB
15
#define BM_3_PORT    PORTB
16
#define BM_3_PIN    PINB
17
#define BM_3_BIT    1
18
19
//Eingang 4
20
#define BM_4_DDR    DDRC
21
#define BM_4_PORT    PORTC
22
#define BM_4_PIN    PINC
23
#define BM_4_BIT    1
in der .c file möchte ich die Eingänge setzen:
z.B Eingang 1:
1
BM_1_DDR &= ~(1 << BM_1_BIT);
2
BM_1_PORT |= (1<<BM_1_BIT);
Jetzt zu meiner Frage, gibt es eine Möglichkeit, die Eingänge in einer 
Schleife (z.B for Schleife i=1..4) zu setzen?
(Ich würde die Zahl in "BM_1_DDR" durch 2,3 bzw 4 ersetzen)


Danke für eure Hilfe,
Grüße,
Josef

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was macht der Präprozessor aus einem #define?

Reinen Textersatz.


Das musst Du Dir bei solchen Fragestellungen immer vor Augen führen.

Und damit ist klar, daß das, was Du erreichen willst, so nicht geht.

von Gustav (Gast)


Lesenswert?

Hallo,

danke für deine Antwort,

ich habe befürchtet, dass es so ist wie du schreibst.
Ich habe jedoch gehofft, dass es einen Trick bzw. Kniff gibt, das 
Problem trotzdem lösen zu können.

Grüße

von Andreas S. (asc)


Lesenswert?

Gustav schrieb:

> zur Übung möchte ich mehrere Portpins meines MC (ATMEGA328) als Eingang
> mit aktivierten Pull Up Widerständen setzen.
>
> In der .h File definiere ich die einzelnen Pins/Ports:
[...]
> //Eingang 4
> #define BM_4_DDR    DDRC
> #define BM_4_PORT    PORTC
> #define BM_4_PIN    PINC
> #define BM_4_BIT    1
>
> in der .c file möchte ich die Eingänge setzen:
> z.B Eingang 1:
>
> BM_1_DDR &= ~(1 << BM_1_BIT);
> BM_1_PORT |= (1<<BM_1_BIT);
>
> Jetzt zu meiner Frage, gibt es eine Möglichkeit, die Eingänge in einer
> Schleife (z.B for Schleife i=1..4) zu setzen?
> (Ich würde die Zahl in "BM_1_DDR" durch 2,3 bzw 4 ersetzen)

Das geht natuerlich nicht, weil ein #define schon vom preprocessor 
"substituiert" wird (der eigentliche compiler sieht diesen schon gar 
nicht mehr). Du musst fuer die dynamischen Anteile Variablen benutzen.

von Sven S. (boldie)


Lesenswert?

Wenn die 1...4 zur Compilezeit fest  sind, dann gibt es "Krücken", die 
dies ermöglichen. Lesestoff für eine solche lib gibt es hier: 
www.boost.org/doc/libs/release/libs/preprocessor/doc/index.html

von Andreas S. (asc)


Lesenswert?

Bei nur vier Iterationen, kann er die restlichen sechs Zeilen auch noch 
dazu schreiben und sich die Schleife sparen.

Da es (laut OP) nun als Uebung gedacht ist, macht es wohl Sinn, dass er 
sich zunaechst grundsaetzlich mit C auseinandersetzt.

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.