GCC f. AVR: strstr(.)

Gast #5611805
Lesenswert?

Die Funktion strstr(...) sucht einen Substring im String. Beide Strings 
befinden sich im RAM des Controllers. Bei der Funktion strstr_P(...) 
befindet sich der String im RAM und der Substring im Flash.

Wie kann man einen String im Flash mit einem Substring im RAM 
durchsuchen?

http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html
Gast #5611853
Lesenswert?

Als allgemeinen Hinweis möchte ich anführen, dass das "fehlen" einer 
Funktion in einer Standardbibliothek meist, aber nicht grundsätzlich, 
darauf hindeutet, dass diese Funktion nicht oder sehr selten gebraucht 
wird.

Daraus folgt, dass es sich oft lohnt, darüber nachzudenken, ob man das 
Problem nicht neu formulieren kann, so dass man mit den vorhandenen 
Funktionen auskommt.

Falls das aus irgendeinem Grund nicht geht, kann man die Funktion selbst 
schreiben.

Falls Du es für angebracht hältst, kannst Du uns ja mal beschreiben, was 
Du erreichen willst. Vielleicht können wir bei der Neuformulierung des 
Problems helfen.
#5613450
Lesenswert?

Bernd schrieb:
> Wie kann man einen String im Flash mit einem Substring im RAM
> durchsuchen?

Mächtig viel Sinn macht das ganze nicht.

strstr_P Funktion gibt es vor allem weil davon ausgegangen wird dass der 
gesuchte String (needle) konstant ist und direkt im Quelltext angegeben 
wird. Damit dieser dann nicht Platz im RAM verschwendet kann man ihn 
auch nur im Flash anlegen lassen und nutzt dann strstr_P.

Wenn nun aber dein "haystack" im Flash liegt, ist er konstant. Du kennst 
ihn. Warum darin rumsuchen? Es ergibt keinen Sinn!
#5613487
Lesenswert?

Cyblord -. schrieb:
> Wenn nun aber dein "haystack" im Flash liegt, ist er konstant. Du kennst
> ihn. Warum darin rumsuchen? Es ergibt keinen Sinn!

Jein. Sieht nur auf den ersten Blick so aus.

Stell' dir beispielsweise einen Parser vor, der überprüft, ob und wenn 
ja welches Token (z.B. bei ein Kommando) vorliegt. Da wirst Du durchaus 
durch eine (konstante) Stringliste spazieren und Vergleiche durchführen.
Persönliche Seite #5613491
Lesenswert?

Markus F. schrieb:
> Da wirst Du durchaus durch eine (konstante) Stringliste spazieren und
> Vergleiche durchführen.

Das würde bedeuten, daß die Tokens alle mehr oder weniger 
aneinandergeklatscht in einem String liegen. Kann man zwar machen, 
aber was wäre damit gewonnen? Eine Stringliste besteht nach meinem 
Verständnis aus separaten Strings, und dann muss man nicht mit 
strstr darin suchen.
#5613505
Lesenswert?

Rufus Τ. F. schrieb:
> Markus F. schrieb:
>> Da wirst Du durchaus durch eine (konstante) Stringliste spazieren und
>> Vergleiche durchführen.
>
> Das würde bedeuten, daß die Tokens alle mehr oder weniger
> aneinandergeklatscht in einem String liegen. Kann man zwar machen,
> aber was wäre damit gewonnen? Eine Stringliste besteht nach meinem
> Verständnis aus separaten Strings, und dann muss man nicht mit
> strstr darin suchen.

Eben. Wenn man das braucht dann hat man in 99% der Fälle eine deutlich 
bessere Lösung übersehen.
#5613523
Lesenswert?

Rufus Τ. F. schrieb:
> Eine Stringliste besteht nach meinem
> Verständnis aus separaten Strings, und dann muss man nicht mit
> strstr darin suchen.

Auch dafür gibt es sinnvolle Beispiele. Stell dir z.B. vor, der User 
soll hier die Möglichkeit haben, ein Subforum per Texteingabe auswählen 
zu können. Er kann dann also "Funk" eingeben, um in "HF, Funk & Felder" 
zu landen.

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