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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Frank (Gast)


Bewertung
-3 lesenswert
nicht 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)


Bewertung
-5 lesenswert
nicht lesenswert
Interrupthandler müssen in C geschrieben werden, da diese hardwarenah 
sind.

von Frank (Gast)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
-3 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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. (achs)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.