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
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
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
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.
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
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
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
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.
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.