GCC Wie ist das mit reentrantem Code?

Gast #5130885
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
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.