Forum: Compiler & IDEs Ansi C: Bei Instanz erzeugen, Funktionen deaktivieren


von Entwickler (Gast)


Lesenswert?

Hallo,

ich grüble schon ein paar Stunden über folgendes Problem. Ich habe eine 
Objekt in Ansi C, das alle Uart Funktionalitäten besitzt. Nun brauche 
ich zwei Uart Verbindungen. In dem Uart Objekt gibt es zwei Interrupt 
Handler, jeweils für eine Uart. Wenn ich nun zwei Instanzen von diesem 
Uart Objekt in meiner Main Applikation erzeuge, soll je nachdem nur der 
eine relevante Interrupt Handler im Uart Objekt vorhanden sein. Könnte 
man sowas möglicherweise mit einer Präprozessoranweisung lösen ? Wie 
würdet ihr dies realisieren ?

von troll (Gast)


Lesenswert?

Sicher dass das kein C++ ist? Klingt irgendwie objektorientiert...

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Link dein uart.o zur Anwendung und gut ist.

Daß das Object 2x verwendet wird, bedeutet ja nicht, daß die Funktionen 
darun 2x da sind.  Das ist Sinn und Zweck von Object-Modulen, uzumindest 
einer davon.

von Entwickler (Gast)


Lesenswert?

Es handelt sich um Ansi C Code. Also mit Präprozessoranweisungen macht 
hier keinen Sinn ?

von Klaus W. (mfgkw)


Lesenswert?

Wenn ich halbwegs verstanden habe, was du vorhast, fallen mir dazu 
Funktionszeiger ein.

Die Funktionen sind eh in keinem Objekt vorhanden, sondern genau einmal 
im ganzen Programm.
Dann würde man in jedes Objekt einen Zeiger auf einen Funktion richten, 
im einen Objekt halt auf die eine Funktion und im anderen Objekt auf die 
andere.
Aufgerufen wird dann über den Funktionszeiger die jeweils für das Objekt 
passende Funktion.

Mit dem PP wird das wohl nix, weil der ja von den Objekten zur Laufzeit 
nichts weiß.

von HutHut (Gast)


Lesenswert?

PP is dafür eigentlich nicht gedacht. Wie ein Vorredner schon erwähnte 
solltest du zur Laufzeit Funktionspointer (Callback-Funktionen) dem 
jeweilig UART zuweisen.

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.