Forum: Mikrocontroller und Digitale Elektronik Variantenhandling von C-Programmen


von Ron M. (ucprogrammierer)


Lesenswert?

Hallo Leute,

ich habe eine Frage bezüglich Varaintenhandling von Sourcen. Ich 
beschäftige mich gerade mit dem S12 uC. Als Programmierumgebung verwende 
ich Codewarrior.

Jetzt zu meinen Problem. Ich habe ein Prgramm geschrieben das einerseits 
über PWM Eingänge Befehle erhält und zum anderen über CAN. Wenn ich 
jetzt die CAN Variante verwenden will sollen die PWM Sourcen und die 
Teilprograme nicht mitcompiliert werden. Wie kann ich diese 
ausschließen. Meine erste Idee war durch eine Variable und if Abfragen. 
Aber mir gefällt dies nicht.

Wie jemand eine andere Möglichkeit.

Gruß
ucprogrammierer

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Du kannst das den Präprozessor machen lassen.

#define PWM_SOURCE 1 // oder 0 wenn der Teil nicht rein soll
#define CAN_SOURCE 1 // oder 0 ...

#if PWM_SOURCE
// hier Code für PWM
#endif

#if CAN_SOURCE
// hier Code für CAN
#endif

von Ron M. (ucprogrammierer)


Lesenswert?

Danke für die schnelle Antwort.

Klappt wunderbar.

von Klaus (Gast)


Lesenswert?

Es ist immer wieder erstaunlich, wie die Leute große Projekte in C auf 
die Beine stellen wollen, ohne die grundlegensten Grundlagen zu 
kennen...

von markus (Gast)


Lesenswert?

Eine andere Möglichkeit wäre mittels

#ifdef PWM_SOURCE
// hier Code für PWM
#endif

#ifdef CAN_SOURCE
// hier Code für CAN
#endif

und darüber einfach irgendwo

#define PWM_SOURCE
oder
#define CAN_SOURCE

so wirds doch gemacht um das mehrmalige einbinden eines Includes
zu verhindern oder nicht?

lg

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Klar, das kann man auch machen, wenn einem Ja/Nein reicht.

Das #define mit einem Wert gibt einem mehr Möglichkeiten, weil man im 
#if die Werte abfragen kann. Z.B. kann man dann sowas machen:

#define PWM_SOURCE 1 // oder 0 wenn der Teil nicht rein soll
                     // oder 2 wenn zusätzlich Debugcode rein soll

#if PWM_SOURCE
// hier Code für PWM
#if (PWM_SOURCE == 2)
// hier Debugcode für PWM
#endif
#endif

von Ron M. (ucprogrammierer)


Lesenswert?

Hallo Klaus,

schön das ich dich zum Staunen gebracht habe. Aber man kann doch schon 
mal etwas vergessen.
Mein Projekt hat CAN, SPI und steuert einen Brushlessmotor mit 
Positionserfassung über Hallsensoren an. Ich will das Projekt nicht auf 
die Beine stellen sondern ich habe es schon auf die Beine gestellt. Hab 
vielleicht deshalb etwas zu kompliziert gedacht.

Naja wird immer Meckerer geben, die zu allem einen Kommentar schreiben 
müssen.

Gruß
ucprogrammierer

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.