PIC18F97J60 Frage zu String-Funktionen mit C18

OP #3158247
Lesenswert?

Hallo Zusammen,

irgendwie sehe ich vor lauter Bäumen den Wald nicht. Ich sende mit 
RS-232 ein Steuerkommando an den Kontroller MCT?, HDW? usw.

Im Prinzip funktioniert alles. Beim Testen habe ich jetzt festgestellt, 
wenn der String nur minimal abweicht (z.B. MCI? trotzdem als korrekt 
gelesen wird..

Ich habe es mit strncmp-Befehl probiert, komme aber nicht wirklich 
weiter. Weiß jemand wie man dies lösen kann.

unsigned char str_RS232[4];

if(strcmp(*"MCT?", *str_RS232) == 0)
{
 PORTB = 0X01;
 LcdPrintf(3,9, (const MEM_MODEL rom char *)"PIC18F97J60 ");
 printf("PIC18F97J60 \n\r");
}

Viele Grüße
Ingo
#3158249
Lesenswert?

Ingo Schick schrieb:

>
> unsigned char str_RS232[4];


?

Der String "MCT?" passt da aber gar nicht rein!

"MCT?" benötigt mindestens ein Array der Länge 5(!). Du hast das 
obligatorische abschliessende \0 vergessen. Und das muss da rein, damit 
du strcmp benutzen kannst.

>
> if(strcmp(*"MCT?", *str_RS232) == 0)

was machen die * hier?

Du vergleichst nicht deine Strings!

   if( strcmp( str_RS232, "MCT?" ) == 0 )
OP #3158274
Lesenswert?

Hallo Karl-Heinz,

das Array habe ich angepasst. Ohne die Sterne compiliert der compiler. 
Aber dann geht gar nichts. Mit den Sternen fragt er zuminstest 
einigermaßen ab. Sehr seltsam. Sowas hatte ich noch nie.

gets1USART(str_RS232,4);
LcdPrintf(2,9, (const MEM_MODEL rom char *)"%.4s", str_RS232);


if(strcmp(*"MCT?", *str_RS232) == 0)
{
     PORTB = 0X01;
     LcdPrintf(3,9, (const MEM_MODEL rom char *)"PIC18F97J60 ");
     printf("PIC18F97J60 \n\r");
}
#3158280
Lesenswert?

Ingo Schick schrieb:
> Hallo Karl-Heinz,
>
> das Array habe ich angepasst. Ohne die Sterne compiliert der compiler.
> Aber dann geht gar nichts. Mit den Sternen fragt er zuminstest
> einigermaßen ab.

Nö tut er nicht.
Ich könnte dir das jetzt auseinanderklamüsern, was da wirklich passiert, 
aber das ist mir ehrlich gesagt heute schon zu mühsam.

Das einzige was mich wirklich verblüfft: Wie hast du den Unsinn 
eigentlich durch den Compiler gekriegt?

> gets1USART(str_RS232,4);

was bedeuten die 4 hier?
Die Länge des übergebenen Arrays oder die Anzahl der druckbaren Zeichen?
Meistens ist es die Arraylänge. Also muss da auch 5 hin. Bzw. schreibs 
in dem Fall besser so

  gets1USART(str_RS232,sizeof(str_RS232));


> LcdPrintf(2,9, (const MEM_MODEL rom char *)"%.4s", str_RS232);

lass die 4 weg.


Mann - du versteckst ja überall deine Fehler!

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