Stringvergleich

Gast #10598
Lesenswert?

Hallo Zusammen

Ich würde gerne die über UART empfangenen Zeichen vergleichen und wenn 
sie übereinstimmen ein Befehl wider über die UART ausgeben. Leider funzt 
das nicht richtig. Wenn ich zum Beispiel über die PC-tastatur irgendwas 
zum uC sende, bekomme ich diese Zeichen wieder zurück geschickt, obwohl 
ich sie nirgens zum zurücksenden übergebe. Sieht jemand den Bock im 
Code?

Danke und readU Patric
Angehängte Dateien:
Gast #10602
Lesenswert?

hab mal ein paar variabeln als volantile deklariert, funzt aber immer 
noch nicht richtig.
Bei diesem Code habe ich durch Tests folgendes fest gestellt.
- Betätige ich den Schalter nach sendet er: at+cmgr=1 (ohne das ich 
zuvor etwas gesendet habe
- Sende ich mehr als 13 Zeichen, werden die Zeichen 14 bis 26 bei 
Schalterbetätigung an den PC gesendet
Es sieht aus, als überschreibe man fremde Variabel, bzw. speicherplätze, 
wie unterbinde ich das?
Angehängte Dateien:
Gast #10603
Lesenswert?

ohwei, empfang ist ja nur als zeiger deklariert!!!

char empfang[] ist gleichwertig mit char *empfang!!!

entweder du allozierst nun speicher und weist den zu, oder du gibst die 
größe des arrays beim deklarieren an:

char empfang[30].
Gast #10605
Lesenswert?

Hi Patric,

wenn du nur einen Pin eines Ports abfragen willst, solltest du das auch 
machen und nicht das ganze Byte testen. Vielleicht willst die anderen 
Bits ja später mal für Erweiterungen nutzen und dann suchst Du wieder 
Fehler.

Nimm also "if ( !(inp(PINA)&1) )" um ein Bit auf 0 zu testen
und "if (inp(PINA)&1)" um ein Bit auf 1 zu testen.

Deine Abfragen für "Schalter ist high" und "Schalter ist low" sind 
übrigens identisch, ist wohl schonmal ein Fehler. (Bei der if und der 
while Bedingung)

Dann würde ich ok in der Schleife auf 0 setzen, am besten vor der 
Schleife wo du die Anzahl der gleichen Zeichen zählst.

Peter
Gast #10608
Lesenswert?

Danke Jungs für die Tipps. Es funzt nun, wenn ich es mit dem PC Teste. 
Das Problem ist nun, dass das GMS Modul, das ich ansteuern will, zuerst 
ein Enter sendet und erst dann +CMTI: "SM". Deshalb habe ich gedacht 
nehme ich dies auch noch in die Vergleichsvariabel:

 volatile static char text[12] 
={'10','13','+','C','M','T','I',':','"','S','M','"'};

er gibt mir aber beim Compilieren ein paar warnungen aus, wie:
multi-character char constant  oder overflow in implicitconstant 
conversion

Wie gib ich das am besten ein?
\n funzt nicht...

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