String
-
Oke das werde ich versuchen. Danke für Deine rasche Antwort.
-
Anfänger_99 schrieb:
...Bei jedem Empfang eines Zeichens wird ein Interrupt aufgerufen.
...du könntest jedes zeichen mit dem interrupt in die unten stehende funktion
int GPRMC ( char c )
reinschicken.
wenn 6 aufeinander folgende zeichen "$GPRMC" ergeben, wird eine 1 zurückgegeben.
das nächste zeichen, das du dann empfängst, gehört zu den 20 folgenden, die du speichern möchtestint GPRMC ( char c ) { static int cnt = 0; int len = 6; char *gprmc = "$GPRMC"; if ( cnt < len && gprmc[cnt] == c ) { cnt++; } else { cnt = 0; } if ( cnt == strlen(gprmc) ) return 1; return 0; } int main() // demo { char* stream = "abcd$GPRMChiergehtslos...xyz"; while(*stream) { if ( GPRMC(*stream++) ) break; } // stream zeigt jetzt genau auf das nächste zeichen hinter dem suchwort puts(stream); return 0; } :)
-
agga ugga schrieb:
[cpp]
int GPRMC ( char c )
{
static int cnt = 0;
int len = 6;char *gprmc = "$GPRMC";
if ( cnt < len && gprmc[cnt] == c )
{
cnt++;
}
else
{
cnt = 0;
}if ( cnt == strlen(gprmc) ) return 1;
return 0;
}in einem interrupt sollte man keine rechenzeit verschwenden, auch wenn's bei RS232 nicht so viele interrupts gibt:
int GPRMC ( char c ) { static int cnt = 0; static char *gprmc = "$GPRMC"; if (gprmc[cnt] == c) { cnt++; if (gprmc[cnt] == 0) { cnt = 0; return 1; } } else { cnt = 0; } return 0; }
-
ja, das strlen wollt ich eigenlich rausschmeissen, deshalb hatte ich oben ja auch len benutzt.
unten hatte ich dann vergessen den funktionsaufruf mit len zu ersetzen.
deine methode ist natürlich noch eleganter, weil sie ohne len, also mit einer variable weniger auskommt.
-
Danke für Eure Antowrten.
Kann leider nicht compilieren.An was könnte das liegen?
-
Anfänger_99 schrieb:
Danke für Eure Antowrten.
Kann leider nicht compilieren.An was könnte das liegen?welche fehlermeldung kommt denn bei dir?
-
Das ist nur ein Teil der Fehlermeldungen. Ohne den hinzugefügten Code,gab es keine Errors.
Errors:
*** Error 27 : Expression must evaluate to a constant
*** Error 43 Line 91(4,6): Expecting a declaration
*** Error 43 Expecting a declaration
*** Error 48 Expecting a (
*** Error 48 Expecting a (
*** Error 43 Line 91(19,21): Expecting a declaration
*** Error 48 Line 91(22,23): Expecting a (
*** Error 43 Line 92(4,5): Expecting a declaration
-
Anfänger_99 schrieb:
*** Error 27 : Expression must evaluate to a constant
*** Error 43 Line 91(4,6): Expecting a declaration
*** Error 43 Expecting a declaration
*** Error 48 Expecting a (
*** Error 48 Expecting a (
*** Error 43 Line 91(19,21): Expecting a declaration
*** Error 48 Line 91(22,23): Expecting a (
*** Error 43 Line 92(4,5): Expecting a declarationna, dann zeig doch mal deine zeilen 27...48.
-
Auf diesen Zeilen befindet sich genau dieser obengepostete Code.
int GPRMC ( char c ) { static int cnt = 0; static char *gprmc = "$GPRMC"; if (gprmc[cnt] == c) { cnt++; if (gprmc[cnt] == 0) { cnt = 0; return 1; } } else { cnt = 0; } return 0; }
-
da sind keine syntax-errors drin^^
das sollte sich compilieren lassen. das problem muss wo anders sein.