mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega128 mit UART und Timer Interrupt ->PROBLEM


Autor: flinkflash (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
}

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was passiert eigentlich, wenn der controller 2 printf gleichzeitig
auszuführen versucht? beeinflussen die sich irgendwo (vars im ram)?

Autor: flinkflash (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hab eben mal die printf Message in der while Schleife rausgenommen.
Führt allerdings zu keinem besseren Ergebnis. Leider.

Autor: Manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

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.