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


von flinkflash (Gast)


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);
}

von Tobi (Gast)


Lesenswert?

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

von flinkflash (Gast)


Lesenswert?

Hi,

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

von Manu (Gast)


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

von Peter D. (peda)


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

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.