Präprozessor: Direktiven verknüpfen

Gast #2484130
Lesenswert?

Hallo,

ich bin gerade dabei eine Bibliothek für ein Modul zu erstellen, das für 
unterschiedliche Prozessoren compiliert wird. Über das Makefile kommt 
eine Direktive -DPROCESSOR=atmega32 über den Compiler rein, und aufgrund 
dieser will ich eine Methode benennen.


Die Methode soll dann im jeweiligen Objectfile dcs_XXXXX_init() heißen, 
wobei die XXXXX durch die PROCESSOR-Direktive ersetzt werden sollen.

Mein bisheriger Ansatz ist ein Makro das so aussieht:
1
#define pre_create_hwFunc(proc)  dcs_ ## proc ## _init


schreibe ich
1
void pre_create_hwFunc(atmega32)() // wird zu dcs_atmega32_init()
2
{
3
   .... 
4
}

funktioniert das so wie es soll, sprich die Funktion heißt dann 
dcs_atmega32_init();

Will ich dem Makro die über den Compiler definierte Direktive mit dem 
Prozessortyp übergeben, nimmt er PROCESSOR als Text im Makro und die 
Methode bekommt einen falschen Namen.
1
void pre_create_hwFunc(PROCESSOR)() // wird zu dcs_PROCESSOR_init()
2
{
3
   .... 
4
}

Kann ich irgendwie dem Präprozessor mitteilen, dass es sich bie 
PROCESSOR um eine definierte Direktive handelt und er den definierten 
WERT verwenden soll, anstatt dem Namen der Direktive?


Bin natürlich auch für alle anderen Lösungsansätze offen und dankbar.

regards und Danke schonmal
Thomas

P.s. Die Funktion muss bei jedem Compiliervorgang anders heißen, damit 
ich beim Verwenden der Library irgendwie den Linker dazu bewegen kann 
das richtige Objectfile für die Zielhardware zu verwenden ;) Man sollte 
eben doch nur plattformunabhängige Libraries machen :P
Gast #2484212
Lesenswert?

Thomas Bergmüller schrieb:
> Hätte aber noch eine Frage, an das -mmcu=atmega32 das ich dem Compiler
> mitgebe komm ich über den Präprozessor nicht heran oder?

Vorsicht Halbwissen: Ich meine es wird je nach µP eine Konstante 
definiert, also mega8_ oder _tiny12 oder so in der Art. Guck doch mal 
in die io.h wie dort das includen der µP-spezifischen Dateien wie iom8.h 
usw gelöst wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren