Probleme mit STRINGS!!

Gast #181496
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
Angehängte Dateien:
Gast #181497
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.
Gast #181498
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;

  }
 }
}
Gast #181499
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.
Gast #181500
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  !!
Gast #181501
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
Gast #181502
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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren