Forum: Mikrocontroller und Digitale Elektronik Code in C und oder C++


von Frank (Gast)


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

von derjaeger (Gast)


Lesenswert?

Interrupthandler müssen in C geschrieben werden, da diese hardwarenah 
sind.

von Frank (Gast)


Lesenswert?

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

Kann ich ja als extern "C" deklarieren
1
extern "C" ISR(TIMER0_COMPA_vect)
2
{    
3
    timer0.interrupt();
4
}

von ui (Gast)


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.

von Sebastian V. (sebi_s)


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.

von Hans (Gast)


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

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Frank schrieb:

> 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?

Mach es einfach, wie es Dir am besten past. Du könntest z.B. auch 
einfach damit anfangen, Deinen C Code so zu gestalten, dass er auch von 
einem C++ Compiler übersetzt werden kann.

mfg Torsten

von A. S. (Gast)


Lesenswert?

Deine Aufgabe mag ein Anlass sein, sich mit C++ zu befassen um es zu 
lernen. Also Fang einfach an. Vorteile kommen sowieso erst später.

von Stefan F. (Gast)


Lesenswert?

Ich würde auch sagen: mach einfach. Denn du hast einen guten Grund, C++ 
zu verwenden.

Man kann auch in C Objektorientiert programmieren. Muss man aber nicht.

von Frank (Gast)


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

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Frank schrieb:

> Werde ich dann auch in C++ machen.

C ist (grob gesagt) eine Untermenge von C++. Wenn Du es in C schreibst, 
hast Du es auch in C++ geschrieben. Wie würdest Du
1
void add_timer( unsigned ms, void(*)(void*), void* context );

in C++ schreiben wollen?

von Frank (Gast)


Lesenswert?

Torsten R. schrieb:
> Frank schrieb:
>
>> Werde ich dann auch in C++ machen.

Ich meinte damit, dass ich dafür auch eine Klasse erstellen werde.

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.