GCC Wie ist das mit reentrantem Code?

Gast #5130885
Lesenswert?

Christian J. schrieb:
> Versteht der gcc das und trifft Maßnahmen? Oder muss ich da was
> beachten?

was soll er den für Maßnahmen beachten? Das ist doch etwas normales.

Aber du solltest beachten, das ein Funktionsaufruf in der ISR dafür 
sorgt, dann alle Register gesichert werden müssen, das macht das ganze 
etwas langsamer (ob es stört musst du wissen)
Gast #5130889
Lesenswert?

Peter II schrieb:
> Aber du solltest beachten, das ein Funktionsaufruf in der ISR dafür
> sorgt, dann alle Register gesichert werden müssen, das macht das ganze
> etwas langsamer (ob es stört musst du wissen)

Na, ich erwarte doch, dass er den Stackframe richtig bedient. Notfalls 
kann ich bei Aufrufen aus dem Main ja noch __disable_IRQ() eingeben. 
Die Routine benutzt keine externen Daten, nur lokale und die Parameter 
der Funktion.
Beitrag #5130905 wurde von einem Moderator gelöscht.
#5130913
Lesenswert?

Peter II schrieb:
> Aber du solltest beachten, das ein Funktionsaufruf in der ISR dafür
> sorgt, dann alle Register gesichert werden müssen, das macht das ganze
> etwas langsamer (ob es stört musst du wissen)

Das betrifft nur die Scratch-Register, also jene, die von einer 
aufgerufenen Funktion verändert werden dürfen. Bei AVRs sind das recht 
viele, daher fällt das bei denen auf.

Wenn es sich allerdings um einen Cortex M handelt, dann werden diese 
Register sowieso schon vollständig als Teil des Interrupt-Verfahrens von 
der Hardware gesichert. Bei den Cortex M ergibt sich also durch 
Funktionsaufrufe innerhalb einer ISR keinerlei Nachteil.

Hintergrund: Bei den Cortex M sind ISRs normale Funktionen mit normalem 
ABI, keine speziellen Exception-Handler. Folglich sichern sie weder 
Scratch- noch Status-Register. Das geschieht automatisch als Teil des 
Interrupt-Ablaufs des Cores. Es gibt daher auch keinen "Return from 
Interrupt" Befehl, sondern eine spezielle Return-Adresse signalisiert 
einen anderen Ablauf.

Da diese 5 Store-Operationen parallel zum Vektor- und Code-Zugriff auf 
das Flash-ROM erfolgen, hat das in der üblichen Konfiguration auch kaum 
Folgen für die Interrupt-Latenz. Zudem entfallen sie, wenn ein 
Return-From-Interrupt gleich in den nächsten Handler springt.
Beitrag #5131014 wurde von einem Moderator gelöscht.

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