mikrocontroller.net

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


Autor: debugger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Peter Dannegger (peda)
Datum:

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


Peter

Autor: Arnold (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: debugger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: debugger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.