Hallo liebe Gemeinde,
Meine Frage heute lautet: Ist das überhaupt so ohne weiteres auf einem Mikrocontroller möglich, diese Funktion zu nutzen?
Konkret.: Ich habe eine Funktion geschrieben, welche mir ein Kommando aus einem String sucht. Ganz egal was davor steht oder was danach kommt. Dieser Funktion übergebe ich als ersten Parameter den Speicher in dem er den String suchen soll, als zweiten Parameter übergebe ich den such String. Der kann z.B so aussehen "LED:ON", er kann aber auch so aussehen "LED:xx". Mit den xx untersuche ich den String und speichere einfach die Positionen wo die "x" ab und untersuche später was an dieser Stelle für Informationen lauern.
Das funktioniert auch alles. Manchmal habe ich nur das Problem, dass das Programm komplett einen Sittich macht. Das tut es aber auch nur wenn ich mit der Funktion "malloc()" Speicher reservieren möchte (in der Funktion)
Reserviere ich den Speicher statisch, klappt es wie es soll.. Sprich "char *buff = "xxxxxxxxxxxxxxx"// Platz für 15 Bytes..
Gehe ich falsch mit der Funktion "malloc()" um?
CodeBox C
Meine Frage heute lautet: Ist das überhaupt so ohne weiteres auf einem Mikrocontroller möglich, diese Funktion zu nutzen?
Konkret.: Ich habe eine Funktion geschrieben, welche mir ein Kommando aus einem String sucht. Ganz egal was davor steht oder was danach kommt. Dieser Funktion übergebe ich als ersten Parameter den Speicher in dem er den String suchen soll, als zweiten Parameter übergebe ich den such String. Der kann z.B so aussehen "LED:ON", er kann aber auch so aussehen "LED:xx". Mit den xx untersuche ich den String und speichere einfach die Positionen wo die "x" ab und untersuche später was an dieser Stelle für Informationen lauern.
Das funktioniert auch alles. Manchmal habe ich nur das Problem, dass das Programm komplett einen Sittich macht. Das tut es aber auch nur wenn ich mit der Funktion "malloc()" Speicher reservieren möchte (in der Funktion)
Reserviere ich den Speicher statisch, klappt es wie es soll.. Sprich "char *buff = "xxxxxxxxxxxxxxx"// Platz für 15 Bytes..
Gehe ich falsch mit der Funktion "malloc()" um?
CodeBox C
int8_t srchCmd(char *inBuff, char *srchCmd) { char *cmdBeginn = NULL; char *cmdEnd = NULL; char *rawData = NULL; uint8_t cmdStrLen = strlen(srchCmd); uint8_t rawData_ = 0; if (inBuff == NULL || srchCmd == NULL) return -1; /* * how much raw data we will received? */ rawData = strchr(srchCmd,'x'); if(rawData != NULL) while(*rawData++ == 'x')rawData_++; /* * search first character from our string without nx */ //char *cmdBeginn_ = malloc(sizeof(char)*cmdStrLen); char *cmdBeginn_ = "XXXXXXXXXXXXXXXXXXXX"; if (cmdBeginn_ != NULL) strcpy(cmdBeginn_,srchCmd); else return -1; /* * mask the nx out */ if (rawData_ > 0) { cmdBeginn_ += (cmdStrLen-rawData_); *cmdBeginn_ = '\0'; cmdBeginn_ -= (cmdStrLen-rawData_); } cmdBeginn = strstr(inBuff,cmdBeginn_); if(cmdBeginn == NULL) return -1; /* * search last character from our string */ cmdEnd = strrchr(cmdBeginn,cmdBeginn_[cmdStrLen-rawData_]); if(cmdEnd == NULL) return -2; /* * terminate end of searched string */ cmdBeginn+=cmdStrLen; *cmdBeginn = '\0'; cmdBeginn-=cmdStrLen; /* * copy the command to buffer */ strcpy(inBuff,cmdBeginn); return 0; }