Zitat von
Klebwax
Weil die serielle Ausgabe eigentlich immer zu lange dauert. Sie blockiert damit entweder die CPU oder erzeugt zusätzliche Interrupts. Beides bringt einem das Timing gründlich durcheinander. Aber das ist das kleine Einmaleins vom Entwickeln im hardwarenahen Bereich. Debug-Code darf das Timing nicht beinflussen, sonst verdeckt er Fehler oder erzeugt neue.
Ausnahmen bestätigen natürlich die Regel. Und mit einem Scope kann man dann nachweisen, daß die erzeugten Signale trotz serieller Debugausgabe immer noch ok sind.
Weswegen ich bei Schnittstellen, wie geschrieben, lieber den LA nehme. Aber was als letztes wirklich auf der seriellen passiert, bevor es hängt, kann man mit außreichend Pretrigger auch auf einem (digitalen) Scope sehen. Und wenn man bei einem UART-Error ein Port-Bit setzt und damit triggert, bekommt man auch eine Ahnung, wie und warum die Daten kaput gehen. Aus beiden Informationen kann man vermutlich schließen, was wirklich schief geht und die Ursache finden und beseitigen.
Das klingt erstmal plausibel. Zwischen deinem Programm und der seriellen hängt beim Raspi die Laufzeitlibrarie und der Linux Kernel, und beide drehen so ihr eigenes Ding. Gerade da wäre es wichtig, wie die Zeitbeziehung zwischen deinem Programm (GPIO-Bit direkt setzen) und der wirklichen seriellen ist.
MfG Klebwax