LPC1768 / IAR / C++ und Interrupts

Gast #1451112
Lesenswert?

Hi zusammen,

ich habe das LPC1768 KickStart Kit von IAR und versuche gerade in C++ 
eigene Interruptroutinen zu schreiben.

Die Datei cstartup_M.c habe ich so definiert, dass alle INT-Routinen 
__weak sind. Wenn ich jetzt unter "C" eine Interrupt-Routine schreibe, 
die in der cstartup_M.c als __weak definiert ist, wird meine neue 
Routine genutzt.

Wenn ich das ganze unter "C++" versuche, dann geht leider garnix. D.h. 
die leere Platzhalter-Routine aus der cstartup_M.c wird verwendet. Wenn 
ich den Interrupt in eine eigene Klasse packe geht es auch nicht.

Das sieht man auch schön im Linker-Logfile. Anscheinend macht der was 
nicht ganz richtig.

Hat jemand vielleicht eine Idee, an was das liegen kann?

Danke
 Dominik
Gast #1451951
Lesenswert?

Super. Danke, das funktioniert.


Kannst du (oder jemand anderes) mir vielleicht auch sagen, 
Klassenmethoden als IRQs nutzen kann? Das funktioniert bei mir mit 
extern "C" nicht...

Danke nochmal!
 Dominik
#1451964
Lesenswert?

(...habe keine Ahnung von LPC1768...)

Dazu müssen die auch sicher static sein in der Klasse.
Damit ist verbunden, daß sie auf nichts zugreifen, was zu
einem Objekt gehört, sondern nur auf static-Elemente der Klasse
und entsprechend auch nur static-Methoden wiederum aufrufen.

Schließlich hat man in der ISR ja kein Objekt.

Falls das nicht reicht: eine Wrapper-Funktion außerhalb der
Klasse schreiben, die dann die statische Methode aufruft.
Gast #1452025
Lesenswert?

Danke!

Mit Wrapper funktionierts, ohne allerdings nicht (static hatte ich 
schon). Auf die Idee hätte ich auch selbst kommen können :)

Vielleicht kennt doch noch jemand eine Möglichkeit es ohne Wrapper zu 
machen?
Irgendwie ist das unschön... ;)


Ciao
 Dominik
Persönliche Seite #1452058
Lesenswert?

Hi

das kann, so wie du deine Umgebung beschreibst, nicht funktionieren da 
eine Klassenmethode an ihrem Namen immer auch den Klassennamen in 
irgendeiner Form "drankleben" hat. Sonst könnte sie der Linker nicht der 
Klasse zuordnen. Du müsstest also bei der Definition der 
Interruptvektoren den passenden Namen eintragen. Obs das aber Wert ist?

Matthias

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