Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, C-Control II Station, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.1
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)