Forum: Mikrocontroller und Digitale Elektronik MSP430 : String unbekannter Länge über UART lesen


von debugger (Gast)


Lesenswert?

Hallo,

ich stehe vor dem Problem, mit dem MSP430F149 einen String unbekannter 
Länge (z.B. zwischen 1 - 100 Zeichen) einlesen zu müssen, der über eine 
UART-Verbindung an den Controller geschickt wird.
Hat jemand dazu ein möglichst schlankes Codebeispiel, das auch wenig 
Ressourcen verbraucht ?
Ich denke daran, den String als gelesen zu werten, wenn z.B. 10 
Millisekunden kein neues Zeichen angekommen ist.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

debugger schrieb:
> Hat jemand dazu ein möglichst schlankes Codebeispiel, das auch wenig
> Ressourcen verbraucht ?
Du brauchst einen Fifo-Routine, die dir die empfangenen Zeichen erst mal 
in einen Puffer schreibt. Sieh dir mal die UART-Lib von Peter Fleury an. 
Die ist zwar für den AVR, aber die Idee dahinter dürtfe weiterhelfen...
http://homepage.hispeed.ch/peterfleury/avr-software.html

> Ich denke daran, den String als gelesen zu werten, wenn z.B. 10
> Millisekunden kein neues Zeichen angekommen ist.
Ja, wenn du meinst das reicht...

von Peter D. (peda)


Lesenswert?

Üblicher Weise liest man eine String ein bis zum CR/LF (0D,0A).


Peter

von Arnold (Gast)


Lesenswert?

Hallo,

ist Dein String komplett unbekannt oder sendest Du ihn selbst?
Ev. kannst Du ja im String die Länge mitsenden (1. oder 2. Byte) Also 
eine Art Header. Eine Checksumme kann man dann auch gut mitsenden.

Gruß
Arnold

von debugger (Gast)


Lesenswert?

Danke für die Hinweise !
Die Routine zum Lesen des Strings soll möglichst vielseitig einsetzbar 
sein.
Z.B. zum Lesen von Rückmeldungen von Modulen auf AT- Befehle, etc.
Endeerkennung mit CR/LF wäre eine Möglichkeit, aber für den Fall von 
Übertragungsfehlern etc. sind wohl noch Ergänzungen nötig.
Werde mich jetzt mal mit der UART-Lib von Peter Fleury beschäftigen und 
mich wieder melden, wenn sich noch Fragen ergeben.

von Karl H. (kbuchegg)


Lesenswert?

debugger schrieb:
> Danke für die Hinweise !
> Die Routine zum Lesen des Strings soll möglichst vielseitig einsetzbar
> sein.

Dann lass den String mit einem Terminierungszeichen enden.
Üblicherweise nimmt man dazu \n
Wenn man es ganz universell haben will, dann kann man konfigurieren, 
welches Zeichen einen String abschliesst.
Aber lass den Quack mit regulärem String-Ende durch Timeout. Das führt 
nur zu Problemen. Und sei es nur ein RS232 Kabel, welches irgendwo 
abfällt, weil die Putzfrau das Kabel rausgerissen hat.

von debugger (Gast)


Lesenswert?

Hallo Karl-Heinz,

bei der Antwort von Modulen (z.B. SMS/GPRS SIM340 EZ oder einfach auch 
irgendwelche Handys, die über ihre Schnittstelle angesteuert werden) 
habe ich es aber nicht selbst in der Hand, wie der String endet.
Werde mal nachsehen, wie die Terminierung da aussieht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.