Forum: Mikrocontroller und Digitale Elektronik Interrupts in C


von Karl-Heinz (Gast)


Lesenswert?

Hallo,

ich bin nach einigen Jahren Hobby-Assembler-Programmierung jetzt auf C
umgestiegen weil es hier und da doch übersichtlicher ist. Ich verwende
den Codevision Compiler. Nun habe ich jedoch eine Frage zu den
Interrupts:
Default-Einstellung des Compilers ist, alle Register automatisch zu
sichern. Wenn ich jetzt aber in einer Interruptroutine z.B. einen Wert
vom UART einlese und ihn dann einer Variablen übergebe, so wird diese
dann ja auch wieder automatisch "restauriert" wenn ich die
Interruptroutine verlasse, falls diese variable einem register
zugeordnet war. Der übergebene Wert ist also futsch! Wie umgehe ich das
?? Die Variable im SRAM anlegen? oder wird auch dort restauriert? was
macht der Compiler denn eigentlich genau?? aus der recht knappen
Online-Hilfe werde ich nicht wirklich schlau...

Es würde mich freuen wenn jemand eine Antwort weis!

Vielen dank schonmal,

Karl-Heinz.

von Reiner (Gast)


Lesenswert?

Hallo,

1.  Globale Variable (außerhalb main() ) definieren
volatile int my_var;

2.  SIGNAL(SIG_UART_RECV)
{
was auch immer ...;
my_var = UDR
....
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.