STM32: Muss man Register in Interuptfunktionen von Hand sichern?

OP #2266000
Lesenswert?

Hi,

mache gerade meine ersten Schritte mit IRQs auf dem STM32.

Im Cortex M3 Programming Manual steht

When the processor takes an exception, unless the exception is a 
tail-chained or a latearriving
exception, the processor pushes information onto the current stack. This 
operation
is referred as stacking and the structure of eight data words is 
referred as stack frame. The
stack frame contains the following information:
● R0-R3, R12
● Return address
● PSR
● LR.


Was aber ist mit den anderen Registern? Wenn ich mir den Assembler Code 
meines Crossworks Compilers anschaue sichert der immer noch R7.

Muss ich die restlichen Register von Hand sichern, damit mein 
Hauptprogramm nicht gestört wird?

Gruß
Tom
#2266140
Lesenswert?

Thomas Burkhart schrieb:

> Beim STM32 werden Interrupthandler ja nicht einmal speziell für den
> Compiler gekennzeichnet.

Beim CM3 ist das in die Hardware gegossen. Exceptions aller Art sichern 
automatisch hardwaremässig alle Register, die eine aufgerufene Funktion 
nicht schon selbst sichert. Das sind die oben angegebenen Register.

Allen anderen Register werden vom Handler selbst gesichert. In C macht 
das der Compiler für dich ganz automatisch, weil das nicht nur für 
Interrupt-Handler gilt, sondern für alle Funktionen.
OP #2266175
Lesenswert?

Bingo! Ok, er muss natürlich nur die sichern, die überschrieben werden 
könnten. Stand auf der Leitung. D.h. er sichert demnach alle register 
die maximal im Handler verwendet werden könnten. Wie viele tatsächlich 
bei einem Aufruf verwendet werden kann ja ne nach Programmpfad 
variieren.

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