www.mikrocontroller.net

Forum: Compiler & IDEs Probleme mit STRINGS!!


Autor: mathias giacomuzzi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: mathias giacomuzzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

  }
 }
}

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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  !!

Autor: mathias giacomuzzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: mathias giacomuzzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: mathias giacomuzzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.