Probleme mit STRINGS!!

Gast #181496
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
> 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
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
>                         //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
//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
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
> 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).
Gast
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??
Gast
also auf jeden fall funktioniert es jetzt danke ich habe es jetzt
einfach so gemacht !! if(c != '\n' && c!='\r')

danke nochmal!!

mfg mathias

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.