Erfolg!

Nachdem ich schon am überlegen war, ob ich  nicht einfach „’ne Stange RAM“ an den AVR klemme (hat zumindest dieses hier ein kleines Stück nach vorne gebracht, Entdecken eines blöden Design-Fehlers inklusive) habe ich mir noch etwas Gedanken über die Verarbeitung der Daten gemacht.

Resultat: Geht, man muss nur asynchron denken 😉

Hintergrund ist der: Das Versenden der Daten ist nicht, wie ich anfangs annahm, dass man einfach nacheinander die Pakete „rausballern“ kann. Stattdessen fordert das Stack die einzelnen Pakete beim an. Man muss sich also danach richten, was der Controller von einem will.

Hier im LAN funktioniert es tadellos. Wie das Verhalten ist, wenn einzelne Pakete verloren gehen (und dadurch nochmal angefragt werden) habe ich noch nicht geprüft. Ebenso ist noch ein kleiner Glitch möglich: Da das Ganze mehr oder weniger asynchron ist (muss ich nochmal nachschauen, ob/wo Interrupts im Spiel sind) könnte es passieren, dass Daten während dem Schreiben in die Historie angefordert werden. Dadurch kann es (in Verbindung mit dem verwendeten Puffer) dazu kommen, dass durch die veränderten Werte Lücken entstehen oder die Strings länger werden, was zu einem korrupten String oder sogar Pufferüberlauf führen kann.

Nach meiner aktuellen Überlegung sollte es recht einfach sein, das in den Griff zu bekommen. Wenn ein Datensatz angefordert wurde, wird die Datenübernahme gesperrt. Problem dabei: Was, wenn die Abfrage fehlschlägt und nie zum Ende kommt? Lösung: Die Übernahme nur für eine gewisse Zeit sperren.

Wie auch immer: Zeit für die Horizontale!