Forum: Compiler & IDEs strtok_r funktioniert nicht


von Reto (Gast)


Angehängte Dateien:

Lesenswert?

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

von Jörg Wunsch (Gast)


Lesenswert?

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"

von Jörg Wunsch (Gast)


Lesenswert?

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.

von Reto (Gast)


Lesenswert?

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

von Jörg Wunsch (Gast)


Lesenswert?

> 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.

von Reto (Gast)


Lesenswert?

... 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

von OldBug (Gast)


Lesenswert?

$ 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.

von Jörg Wunsch (Gast)


Lesenswert?

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.

von OldBug (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.