www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Warten bis String A eine gewisse Länge hat (BASCOM)


Autor: Kurt Witzler (bascomania)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag

Ich habe ein problem weshablb ich hier schreibe^^

Also:

Ich bekomme einen String von der länge 81 über die UART-Schnittstelle. 
(mit Interruupt.

Wie kann ich mein Programm warten lassen (also das es nichts anderes 
macht ausser die Interrupts und halt warten bis der String die Länge 81 
hat?)

Hier mein Code

Do
D = Right(a , 1)
If D = Chr(010) Then
      If Len(a) = 17 Then
      B = Right(a , 14)
      B = Left(b , 4)
         If B = "CMTI" Then
         Cls
         Lcd "CMTI"
         A = ""
         Print "at+cmgr=1"
      Do
      If Len(a) = 81 Then
      Until Len(a) = 81
      A = Right(a , 9)
      A = Left(a , 1)
      Cls
      Lcd A
      Do
      Print A;
      Loop
      Wait 1

End If
End If
End If
End If
Loop

(nur die wichtige Stelle...)

Zur Erklärung:

Der Atmega wird über einen 17 Zeichen langen String darüber informiert, 
dass es Neuigkeiten gibt. Dieser String zeichnet sich durch nen LF am 
Ende aus.
Um die Neuigkeiten zu erhalten, schickt er dann den AT-Command 
"at+cmgr=1" und erhält darauffolgend den String, allerdings soll er 
warten bis der vollständig angekommen ist (81 Zeichen)

Oder gibts fürs ganze noch ne schönre Lösung?

Grüsse


habs glaub geschafft jungs, danke trotzdem!

Autor: Charly B. (charly)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dim laenge as byte
Do
D = Right(a , 1)
If D = Chr(010) Then
      If Len(a) = 17 Then
      B = Right(a , 14)
      B = Left(b , 4)
         If B = "CMTI" Then
         Cls
         Lcd "CMTI"
         A = ""
         Print "at+cmgr=1"
      Do
      If Len(a) = 81 Then
      Until Len(a) = 81   <- ???????????????
      A = Right(a , 9)
      A = Left(a , 1)
      Cls
      Lcd A
      Do
      Print A;
      Loop
      Wait 1

End If
End If
End If
End If
laenge = len(a)
Loop until laenge = 81


viel erfolg

Autor: ah (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder gibts fürs ganze noch ne schönre Lösung?


Ja. Gibt es. Ich nehme an diese Aufgabe laeuft repetitiv durch. Was 
geschieht wenn jemand den Stecker zieht ? Mach einen Timeout rein, von 1 
Sekunde oder so. Der Timeout started mit dem Anfang der Meldung. Wenn 
vor Ablauf des Timeouts, das Ende nicht kam, beginn von vorne.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wollte das vielleicht mal ein Ringpuffer werden...?

Autor: Avr Nix (avrnix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Bascom gibt unter c:\programme\mcs...\sample\

rs232buffer Programme wäre ggf. eine bessere Lösung

http://www.comwebnet.de

Autor: Kurt Witzler (bascomania)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay

lohnt sich manchmal hallt doch nochmal in den Thread reinzuschauen;)

Danke, werd mir die Beispiele anschaun.

Was ist ein Ringpuffer? :S

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was ist ein Ringpuffer? :S

Eine Warteschlange für "vernachlässigte" Bytes. ;-)

...

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.