PIC18F97J60 Frage zu String-Funktionen mit C18

OP #3158247
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
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
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
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!
OP #3168783
habs am laufen. Mit dem Debuggerhabe ich mir die Strings angeschaut. Da 
stand nur Mist drin. Im Microchip Forum hatte jemand das gleiche 
Problem...

Der Compiler hat einen Fehler. Der selbe Queltext funktioniert auf dem 
CCS compiler einwandfrei....

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 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.