Hallo, ich versuche einen string zu parsen, leider jedoch ohne Erfolg. Der Code ist angehängt. Der erste Teil ($GPGLL) wird korrekt abgeschnitten und der Pointer dummie zeigt auch darauf. Doch die weiteren Pointer zeigen irgendwohin, nur nicht auf den string. Laut Doku sollte diese Funktion aber schon so irgendwie funktionieren: "strtok_r parses the string s into tokens. The first call to strtok_r should have string as its first argument. Subsequent calls should have the first argument set to NULL. If a token ends with a delimiter, this delimiting character is overwritten with a '\0' and a pointer to the next character is saved for the next call to strtok_r. The delimiter string delim may be different for each call. last is a user allocated char* pointer. It must be the same while parsing the same string. strtok_r is a reentrant version of strtok(). The strtok_r() function returns a pointer to the next token or NULL when no more tokens are found." Kann mir irgendwer sagen warum das nicht geht?!? Vielen Dank
Null problemo hier: (gdb) targ rem :1212 Remote debugging using :1212 0x00000000 in __vectors () (gdb) load Loading section .data, size 0x32 lma 0x1c6 Loading section .text, size 0x1c6 lma 0x0 Start address 0x0, load size 504 Transfer rate: 4032 bits in <1 sec, 31 bytes/write. (gdb) b main Breakpoint 1 at 0xd2: file foo.c, line 17. (gdb) c Continuing. Breakpoint 1, main () at foo.c:17 (gdb) n (gdb) p dummie $1 = 0x800100 "$GPGLL" (gdb) p data $2 = 0x800100 "$GPGLL" (gdb) p savept $3 = 0x800107 "4700.2475,N,800.3416,W,161229.487,A*2C" (gdb) n (gdb) p st_latitude $4 = 0x800107 "4700.2475" (gdb) n (gdb) p N_S $5 = 0x800111 "N" (gdb) n (gdb) p st_longitude $6 = 0x800113 "800.3416" (gdb) n (gdb) p O_W $7 = 0x80011c "W"
Achso, da Du's auch nicht dazu geschrieben hast: AVR-GCC 3.4.1, avr-libc 1.0.4, simulavr, AVR-GDB. Compiliert für einen ATmega128.
Hallo Jörg, vielen Dank für Deine Antwort. Sorry, dass ich nicht angegeben habe mit welchem System ich arbeite. Bei Dir scheints ja wirklich zu funktionieren. Ich verwende einen ATMEGA32. Compilieren tut es auch ohne Probleme, aber ich erhalte leider nicht die erwarteten Strings zurück. Bisher habe ich nicht herausgefunden, wie ich mit einem ATMEGA32 debuggen kann. Sehe ich das richtig, dass Du einen Simulator einsetzt? Gibt es sowas auch für Windows? Vielen Dank und Gruss Reto
> Sehe ich das richtig, dass Du einen Simulator einsetzt? Ja. > Gibt es sowas auch für Windows? Ich habe hier einfach simulavr verwendet. Ja, gibt's auch für Windows, ist bei WinAVR mit dabei. Ansonsten hast Du ja unter Windows auch AVR Studio als Simulator sowie (gegen Entgeld) VMLAB.
... bei WinAVR ist das dabei?!? Ich hab damit bis jetzt nur compiliert und geladen. Kann mir jemand eine kurze Anleitung geben wie ich damit debuggen kann? Ich find das irgendwie nicht raus... Der muss die object files haben, oder? Und wie geht das mit dem AVR Studio? Ich hab das eben am Anfang gleich zur Seite gelegt, da man dort nur Assembler Code verarbeiten kann. Das muss ja irgendwie auch die object files kriegen. Doch wenn ich die öffne erscheinen nur kryptische Zeichen... Vielen Dank
$ simulavr -g -d atmega128 $ avr-insight foo.elf Im insight dann im Menü "Run->Connect to target" Target: Remote/TCP Hostname: localhost Port: 1212 "OK" "Run->Download" Sieht ganz nett aus... Oder halt $ make all extcoff Und die foo.cof im AVRStudio öffnen.
Ich nehme zwar AVR Studio nicht (hab' kein Windows), aber besser als der alte COFF-Krempel sollte wohl das neue Beta-Test-Programm für deren ELF-Unterstützung allemal sein.
Das hab ich leider noch nicht getestet, deshalb "nur" der Hinweis meinerseits auf extcoff ;) Vielleicht schreibt ja mal jemand, der das ausprobiert hat, etwas dazu...?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.