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 !!!!!