mikrocontroller.net

Forum: Compiler & IDEs avr-gcc: Exception via longjmp aus ISR?


Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich würde gerne in einem C-Programm für avr-gcc eine 
Ausnahmebehandlung folgender Gestalt machen:
#include <setjmp.h>
#include <avr/interrupt.h>

static jmp_buf context;

void ioinit (void)
{
    // Ein paar ISRs aktivieren etc.
}

SIGNAL (SIG_OVERFLOW2)
{
    longjmp (context, 1);
}

int main (void)
{
    ioinit (); 
    
    if (setjmp (context))
    {
        cli();
        // panic();
    }
    sei();

    // Hauptprogramm
}

Dazu ein paar Fragen:

SREG und I-Flag
longjmp stellt den Kontext mitsamt SREG wieder her. Gibt es eine 
Möglichkeit, sicherzustellen, daß das nicht IRQs global aktiviert?

-ffixed-n
Ich verwende ne handvoll fixe Register (2-8). Macht das evtl. Probleme?

avr-gcc Version ist 3.4.6 (avr-libc-Version find ich in deren Doku 
nicht, 1.4.4?). Ach ja, µC ist ein ATmega168, dürfte aber keine 
sonderliche Rolle spielen. Der WDT kann bestenfalls 15ms, das ist in der 
Anwendung zu langsam. Ausserdem hätte man dann auch das Problem, wieder 
kontrolliert aufzusetzen ohne Reset.

Danke schon mal,

Johann

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.