Code in C und oder C++

Gast #5163044
Lesenswert?

Hallo,
ich programmiere meine Mikrocontroller normalerweise in C. Jetzt habe 
ich aber verschiedene sensoren. Dann wäre es ja am einfachsten eine 
Klasse in C++ zu erstellen und damit dann alle Sensoren zu machen. Dann 
hätte ich nämlich schnell und einfach die selben funktionen für 
verschiedene Sensoren (gleichen types).
Wie ist es dann aber mit den Timern und Interrupts. Sollte man diese 
dann auch in C++ schreiben? Oder behält man diese in C?

Frank
Gast #5163053
Lesenswert?

derjaeger schrieb:
> Interrupthandler müssen in C geschrieben werden, da diese hardwarenah
> sind.

Dämlichste Aussage die ich seit langem in diesem Forum gelesen hab (und 
das heißt schon was in diesem Forum...)

Du kannst deinen ISR handler in der Sprache schreiben, die du auf dem 
Ding zum laufen bringst. C bietet sich da an, da du sehr leicht 
ausführbaren Code dafür erzeugen kannst. Assembler geht genauso. C++ 
auch. Es sollte auch mit µPython möglich sein den eigentlichen ISR 
handler in python zu programmieren, warum auch nicht? Im Prinzip ist es 
einfach nur eine Adresse von der aus weg Code ausgeführt wird. 
Nebeneffekte hat man dann zwar mit ziemlicher Sicherheit, aber um das 
geht es erstmal nicht.
#5163055
Lesenswert?

Frank schrieb:
> Kann ich ja als extern "C" deklarieren

Genau daran muss man denken, da man sonst teilweise nichtmal eine 
Fehlermeldung erhält und der Interrupt einfach nicht aufgerufen wird. 
Was man dann in seinem Interrupt macht mit irgendwelchen C++ Klassen ist 
einem dann selbst überlassen. Die Regel das Interrupts möchst wenig Zeit 
kosten sollen gilt in allen Programmiersprachen.
Gast #5163062
Lesenswert?

derjaeger schrieb:
> Interrupthandler müssen in C geschrieben werden, da diese hardwarenah
> sind.

Nein... kann auch eine static member function einer klasse sein.

Problematisch wirds jedoch wenn du aus einem interrupt nicht mit einem 
normalem return-statement raus musst sonderen einem speziellem 
interrupt-return... das ist dann aber ein generelleres problem...

das trampolin (C function => C++ Object) wie oben beschrieben 
funktioniert natürlich auch ;)

73
Gast #5163088
Lesenswert?

Mir kam halt jetzt die überlegung, da ich jetzt uart benutzen wollte 
(Atmega328). Dieser hat ja nur einen uart und da war die Überlegung, ob 
C++ wirklich sinnig wäre. Da ich nur ein uart habe.
Jetzt war die überlegung das in C zu schreiben, oder einheitlich (wie 
alles andere) in C++.
Werde ich dann auch in C++ machen.

Frank

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