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

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.

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.