Interrupts in C

Gast #65772
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.
Gast #65773
Hallo,

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

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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 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.