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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.