ATMega128 mit UART und Timer Interrupt ->PROBLEM

Gast #143905
Lesenswert?
• ▲
▼
Hi,

ich verwende einen Mega128, gcc und die Libs von Pascal Stang. Speziell
davon die timer128 und uart Funktionen. Nun habe ich folgendes Problem:

Ich kann über den HW Uart, printf-Messages an die Console von meinem PC
senden. Klappt sehr gut. Wenn ich allerdings eine solche printf Message
aus einer TimerInterrupt Funktion aufrufe, "stürzt" der Mega ab.
Wenn ich keine printf Message aufrufe läuft das Ding wunderbar. Mach
dort nun schon seit 3 Tagen(eigentlich Nächten) dran rum und seh kein
Land. Vielleicht hatte ja schon jemand das Problem und kann mir helfen.
Wäre super

cu+thx
flinkflash

SourceCode:

void timer_func(void)
{
  rprintf("Hallo2\r\n"); //Wenn diese Zeile raus ist läuft der
      Mega ohne Probleme
}

int main(void)
{

  timerInit();
  timerAttach(TIMER2OVERFLOW_INT, timer_func);

  uartInit();
  uartSetBaudRate(9600);

  rprintfInit(uartSendByte);

  while(1)
  {
    rprintf("Hallo1\r\n");
  }
  return(0);
}
Gast #631085
Lesenswert?
• ▲
▼
Hallo Zusammen,

stehe gerade vor dem gleichen Problem wie flinkflash!
Möchte mit rprintf in einem Timerinterrupt etwas über uart ausgeben. 
Leider kommt es dann beim Interrupt zum "Absturz" des Avr.

Verwende auch die Libs von Pascal Stang mit dem ATmega32.

Gibts dafür schon eine Lösung?

Viele Grüße
Manu
#631161
Lesenswert?
• ▲
▼
Manu wrote:

> Gibts dafür schon eine Lösung?

Ja, sich klarzumachen, daß jede Routine Ausführungszeit benötigt.

Die UART gehört mit zu den großen Zeitfressern, kann ja nur so schnell 
senden, wie die Baudrate eingestellt ist.

Und wenn der Timerinterrupt schneller kommt, läuft irgendwann der 
UART-Puffer über -> Krach Peng Bum.


UART und printf gehören generell nicht in Interrupts.

Und daß 2 Instanzen von printf nen wunderschönen Zeichensalat ergeben, 
sollte auch klar sein.


Peter

Antwort schreiben

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.

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.