Forum: Compiler & IDEs Probleme mit STRINGS!!


von mathias giacomuzzi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo kann mir mal jemand villeicht helfen ?? ich habe ein Problem mit
diesem Code!! Ich möchte mit einem Siemens Händy über die Serielle
Schnittstelle Daten versenden!! Jetzt wollte ich nur mal schauen ob die
Kommunikation mit dem Handy überhaupt funktioniert, das tut sie
eigentlich auch aber nicht ganz!! Das Handy schick wenn man es Anruft
über die Serielle immmer RING!! Jetzt möchte ich das mit eine String
Vergleich abfangen aber das funktioniert einfach nicht, ich weis nicht
mehr weiter!!??

Bitte Danke mfg mathias

von Chris (Gast)


Lesenswert?

> Händy
Argh. Lern schreiben.


Zum Topic: Grenz den Fehler bitte etwas ein. Ein zip-Archiv wird sich
keiner downloaden und komplett nach einem Fehler durchsehen, den du
ohne Probleme auch näher hättest beschreiben können.
Mit "eingrenzen" meine ich aber nicht, eine komplette C-Datei
hochzuladen. Poste bitte nur die paar Zeilen des Stringvergleichs, der
nicht funktioniert.

Reparier aber vorher deine Ausrufe- und Fragezeichentasten. Die
scheinen bei dir zu klemmen.

von mathias giacomuzzi (Gast)


Lesenswert?

also hier mal die For-Loop, das einlesen scheint auch zu funktionieren,
es steht aufjedenfall mal das richtige auf dem Display, aber der strcmp
funktioniert nicht mehr!

danke im voraus

mfg mathias


for(;;){



  c = uart_getc();

    if ( c & UART_NO_DATA ){

    }else{
    if(c != '\r'){
      rxBuffer[i]=c;
      i++;
    }else{
      rxBuffer[i] = '\0';
      i = 0;

      lcd_gotoxy(0,0);

                        //bei der Ausgabe auf dem Display
                        //steht auch das Richtige. das
                        //heißt ja das in rxBuffer auch
                        //das richtige eingelesen wurde.
                        lcd_puts(rxBuffer);


      if(strcmp(rxBuffer,"RING")==0){
        state = 1;
      }else state = 0;

      if(strcmp(rxBuffer,"OK")==0){
        state = 2;
      }else state = 0;
    }
  }

  switch(state){

    case 0:

    break;

    case 1:
      lcd_gotoxy(0,0);
      lcd_puts("STATE 1, RING");
      state = 0;

    break;

    case 2:
      lcd_gotoxy(0,0);
      lcd_puts("STATE 2, OK");
      state = 0;

    break;

  }
 }
}

von Chris (Gast)


Lesenswert?

>                         //bei der Ausgabe auf dem Display
>                         //steht auch das Richtige. das
>                         //heißt ja das in rxBuffer auch
>                         //das richtige eingelesen wurde.

Nicht zwangsläufig. Nicht alle Zeichen erscheinen sichtbar auf dem
LCD.

Meine Glaskugel sagt mir, dass rxBuffer am Ende einen Zeilenumbruch
enthält, "RING" aber nicht. Und dass aus diesem Grund das strcmp
fehlschlägt. Ist aber sehr unscharf und nur eine Vermutung.

von Werner B. (Gast)


Lesenswert?

//In rxBuffer steht "RING", state = ?


    if(strcmp(rxBuffer,"RING")==0){
        state = 1;
      }else state = 0;
//In rxBuffer steht "RING", state = 1
      if(strcmp(rxBuffer,"OK")==0){
        state = 2;
      }else state = 0;
// Nachdem in rxBuffer nicht "OK" steht, ist jetzt state == 0  !!

von mathias giacomuzzi (Gast)


Lesenswert?

ach ja werner das ist eine fehler sorry das ist aber nicht das problem
glaube ich !!

@Chris ja das dachte ich mir auch schon kann ich das irgendwie umgehen?
zum Beispiel mit strncmp ? ==> und hier die Länge für Ring angeben ?
wäre dan 4 oder

mfg mathias

von Chris (Gast)


Lesenswert?

> zum Beispiel mit strncmp ? ==> und hier die Länge für Ring
> angeben ? wäre dan 4 oder

Wäre eine Möglichkeit, allerdings würde das auch auf "RING FAILED"
(Beispiel) true ergeben.
Besser wäre es, Zeilenumbrüche aus rxBuffer zu entfernen oder mit
"RING\n" zu vergleichen (oder "RING\r\n" oder "RING\n\r"
oder [...], was halt in rxBuffer steht).

von mathias giacomuzzi (Gast)


Lesenswert?

ja aber was ich nicht verstehe ist: ich lese ja ein und wenn \r kommt
dann höre ich auf und schließe den String mit '\0' ab!! wiso steht
dann noch ein \n bzw. \r drin??

von mathias giacomuzzi (Gast)


Lesenswert?

also auf jeden fall funktioniert es jetzt danke ich habe es jetzt
einfach so gemacht !! if(c != '\n' && c!='\r')

danke nochmal!!

mfg mathias

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.