Bergsfrau schrieb:
> DerEinzigeBernd schrieb:
>> Du rufst printf IM Interrupt-Handler auf.
>
> Warum? weil diese Funktion viel Zeit kostet?
Sieh mal, wie viele einzelne Zeichen Du hier für jeden einzelnen
Interrupt-Aufruf ausgibst:
> printf("\n------------------------- [UART RX HANDLER]");
> uart_calls_cnt++;
> printf("\n-call cnt: %d", uart_calls_cnt);
> printf("\n * Size RX char: %d", rx_size);
> printf("\n *Your input: ");
> printf(" [I]%s[/I]", (char *)g_rx_buff);
Selbst wenn diese printf()-Aufrufe nicht blockieren (d.h. erst
zurückkehren, bis sie alles ausgegeben haben), dauert die ISR ziemlich
lange. Es kann also sein, daß beim Einlaufen des nächsten Zeichens bei
der UART die ISR noch nicht beendet ist, und direkt der nächste
Interrupt ausgelöst wird.
Und wenn die Aufrufe blockieren (weil Deine Umgebung keinen
interruptgesteuerten Ausgabehandler mit ausreichend großem Sendepuffer
hat), dann geht richtig viel Zeit in der ISR drauf; sofern die
UART-Hardware nicht mehrere empfangene Bytes puffern kann, gehen diese
unweigerlich verloren.
Also: Nein, das ist auch für "ein erstes Debug" eine ganz schlechte
Idee.