Forum: Mikrocontroller und Digitale Elektronik Präprozessor: Direktiven verknüpfen


von Thomas Bergmüller (Gast)


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

von http://www. (Gast)


Lesenswert?

Es gibt da irgendeine komische Regel, versuch mal ein weiteres Makro
#define lambda(x) x zu erstellen und damit deine "Funktion aufzurufen".

von Thomas Bergmüller (Gast)


Lesenswert?

Die Information hat viel weitergeholfen! Gab hier schonmal so ein Thema:

Beitrag "C Preprocessor, Gluebefehl ##"

mit dem CONCAT und CONCATx aus dem Thread funktionierts.



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

von http://www. (Gast)


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.

von http://www. (Gast)


Lesenswert?

grmbl
1
_mega8_
2
_tiny12_

von Thomas B. (nichtessbar)


Lesenswert?

Manchmal hab ich echt ein Brett vorm Kopf oder ich sitz einfach schon zu 
lang dabei :/

Vielen Dank für die Hilfe, haut alles hin wie's soll =)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.