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
Interrupthandler müssen in C geschrieben werden, da diese hardwarenah sind.
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 | } |
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.
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.
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
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
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.
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.
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.