Hallo,
ich oute mich mal als Anfänger und Programmierleihe. Also bitte nicht
erschlagen.
Für ein Bastelprojekt versuche ich den Laser-Rotations-Scaner YDLIDAR X4
auszuwerten. Leider klappt nicht alles so wie es soll. Das Programm
läuft und es werden mir auch plausible Werte angezeigt. Auf das letzte
halbe Grad Auflösung oder den letzten 1/4mm habe ich bewusst verzichtet.
Zum ersten mal habe ich mich an einen Ringbuffer gewagt, dort vermute
ich auch das Problem.
Der Sensors Selbst sendet seine Daten kontinuierlich über
UART (Baud
128000).
Vor jedem Schreibvorgang in den Buffer wird dieser auf 0 geprüft. Das
ist manchmal nicht der Fall. Manchmal heißt: das es immer an einer
anderen Stelle im Buffer vorkommt. Woher diese Werte kommen konnte ich
nicht herausfinden. Da die Werte in dieser Reihenfolge oder an dieser
Stelle zuvor nicht empfangen wurden. Den Empfang habe dafür mittels LA
mitgeschrieben. Auch ein löschen, des Buffers, nach Abarbeitung eines
vollständigen Datensatzes bis zum nächsten Header hat nichts geholfen.
Auch habe mindestens 3 mal geprüft ob wirklich alle Pakete aus dem
Datensatz abgearbeitet werden.
Zweiter Punkt warum ich vermute das es am Ringbuffer liegt. Die
CheckCode Auswertung (Prüfsumme) löst aus, aber nur wenn ich beim lesen
aus dem Ringbuffer über das Bufferende komme. Und dann auch nur in ca.
5% der Fälle.
Ich Denke ich habe einen Fehler im Code, den ich einfach nicht finden
kann.
Anbei das Lauffähige Minimalprogramm. Ohne die Datei LCD, da hier nur
ganz simple ein 0815 LCD angesteuert wird. Ohne LCD-Anzeige (ja mit
delay...) tritt der Fehler häufiger auf...
µC: ATXMega256A3BAU (32MHz)
Ich hoffe jemand ist so nett und kann mir einen Tipp geben, wo ich den
Fehler noch suchen kann.
vielen Dank schonmal
Lesezeichen