Re: String bleibt leer - Was mach ich falsch? Kategorie: Programmierung (von André H. - 29.04.2011 21:35) | ||
Als Antwort auf String bleibt leer - Was mach ich falsch? von Mani - 29.04.2011 16:05 | ||
| ||
Hallo Mani, > function serial(byte s1[],byte s2[],byte echo) returns int > {byte bit,wert; > bit = 0; > wert = 0; > for bit = 0 ... 29 > { > if wert == 13 break; > wait swcom.rxd(); > wert = swcom.get(); > if echo swcom.put(wert); > if wert != 13 s1[bit] = wert; > } > for bit = 0 ... 29 > { > if wert == 13 break; > wait swcom.rxd(); > wert = swcom.get(); > if echo swcom.put(wert); > if wert != 13 s2[bit] = wert; > } > > } > ... > ... > Wenn nun ein Datensatz ankommt (habs mit einem Terminal probiert) dann kommt brav das Echo, > aber die beiden Stringvariablen bleiben leer. > Hat jemand eine Idee wo mein Denkfehler liegt? Zuerst: Benutze bitte beim Posten von Quellcode die code-Tags. Du hast etwas sehrt elementares beim Schreiben von Strings im C2-Format vergessen: Strings in C2 haben eine feste länge von 32 Byte. Die Bytes 0-29 enthalten die Daten, Byte 30 ist stets 0 und in Byte 31 steht die Anzahl der Zeichen, die im String entahlten sind (0-30). Und letzteres hast Du nicht gesetzt. Wenn Du swcom.inputstr() genauer ansiehst, erkennst Du nach der For-Schleife ein s[31]=i;. Dementsprechend mu� Deine Funktion folgenderma�en aussehen: function serial(byte s1[],byte s2[],byte echo) returns int {byte bit,wert; bit = 0; wert = 0; for bit = 0 ... 29 { if wert == 13 break; wait swcom.rxd(); wert = swcom.get(); if echo swcom.put(wert); if wert != 13 s1[bit] = wert; } s1[31]=bit; for bit = 0 ... 29 { if wert == 13 break; wait swcom.rxd(); wert = swcom.get(); if echo swcom.put(wert); if wert != 13 s2[bit] = wert; } s2[31]=bit; } �brigens kannst Du die Funktion auch etwas universeller gestalten, falls Du auch einmal mehr als zwei Strings brauchst, indem Du Strinarrays nutzt: function serial(string s[], byte len, byte echo) returns int {byte i, bit, wert; wert = 0; for i=0 ...<len { str.clear(s[i]); for bit = 0 ... 29 { if wert == 13 { return i; } wait swcom.rxd(); wert = swcom.get(); if echo swcom.put(wert); if wert != 13 str.putchar(s[i], wert); } } } Der Aufruf sieht dann entsprechend so aus: string test[2]; ... serial(test, 2, 1); //Schnittstelle auslesen ... pcflcd.clear(); pcflcd.print2(test[0]); pcflcd.line(2); pcflcd.print2(test[1]); MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: String bleibt leer - Was mach ich falsch? (von Mani - 30.04.2011 7:42) |