Hallo!
Folgender Code bringt mich ins Grübeln...
Die Funktion prüft einen Puffer (uarx[]), der im Interrupt mit
empfangenen chars befüllt wird, auf zeichenweise Gleichheit mit einem
übergebenen String (*command).
Wirs ein CR empfangen, wird das flag uarx_done gesetzt und die Funktion
kommt über die erste if-Abfrage hinaus.
1 | unsigned char chk_for_cmd(const char *command)
|
2 | {
|
3 | volatile unsigned char *uarxp=&uarx[0];
|
4 |
|
5 | if(uarx_done)
|
6 | { /* uart rx done - process receivings */
|
7 | while(*uarxp == *command)
|
8 | { /* if current characters are identical, *
|
9 | * increase to check next character */
|
10 | *uarxp++;
|
11 | if(*++command=='\0')
|
12 | { /* next character to compare matches string-end *
|
13 | * -> whole command-string detected -> return 1 */
|
14 | uarx_done=0;
|
15 | uarx_clr();
|
16 | return 1;
|
17 | }
|
18 | }
|
19 | }
|
20 | /* no return 1 -> command not detected -> return 0 */
|
21 | return 0;
|
22 | }
|
Das funktioniert auch alles soweit, allerdings nur, wenn ich den
command-Pointer in der if-Abfrage (if(*++command=='\0'))
inkrementiere.
Schreibe ich ein einfaches *command++; in die Zeile davor, warnt mich
der Compiler damit:
warning: value computed is not used.
Und außerdem funktioniert dann auch die Abfrage nicht mehr.
Kann mir das jemand erklären?
Danke, Grüße,
Michael