Hallo,
ich habe folgendes Problem mit dem AVR GCC Präprozessor:
Um einfacher auf die IO-Pins des ATMega64 zugreifen zu können habe ich
mir folgende Präprozessordirektive geschrieben:
1 | //Ausgänge auf "1" setzen:
|
2 | //==> output_high(F, 6);
|
3 | #define output_high(Port, Nr) PORT ##Port |= (1 << Nr)
|
4 | //#define output_high(Port, Nr) Port |= (1 << Nr)
|
5 |
|
6 | //Ausgänge auf "0" setzen:
|
7 | //==> output_low(F, 2);
|
8 | #define output_low(Port, Nr) PORT ##Port &= ~(1 << Nr)
|
9 | //#define output_low(Port, Nr) Port &= ~(1 << Nr)
|
10 |
|
11 | // Eingangspin einlesen:
|
12 | //==> Status = input_Pin(A,2);
|
13 | #define input_Pin(Port, Nr) PIN ##Port & (1 << Nr)
|
14 |
|
15 | // DDR auf Eingang setzen:
|
16 | //==> easyDDR_in(F, 5); ==> DDRF &= ~(1 << 5);
|
17 | #define easyDDR_in(Port, Nr) DDR ##Port &= ~(1 << Nr)
|
18 |
|
19 | // DDR auf Ausgang setzen:
|
20 | //==> easyDDR_out(F, 5); ==> DDRF |= (1 << 5);
|
21 | #define easyDDR_out(Port, Nr) DDR ##Port |= (1 << Nr)
|
Diese sind in einer Datei ausgelagert und werden im Main-file
includiert.
Funktioniert auch einwandfrei, mit
wird PortF, Pin6 logisch 1.
Nun möchte aber auch für Ports einen Alias mittels #define festlegen.
Dazu habe ich eine neue .c-Datei angelegt, die ebenfalls in meinem
Projekt includet wird. Zu Beginn dieser Datei steht
1 | #ifndef _ADC121_PORT
|
2 | #define _ADC121_PORT F
|
3 | #warning "_ADC121_PORT not defined, using default port F"
|
4 | #endif
|
Dann folgt die Funktion
1 | void Test
|
2 | {
|
3 | easyDDR_out(_ADC121_PORT, 4);
|
Leider führt dies zu folgender Ausgabe im "Build"-Fenster:
1 | D:\AVR\Akkumanagement\..\libraries\Header-Files/ADC121S021.c:56: error: 'DDR_ADC121_PORT' undeclared (first use in this function)
|
Das "_ADC121_PORT" wird also vom Präprozessor nicht durch das "F"
ersetzt.
Was mache ich falsch ???
Danke schonmal !!!!!