Freitagsfrust - Pointer

OP #6602050
Lesenswert?

Hallo Forum,

ich stehe irgendwie ganz schön auf dem Schlauch...

µC = STM32F405xx
Compiler GCC

Die betreffende Funktion wird aus einer ISR (USART) aufgerufen.
Es wird ein Pointer auf ein festes "Pattern" übergeben,
welchen mit memcmp() gefunden werden soll.

Aufruf: MySearch(const char *cv);

Wenn ich das Such-Pattern (RCV_ERRORCME) direkt verwende
funktioniert alles.
Wenn es wie oben beschrieben als Parameter übergeben wird geht nix mehr.
(keine Übereinstimmung)

Im Anhang ist das Dissasembly.
In der direkten Variante (die funktioniert) schreibt der Compiler 
Konstanten rein. (z.B. statt strlen() movs 2,#11)
In der indirekten Variante (über Funktionsparameter) wird indirekt 
adressiert. Nur geht das leider nicht.
Sollte ich strcmp() verwenden?
Null-Terminiert ist nur das Such-Pattern.
Den Quellstring müsste ich evtl. über einen Zwischenpuffer 
Null-terminieren.

Fragen über Fragen.
OP #6604952
Lesenswert?

Hallo Zusammen,

sorry für die fehlenden Angaben.
Wollte eigentlich "Salami" vermeiden...

***** Die wichtigste Info fehlt: Was ist RCV_ERRORCME? *******
const char RCV_ERRORCME[] = { '+', 'C', 'M', 'E', ' ', 'E', 'R', 'R', 
'O', 'R', ':', 0x0 };

Aufruf:
rc = MySearch(&RCV_ERRORCME[0]);

Werde noch die entsprechenden Codeschipsel extrahieren
und als *.c-Datei hier reinstellen.

..oder finde (hoffentlich) dabei selber den Fehler ;-)

Grüße
Runout
#6604958
Lesenswert?

Thomas T. schrieb:
> ***** Die wichtigste Info fehlt: Was ist RCV_ERRORCME? *******
> const char RCV_ERRORCME[] = { '+', 'C', 'M', 'E', ' ', 'E', 'R', 'R',
> 'O', 'R', ':', 0x0 };

Ernsthaft? Einen String aus einzelnen chars konstruiert? Noch nie was 
von String-Literals wie "+CME ERROR:" gehört?

>> welchen mit memcmp() gefunden werden soll.

memcmp() für Strings?

> rc = MySearch(&RCV_ERRORCME[0]);

Und die nächste C-Grundlage nicht verstanden :(. Der Name eines Arrays 
ist direkt ein Zeiger auf das Array, und damit ein Zeiger auf das erste 
Element. RCV_ERRORCME reicht völlig.

> Werde noch die entsprechenden Codeschipsel extrahieren
> und als *.c-Datei hier reinstellen.

Danke, reicht schon um die Diagnose zu stellen und die notwendige 
Behandlung vorzuschlagen: 
https://www.amazon.de/Programming-Language-Prentice-Hall-Software/dp/0131103628 
[1] durcharbeiten.

--
[1] Alt, aber immer noch mehr als gut genug solide C-Grundlagen zu 
erlernen.
Gast #6604969
Lesenswert?

Thomas T. schrieb:

> Wollte eigentlich "Salami" vermeiden...

Dafür machst Du das aber sehr konsequent. Mit "cv" geht es also nicht. 
Dann wird cv wohl irgendwas Verkehrtes sein, aber wo cv herkommt, weiß 
man nicht. Ist geheim. Häng einfach den GANZEN C-Code an. Als Text, 
nicht als Bild.

Abgesehen davon ist der Adreßoperator bei RCV_ERRORCME und dem memcmp 
auch sinnfrei, weil RCV_ERRORCME schon ein Array ist. Bei strlen 
übergibst Du das ja auch direkt.

Hannes J. schrieb:
> memcmp() für Strings?

Die Idee scheint zu sein, den String nur bis zur Länge des konstanten 
Strings zu vergleichen, d.h. zu testen, ob der Eingabestring mit dem 
konstanten String beginnt, nicht ob er identisch ist.
Gast #6604987
Lesenswert?

Was mich auch interessiert: was genau geht eigentlich im Kopf eines 
Menschen vor, der fragt, wieso es mit RCV_ERRORCME geht und mit cv 
nicht, aber weder von vornherein sagt, was RCV_ERRORCME ist, noch was cv 
ist? WAS GEHT DA VOR?
Gast #6604989
Lesenswert?

Das kommt von den Corona-Beschränkungen. Ohne anregende Impulse wird das 
Gehirn zu Matsche. Ich habe im vergangenen Jahr auch schon ein paar 
unfassbare Blödheiten von mir gegeben.

Hoffentlich ist das reversibel.

...

Ist es doch, oder?
OP #6605011
Lesenswert?

Also Jungs,

euch ist wohl das Frühlingswetter etwas auf den Kopf geschlagen!

Q: "Was ist cv?" -> Steht im Anfangspost...

Das die Pattern als Character-Array definiert sind,
liegt daran, dass sie aus einer vorhandenen Lib übernommen wurden.
Das sollte aber keine Schnappatmung auslösen...

Und es ist in der Tat so, das ich Teilstrings vergleichen will.
Dafür ist memcmp schon geeignet.
(wurde aber alles schon beschrieben)

Also, nicht so viel Schwanzfedern spreizen
und etwas gemäßigtere Antworten, bitte.

Ihr schafft das ;-)
Gast #6605014
Lesenswert?

Thomas T. schrieb:

> Q: "Was ist cv?" -> Steht im Anfangspost...

Code, Code, Code. Wenn Du wüßtest, was Du tatsächlich tust, hättest Du 
das Problem ja nicht. Daher sind Prosa-Beschreibungen wertlos.

> Ihr schafft das ;-)

Da Du keinen weiteren Code posten möchtest, darfst Du Dich nun alleine 
auf die Suche machen. Du schaffst das.

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