Hallo allerseits,
ich stehe gerade vor dem Problem, daß mir ein externes Gerät auf die Statusanfrage per UART einen bis zu 450 Zeichen langen String zurückgibt, in dem ich in der 2. Hälfte nach einer gewissen Zeichenfolge suchen muß, um den darauf folgenden numerischen Wert zur weiteren Verarbeitung auszulesen.
Der UART-Puffer ist mit 255 auf das Maximum gesetzt und weil ich unverzüglich nach der Anfrage mit dem Einlesen beginne, kann ich die derzeit 404 Zeichen vollständig einlesen und in einen entsprechenden String konvertieren und ausdrucken.
Das verwüstet zwar die Stacks, aber soweit ist die Kommunikation mit dem Gerät erstmal gesichert hergestellt.
Jetzt suche ich eine Idee, wie ich beim Inkey(#2) erst dann anfange, einen String anzulegen, wenn relevante Daten anliegen. Leider ist die genaue Position vom Betriebszustand des externen Geräts abhängig und ich muß z.B. auf "FuellSt" filtern , um den darauf folgenden numerischen Wert einzulesen. Einzelne Zeichen kann ich ja testen und entsprechend verwerfen, aber wie prüfe ich auf eine kurze Zeichenfolge? Hier mal ein Beispielstring, den ich aus der Ausgabe des AVR auf ein Terminal herauskopiert habe:
Tst 19.2C Tint 19.3C Twt 18.0C Tdcdc 16.2C Tpcb 20.2C Tres -50.9C Ubat 12.05V Uaus 12.05V Uklemm 12.05V Ust 0.53V Uzell 25mV IntSteiU 0.000e+00n Iaus 0.00A Ist 0.01A FuellSt 0.0n LastError 31n Error 31n StBtrb 28.84h SysBtrb 2818.97h PcStack 0n PcMedien 0n AdW 0n ResF 0n DHV 120.00n DC-DC 0.00% ULF1 0.0V Tbtl -51.0C Uref 2.51V Ubb 0.00V FS 0n SysTime 2010-09-14, 07:39:05
Hab jetzt überall mal ein bißchen gesucht und geblättert, aber niemanden mit einem ähnlichen Problem gefunden. Workaround wäre, die ersten 2xx Zeichen blind zu verwerfen, dann eine bestimmte Menge einzulesen, die den relevanten Teil enthält und dann den String zu schließen und mit den üblichen Mitteln zu durchsuchen und zu extrahieren. Oder die doppelten 0x20 zwischen den Textblöcken zu zählen und daraus den Startpunkt des String zu generieren.
Hat jemand eine bessere Idee?
Vielen Dank und viele Grüße
Frank
ich stehe gerade vor dem Problem, daß mir ein externes Gerät auf die Statusanfrage per UART einen bis zu 450 Zeichen langen String zurückgibt, in dem ich in der 2. Hälfte nach einer gewissen Zeichenfolge suchen muß, um den darauf folgenden numerischen Wert zur weiteren Verarbeitung auszulesen.
Der UART-Puffer ist mit 255 auf das Maximum gesetzt und weil ich unverzüglich nach der Anfrage mit dem Einlesen beginne, kann ich die derzeit 404 Zeichen vollständig einlesen und in einen entsprechenden String konvertieren und ausdrucken.
Das verwüstet zwar die Stacks, aber soweit ist die Kommunikation mit dem Gerät erstmal gesichert hergestellt.
Jetzt suche ich eine Idee, wie ich beim Inkey(#2) erst dann anfange, einen String anzulegen, wenn relevante Daten anliegen. Leider ist die genaue Position vom Betriebszustand des externen Geräts abhängig und ich muß z.B. auf "FuellSt" filtern , um den darauf folgenden numerischen Wert einzulesen. Einzelne Zeichen kann ich ja testen und entsprechend verwerfen, aber wie prüfe ich auf eine kurze Zeichenfolge? Hier mal ein Beispielstring, den ich aus der Ausgabe des AVR auf ein Terminal herauskopiert habe:
Tst 19.2C Tint 19.3C Twt 18.0C Tdcdc 16.2C Tpcb 20.2C Tres -50.9C Ubat 12.05V Uaus 12.05V Uklemm 12.05V Ust 0.53V Uzell 25mV IntSteiU 0.000e+00n Iaus 0.00A Ist 0.01A FuellSt 0.0n LastError 31n Error 31n StBtrb 28.84h SysBtrb 2818.97h PcStack 0n PcMedien 0n AdW 0n ResF 0n DHV 120.00n DC-DC 0.00% ULF1 0.0V Tbtl -51.0C Uref 2.51V Ubb 0.00V FS 0n SysTime 2010-09-14, 07:39:05
Hab jetzt überall mal ein bißchen gesucht und geblättert, aber niemanden mit einem ähnlichen Problem gefunden. Workaround wäre, die ersten 2xx Zeichen blind zu verwerfen, dann eine bestimmte Menge einzulesen, die den relevanten Teil enthält und dann den String zu schließen und mit den üblichen Mitteln zu durchsuchen und zu extrahieren. Oder die doppelten 0x20 zwischen den Textblöcken zu zählen und daraus den Startpunkt des String zu generieren.
Hat jemand eine bessere Idee?
Vielen Dank und viele Grüße
Frank