Forum: Mikrocontroller und Digitale Elektronik Zeichenkette


von Helge (Gast)


Lesenswert?

Hallo
Wie erkenne ich in C das Ende einer Zeichenkette die über die UART 
eingelesen wurde?Mit der 0 komme ich nicht ganz klar.
so ungefähr sieht das ganze aus:

char a;
char i;
char string[20]; --->wie geht das wenn ich nicht weiß wie lang der 
String wird?

i=0;
do
 {
 a=getchar();
 string[i]=a;
 i++;
 }
while(a!=0); --->die 0 soll das ende der Zeichenkette sein

puts(string); --->den eingelesenen string ausgeben (als test)

Vielen Dank im voraus
Gruß Helge

von Helge (Gast)


Lesenswert?

Hat denn keiner ne Idee? Ich stecke da irgendwie total fest!!!

von ralf (Gast)


Lesenswert?

falls du die zeichen über ein terminal mit der hand
eintippst, ist das letzte zeichen ein:

'\r' = Wagenruecklauf = "ENTER" = 0x0D

darauf müßtest du warten, aber nicht in den string
schreiben, sondern 0x00 für die endekennung.

ralf

von Helge (Gast)


Lesenswert?

Ich lese den String über die serielle Schnittstelle ein.Ist ne 
Rückmeldung vom Handy. Ich schicke zB. at+cmgr=1 raus (funktioniert 
auch)und bekomme als Antwort ne SMS zurück.Da müßte doch zum Schluß 
automatisch ne \0 mit im String sein.Aber das funktioniert irgendwie 
nicht.
Gruß Helge

von Sascha Weitkunat (Gast)


Lesenswert?

wie währe es wenn du dann auch mal auf '\0' prüfst anstatt auf den wert 
0? a ist in deinem konstrukt übrigens überflüssig.

von ralf (Gast)


Lesenswert?

auszug von:
http://www.joern.de/handypc/handypc.htm


at+cmgr=1<CR>                       PC-->Handy: SMS Nr.1 lesen, <13>
+CMGR: "REC UNREAD","+491755759702",,"02/03/08,07:26:57+04"<CR>
                                    Handy-->PC: ungelesene 
SMS,Nr.,,Datum,Uhrzeit, <13>
Hallo, das ist ein Test<CR>         Handy-->PC: Text, <13>
<CR>                                Handy-->PC: <13>
OK<CR>                              Handy-->PC: OK<13>


also bringt <CR> das ganze in form.
gilt natürlich nur für den textmode.

ralf

von Helge (Gast)


Lesenswert?

Vielen Dank für die Tips.
Ich glaube es lag an meiner 0. Das mit dem '\0' hab ich nicht ganz 
begriffen.
Der Link ist auch recht interessant. Ich benutze den PDU-Mode.Das mit 
<CR> funktioniert ja alles recht gut.
Bloß mit der '\0' :-((((( ojee
Gruß Helge

von Matthias (Gast)


Lesenswert?

Hi

dein Handy schickt einfach kein '\0' (Das ab ANSI C99 übrigens identisch 
ist mit 0) sondern nur einen formatierten Text der irgendwie mit <CR> 
formatiert ist. Das mußt du halt auswerten. Oder du wartest eine 
bestimmte Zeit bis keine Zeichen mehr ankommen und zerpflückst das Ganze 
dann hinterher.

Matthias

von Helge (Gast)


Lesenswert?

Das Handy wird kein '\0' schicken,das denke ich auch.Ich dachte es wird 
beim abspeichern in den String automatisch hinten dran gehängt wenn kein 
zeichen mehr empfangen wird.Ich werde wahrscheinlich die schleife 20mal 
durchlaufen lassen.Dann müßte ich ja 20 zeichen in meinem String 
wiederfinden.

von Helge (Gast)


Lesenswert?

Also irgendwie stelle ich mich zu blöd an!
Auf die '\0' warten bringt nichts weil das Handy keine sendet.
Jetzt wollte ich einfach mal 10 Zeichen einlesen. Wenn das Handy aber 
nur 8 Zeichen sendet hängt die ganze Sache bei getchar() fest.
Gibts ne möglichkeit wenn kein Zeichen mehr anliegt das es dann 
irgendwie weiter geht? Hab schon mit if und else rum experimentiert aber 
alles ohne Erfolg.
Wenn ich nur 5 Zeichen einlese und das Handy zB. 8 Zeichen sendet ist 
alles iO..
Gruß Helge

von Matthias (Gast)


Lesenswert?

Hi

ich würde das per INT machen. Der serielle INT schreibt alles was er 
empfängt in einen Ringpuffer. In der Hauptschleife wertest du dann einen 
Zähler aus den die INT Routine setzt um festzustellen ob und wieviele 
Zeichen empfangen wurden. Dann kannst du den Inhalt des Ringpuffer 
auswerten.

Matthias

von Helge (Gast)


Lesenswert?

Das wär noch ne möglichkeit.Hab zwar noch nicht mit dem UART INT 
gearbeitet aber ich werde mich da mal hinterklemmen.
Danke für den Tip
Gruß Helge

von ralf (Gast)


Lesenswert?

irgendwie komme ich hier nicht mit.
wenn du mit einem handy kommunizieren willst, mußt du dich
an den standard halten.
warum willt du 10, 8 oder 5 zeichen einfach so einlesen?
im pdu- und im textmode wird immer die längenangabe mit-
gesendet. werte das mal aus, dann klappts auch.

ralf

von Helge (Gast)


Lesenswert?

Hi Ralf
Das mit den 8 Zeichen war ja auch nur zum probieren.Hab die Sache jetzt 
mit dem INT gelöst.Geht super.Ich dachte die Sache mit dem INT ist 
komplizierter.
Gruß Helge

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.