Präprozessor Variable zur Laufzeit generieren



  • Hallo,

    Verschiedene Speicheradressen sind als Präprozessor Variablen vorhanden:

    #define DEVICE_BASE_ADDR0		0xfffb0000
    #define DEVICE_BASE_ADDR1		0xfffb0001
    #define DEVICE_BASE_ADDR2		0xfffb0002
    

    Wie kann ich mit Hilfe des Indexes [0...2] zur Laufzeit auf eine Präprozessor-Variable zugegriffen. DEVICE_BASE_ADDRX . Ich habe folgendes probiert:

    #define DEVICE_PORT_GET_ADDR( x ) DEVICE_BASE_ADDR ## x 
    // x entspricht dem gewünschten Index [0...2]
    

    Meine Lösung führt zu einem Compiler-Fehler (undefinierte Variable). Mir ist klar, dass es noch mehr Präprozessor Magik braucht, um das gewünschte Ergebniss zu erreichen. Doch ist das mit Makros überhaupt möglich??



  • cmaus schrieb:

    Doch ist das mit Makros überhaupt möglich??

    Nein. Zur Laufzeit sind die Makros längst weg.


  • Mod

    void* device_port_get_addr(unsigned x)
    {
      static void* adresses[3]={(void*) DEVICE_BASE_ADDR0, (void*) DEVICE_BASE_ADDR1, (void*) DEVICE_BASE_ADDR2};
     return adresses[x];
    }
    

Anmelden zum Antworten